模型融合方法

融合对象

融合对象,是不同的个体学习器 (Individual Leaner)。
对于个体学习器来说,它们的不同体现在:

  • 不同训练数据:数据集使用比例、预处理方法 (缺失值填补、特征工程等);
  • 不同模型结构:RF、XGBoost、LightGBM、CatBoost、CNN、LSTM等;
  • 不同超参:随机种子数、权重初始化、收敛相关参数 (例如学习率、batch size、epoch、早停步数)、损失函数、子采样比例等。

融合方法

1.投票法

适用于分类任务,对多个学习器的预测结果进行投票,即少数服从多数。投票法有两种:普通投票法加权投票法。加权的权重可以人工主观设置或者根据模型评估分数来设置权重。投票需要3个及3个以上的模型,同时建议要保证模型的多样性,有时候对同质模型们使用投票法并不能取得较好的表现,这是因为同质模型得到的结果之间可能具有较强的相关性,从而会导致多数人把少数人的好想法给压下去了。为了避免这个问题,可以参考在2014年KDD Cup上Marios Michailid的做法,他对所有结果文件计算Pearson系数,最后选取其中相关性小的模型结果进行投票,分数获得了提升。

2.平均法

适用于回归、分类 (针对概率) 任务,对多个学习器的预测结果进行平均。平均法的好处在于平滑结果,从而减少过拟合。常见的平均法有三种:算术平均法几何平均法加权平均法

假设我们有n个模型的预测结果 y ^ \hat y y^,则三类平均计算方式如下:
(1)算术平均法
在这里插入图片描述
(2)几何平均法
在这里插入图片描述
(3)加权平均法
在这里插入图片描述
几何平均法受极端值的影响较算术平均法小。另外,关于加权平均法的权重,也可以人工主观根据模型分数来设置。同时也建议尽量平均差异性小的模型们

3.排序法

如果模型评估标准是与排序或者阈值相关 (例如AUC),简单使用平均法并不见得都能取得较好得结果
举个栗子:
模型融合方法_第1张图片
上图能发现,模型1几乎没有给模型2带来大的影响,因为像这种波动小的模型做融合,对最终结果造成的影响不大。为了解决这个问题,可以考虑使用排序平均法。在赛圈,碰到AUC,很多都会采用这种方法进行模型融合。比如在招商银行的 “消费金融场景下的用户购买预测” 的冠军方案中 [3] 便针对赛题方的AUC评分标准,采用了基于排序的模型融合方法。排序法的具体步骤如下:
(1) 对预测结果进行排序
(2) 对排序序号进行平均
(3) 对平均排序序号进行归一化
模型融合方法_第2张图片
通过平均排序归一化,我们能发现波动小的模型1给最终的模型融合带来了影响。但在使用排序法的时候,有个地方我们需要注意:我们都知道,排序是针对测试集预测结果来做的,但如果在工业界使用,很多时候会有新样本进来要你预测,此时该怎么办呢?针对新样本,其实有两种处理方式:

  • 重新排序:将新样本放入原测试集中,重新排序,一旦数据量大,时间复杂度会增加。
  • 参考历史排序:先将历史测试集的预测结果和排序结果保存,新样本进来后,在历史测试集中找到与新样本预测值最近的值,然后取其排序号赋予新样本。之后平均排序,使用历史最大最小值进行归一化操作即可

4. Stacking

Stacking的思路是基于原始数据,训练出多个基学习器,然后将基学习器的预测结果组合成新的训练集,去训练一个新的学习器

Stacking主要分为以下三类:

  • 单层Stacking
  • 多层Stacking
  • 其它技术与Stacking的结合

(1)单层Stacking

单层Stacking是指在基学习器上只堆叠一层元学习器,这也是最常见的Stacking结构,示意图如下所示:
模型融合方法_第3张图片
图里的基学习器可以是同质或异质的模型,而元学习器在传统做法中是选用逻辑回归模型,当然也能使用非线性模型作为元学习器,例如GBDT, KNN, NN, RF等。比如在 ”天池零基础入门金融风控-贷款违约预测“ 一赛中,TOP6的方案使用了LightGBM,CatBoost和XGBoost作为基学习器,然后利用Pearson相关系数分析模型结果差异性,选取差异较大的结果文件,再输入第二层元学习器RF进一步融合结果。如果我们有4个特征的数据集和3个基学习器,,单层Stacking (5-Fold) 的训练和预测的具体细节是怎样的呢?请见下图:
模型融合方法_第4张图片
单层Stacking在基学习器和元学习器上可灵活选用自己喜欢的模型,甚至说能暴力去做(量力而行):
模型融合方法_第5张图片
除此之外,Stacking在特征上也可以玩出一些花样,介绍了两种单层Stacking上的特征交互方法:

  • Feature-weighted Linear Stacking
    (FWLS):Still等人在论文中提出了该方法。基学习器们的预测结果叫元特征,因为它们是用于训练元学习器。FWLS提出可以在元学习器前,对元特征进行特征交互,交互对象可以是元特征本身,也可以是原始特征(即:元特征元特征或 元特征原始特征)。
  • Quadratic Linear Stacking of Models:它采用的特征交互模式是:元特征元特征+元特征原始特征。

(2) 多层Stacking
这个是听说的,即增加多层元学习器,但我也没用过。大概结构示意图如下:
模型融合方法_第6张图片

(3) 其它技术与Stacking的结合
Stacking可以与无监督学习方法结合。例如:使用t-SNE将数据降维到2或3维,然后用非线性元学习器来融合。案例可参考Kaggle的“Otto Group Product Classification Challenge”中,Mike Kim提出的方法

5. Blending

我们思考下Stacking,基学习器和元学习器本质上都是用同一训练集训练的 (虽然输入的x不一样,但标签y一样),这就会造成信息泄露,从而导致元学习器过拟合我们的数据集。为了避免这种问题,Blending方法被提出了,它的想法是:对原始数据集先划分出一个较小的留出集,比如10%训练集被当做留出集,那么Blending用90%的数据做基学习器的训练,而10%留出集用作训练元学习器,这样基学习器和元学习是用不同数据集来训练的。Blending的示意图如下所示:
模型融合方法_第7张图片
上图的红框是区分Stacking的关键。相比于Stacking,Blending能有效防止信息泄露,但也正因为如此,元学习器只用了较小部分的数据集进行训练,且容易对留出集过拟合。如果数据量有限,个人更偏好于Stacking

总结

模型融合看起来很赞,很多比赛选手也热衷于在比赛后期去找使用不同模型的队友进行模型融合,但真实工业中,还是Less is better。例如:在2006年,Netflix组织的第一场数据科学竞赛,队伍Korbell以8.43%的提升获得了第一进步奖,为此,他们融合了107个算法且耗时2000小时。由于融合带来的复杂度,最后Netflix并没有将他们方案完全应用在产品中 [7]。现在很多比赛平台也声明禁止选手过多堆砌模型,特别是很多比赛已经开始将预测时间加入分数评估中。对于我们来说,模型融合是一种提升分数的有力技巧,但还是建议平衡好整个解决方案的准确率和效率。

参考链接:
模型融合方法详解

你可能感兴趣的:(数据挖掘,机器学习)