当前位置: 首页 > news >正文

数据挖掘终篇!一文学习模型融合!从加权融合到stacking, boosting

模型融合:通过融合多个不同的模型,可能提升机器学习的性能。这一方法在各种机器学习比赛中广泛应用, 也是在比赛的攻坚时刻冲刺Top的关键。而融合模型往往又可以从模型结果,模型自身,样本集等不同的角度进行融合。

数据及背景

零基础入门数据挖掘 - 二手车交易价格预测_学习赛_赛题与数据_天池大赛-阿里云天池的赛题与数据(阿里天池-零基础入门数据挖掘)

模型融合

如果你打算买一辆车,你会直接走进第一家4S店,然后在店员的推销下直接把车买了吗?大概率不会,你会先去网站,看看其他人的评价或者一些专业机构在各个维度上对各种车型的对比;也许还会取咨询朋友和同事的意见。最后,做出决策。

模型融合采用的是同样的思想,即多个模型的组合可以改善整体的表现。集成模型是一种能在各种的机器学习任务上提高准确率的强有力技术。

模型融合是比赛后期一个重要的环节,大体来说有如下的类型方式:

1. 简单加权融合:

  • 回归(分类概率):算术平均融合(Arithmetic mean),几何平均融合(Geometric mean);

  • 分类:投票(Voting);

  • 综合:排序融合(Rank averaging),log融合。


     

2. stacking/blending:

  • 构建多层模型,并利用预测结果再拟合预测。


     

3. boosting/bagging:

  • 多树的提升方法,在xgboost,Adaboost,GBDT中已经用到。



     

平均法(Averaging)

基本思想对于回归问题,一个简单直接的思路是取平均。稍稍改进的方法是进行加权平均。权值可以用排序的方法确定,举个例子,比如A、B、C三种基本模型,模型效果进行排名,假设排名分别是1,2,3,那么给这三个模型赋予的权值分别是3/6、2/6、1/6。

平均法或加权平均法看似简单,其实后面的高级算法也可以说是基于此而产生的,Bagging或者Boosting都是一种把许多弱分类器这样融合成强分类器的思想。

简单算术平均法:如果公式查看不了,请点击【文章原文

Averaging方法就多个模型预测的结果进行平均。这种方法既可以用于回归问题,也可以用于对分类问题的概率进行平均。

加权算术平均法:

这种方法是平均法的扩展。考虑不同模型的能力不同,对最终结果的贡献也有差异,需要用权重来表征不同模型的重要性importance。

投票法(voting)

基本思想假设对于一个二分类问题,有3个基础模型,现在我们可以在这些基学习器的基础上得到一个投票的分类器,把票数最多的类作为我们要预测的类别。

绝对多数投票法:最终结果必须在投票中占一半以上。

相对多数投票法:最终结果在投票中票数最多。

加权投票法:其原理为

硬投票对多个模型直接进行投票,不区分模型结果的相对重要度,最终投票数最多的类为最终被预测的类。

软投票:增加了设置权重的功能,可以为不同模型设置不同权重,进而区别模型不同的重要度。


 

from sklearn.tree import DecisionTreeClassifierfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.linear_model import LogisticRegressionfrom sklearn.ensemble import VotingClassifier

model1 = LogisticRegression(random_state=2020)model2 = DecisionTreeClassifier(random_state=2020)model = VotingClassifier(estimators=[('lr', model1), ('dt', model2)], voting='hard')model.fit(x_train, y_train)model.score(x_test, ytest)

<section role="presentation" data-formula="H(\boldsymbol x)=c{arg \max\limitsj\sum{i=1}^Tw_ih_i^j(\boldsymbol x)}
" data-formula-type="block-equation" style="text-align: left;overflow: auto;">

查看本文全部内容,欢迎访问天池技术圈官方地址:数据挖掘终篇!一文学习模型融合!从加权融合到stacking, boosting

相关文章:

  • 2.7、创建列表(List)
  • 【LeetCode】1. 两数之和(Java自用版)
  • 我在京东做数据分析,一位京东数据分析师的工作日常
  • 一篇复现Docker镜像操作与容器操作
  • 机器学习:处理jira工单的分类问题
  • 复盘一下我用过的设计模式
  • 如何忽略Chrome最小字号的限制
  • 机器学习神经网络由哪些构成?
  • 计算机网络:现代通信的基石
  • 阿里云倚天云服务器怎么样?如何收费?
  • WPF---1.入门学习
  • 生产计划数据模型,实现能源企业数字化高效管理
  • FastAPI+React全栈开发05 React前端框架概述
  • 时序预测 | Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测
  • SQLite3 数据库的基本操作
  • ES6指北【2】—— 箭头函数
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • create-react-app做的留言板
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java多线程(4):使用线程池执行定时任务
  • Java知识点总结(JavaIO-打印流)
  • nginx 配置多 域名 + 多 https
  • Nodejs和JavaWeb协助开发
  • PHP的Ev教程三(Periodic watcher)
  • React组件设计模式(一)
  • Sass Day-01
  • 从零开始学习部署
  • 类orAPI - 收藏集 - 掘金
  • 力扣(LeetCode)357
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 前嗅ForeSpider采集配置界面介绍
  • 自制字幕遮挡器
  • 你对linux中grep命令知道多少?
  • Java数据解析之JSON
  • 仓管云——企业云erp功能有哪些?
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $forceUpdate()函数
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (定时器/计数器)中断系统(详解与使用)
  • (二)PySpark3:SparkSQL编程
  • (附源码)php新闻发布平台 毕业设计 141646
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (十八)三元表达式和列表解析
  • (十一)图像的罗伯特梯度锐化
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Framework .NET Core与 .NET 的区别
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性