数据挖掘之模型融合
1、模型融合目标
对于多种调参完成的模型进行模型融合,需要综合考虑不同模型的情况,并将它们的结果融合到一起,使任务性能获
得提升。
2、常用方法
(一).简单加权融合
- 简单加权融合:回归(分类概率):算术平均融合(Arithmetic mean),几何平均融合(Geometric mean)
- 分类:投票(Voting)
- 综合:排序融合(Rank averaging),log融合
1、voting
Voting即投票机制,分为软投票和硬投票两种,其原理采用少数服从多数的思想。
硬投票:对多个模型直接进行投票,最终投票数最多的类为最终被预测的类。
软投票:和硬投票原理相同,增加了设置权重的功能,可以为不同模型设置不同权重,进而区别模型 不同的重要度。
备注:此方法用于解决分类问题。
2、 averaging
Averaging,其原理是对模型结果取平均。
处理回归问题,直接取平均值作为最终的预测值。(也可以使用加权平均)
平均法存在问题就是如果不同回归方法的预测结果波动幅度相差比较大,那么波动小的回归结果在融合时候起的作用就比较小。
3、ranking
Ranking的思想和Averaging一致,但是因为上述平均法存在一定的问题。所以这里采用了把排名做平均,如果有权重,则求n个模型权重比排名之和,即为最后的结果。
(二).stacking/blending
- 构建多层模型,并利用预测结果再拟合预测
1、stacking
简单来说 ,stacking 就是当用初始训练数据学习出若干个基学习器后,将这几个学习器的预测结果作为新的训练集,来学习一个新的学习器。stacking是一种分层模型集成框架。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为训练集进行再训练,从而得到完整的stacking模型。
stacking两层模型都使用了全部的训练数据。
第一层模型:
首先数据有训练集和测试集两部分
- 1.对训练集进行五折交叉验证,把训练集划分为A,B两部分
- 2.对A部分进行训练,对B部分进行预测,得到a1,五折后则为a1,a2,a3,a4,a5,对他们合并,形成n行一列的数据
- 3.对测试集进行预测,会得到b1,b2,b3,b4,b5,将各部分相加取平均得到m行一列的数据
- 4.以上是一个模型,如果有三个模型,则可以得到A1,A2,A3,B1,B2,B3
- 5.在此之后,我们把A1,A2,A3并列合并得到一个n行三列的矩阵作为training data,B1,B2,B3并列合并得到一个m行三列的矩阵作为testing data。让下一层的模型,基于他们进一步训练。
2、blending
Bending是一种模型融合方法,对于一般的Blending,主要思路是把原始的训练集先分成两部分,比如70%的数据作为新的训练集,剩下30%的数据作为测试集。
第一层我们在这70%的数据上训练多个模型,然后去预测那30%数据的label。
第二层里,我们就直接用这30%数据在第一层预测的结果做为新特征继续训练即可。
Blending的优点在于:
- 1.比stacking简单(因为不用进行k次的交叉验证来获得stacker feature)
- 2.避开了一个信息泄露问题:generlizers和stacker使用了不一样的数据集
而缺点在于:
- 1.使用了很少的数据(第二阶段的blender只使用training set10%的量)
- 2.blender可能会过拟合
- 3.stacking使用多次的交叉验证会比较稳健
对于实践中的结果而言,stacking和blending的效果是差不多的,所以使用哪种方法都没什么所谓,完全取决于个人爱好。
(三).boosting/bagging(在xgboost,Adaboost,GBDT中已经用到)
- 多树的提升方法
1、Bagging
Bagging方法的出现,可以完美地解决了决策树过拟合的问题,同时bagging的使用也会使分类器分类效果得到了显著的提高。
应用场景:对不稳定的分类器做Bagging是一个好主意。在机器学习中,如果训练数据的一个小变化导致学习中的分类器的大变化,则该算法(或学习算法)被认为是不稳定的。
Bagging就是采用有放回的方式进行抽样,用抽样的样本建立子模型,对子模型进行训练,这个过程重复多次,最后进行融合。大概分为两步:
-
1.重复K次
有放回地重复抽样建模
训练子模型 -
2.模型融合
模型融合,如果是分类问题用voting解决 。如果是回归问题用average解决。
注意:在bagging集成中,各个模型的预测不会彼此依赖。Bagging算法不用我们自己实现,随机森林就是基于Bagging算法的一个典型例子,采用的基分类器是决策树。可以直接调用。
2、Boosting
Boosting的思想是一种迭代的方法,它每次训练使用的都是同一个训练集。但是每次它会给这些分类错误的样例增加更大的权重,下一次迭代的目标就是能够更容易辨别出上一轮分类错误的样例。最终将这些弱分类器进行加权相加。
注意:Boosting下一次的迭代必须在上一次的基础上。
同样地,基于Boosting思想的有AdaBoost、GBDT等,也可以直接调用。