[机器学习] 模型融合笔记

一、引言

1.1 模型融合是什么?

模型融合是一种将多个异质个体学习器进行组合从而得到具有比单学习器更强泛化能力模型的方法,属于集成学习的范畴。

在这里,需要区别一下模型融合和集成学习中的另一类方法——机器学习元算法。机器学习元算法包括大家熟知的Bagging和Boosting方法(本文不对这两种方法进行展开介绍)。两者的区别在于,模型融合一般采用异质学习器进行集成,且个体学习器通常为强学习器,而机器学习元算法则是将弱学习器通过算法集成以提升效果。

1.2 为什么模型融合有用?

从经验上理解:
举个例子,假如你想要买一台电脑,你大概率不会直接购买购物网站搜索结果中的第一台电脑,而是综合考虑网站推荐结果、朋友的意见以及专业论坛中其他人的评价从而进行决策。在这个例子中,网站推荐、朋友意见和论坛评价相当于不同的个体学习器,每个学习器通过不同的方式得到对电脑的排名结果,购买者则综合考虑不同学习器的结果得到最终的电脑排名,进行购买决策。

从理论上解释:
学习器的结合可能从三个方面带来好处[1]:

  1. 从统计方面看,由于学习任务的假设空间往往很大,可能有多个假设在训练集上达到同样性能,此时若使用单学习器可能因误选而导致泛化性能不佳,结合多个学习器则会减小这一风险
  2. 从计算的方面来看,学习算法往往会陷入局部极小,有的局部极小点对应的泛化性能可能很糟糕,而通过多次运行之后进行结合,可降低陷入糟糕局部极小点的风险
  3. 从表示的方面来看,某些学习任务的真是假设可能不在当前学习算法所考虑的假设空间中,此时若使用单学习器则肯定无效,而通过结合多个学习器,由于相应的假设空间有所扩大,有可能学得更好的近似
    image

1.3 模型融合有什么要求?

模型融合若想取得较好的效果,需要个体学习器“好而不同”。“好”指的是个体学习器需要有一定的准确性,“不同”指的是学习器间具有差异。[1]模型的不同可以体现在:

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

下图中西瓜书中的实例对该问题进行了说明,采用简单投票的方法确定融合模型的结果,图(a)子模型满足“好”和“不同”两个条件,图(b)中子模型不满足“不同”的条件,图(c)子模型不满足“好”的条件。
image

在应用中可以通过个体学习器结果的相关性判断模型是否“不同”,如Marios Michailidis在KDD杯比赛时计算模型的皮尔逊相关系数选择个体学习器。

1.4 模型融合有什么应用场景?

在Kaggle、天池等数据挖掘比赛后期,选手在常常寻找队友,通过模型融合的方式提升模型效果。
在信贷风控等实际应用中,模型融合也具有一定的应用价值。参考资料2给出了一个示例,在现金贷场景中,随着金融业务的下沉,大部分用户的强征信数据存在严重缺失,为了对用户信用进行更好的评估,金融机构从用户的多元数据着手,从用户的消费、社交、行为等不同场景数据出发对用户风险进行评估。对不同领域的数据,效果最佳的模型有所不同,通过模型融合,将各领域数据上的最优子模型进行集成,可以提升违约风险判定模型整体的准确性。同时,因为子模型可为不同类型的模型算法,因此,对于高维、稀疏、非线性的数据建模能够更高效准确。

1.5 模型融合的不足

虽然该方法能够增强模型的预测能力,但是多模型的学习加上再学习过程会显著增加计算代价。所以在真实应用中,需要权衡融合模型的复杂度和准确度,而非一昧地堆砌模型来提升分数。

二、方法介绍

在模型融合中,将个体学习器结合在一起时使用的方法叫做结合策略。根据结合策略的不同,可以将模型融合方法分为平均法、投票法以及堆叠法。在这些方法的基础上,也有一些方法对训练数据划分方式做出改进,如混合法。下文对几种常用的模型融合方法进行介绍。相关的实现代码可以在参考资料6中找到。

2.1 平均法(Averaging)

适用于回归、分类(概率)任务,多个学习器的预测结果进行平均。该方法的优点在于能够平滑结果,减少过拟合。其实现方法可以分为以下四种:

  1. 算数平均法
    $ \bar{\hat{y}}=\frac{1}{n}(\hat{y}_1+\hat{y}_2+...+\hat{y}_2) $

  2. 几何平均法
    $ \bar{\hat{y}}=\sqrt[n]{\hat{y}_1\times\hat{y}_2\times...\times{\hat{y}_n}} $
    该方法受极端值影响较算术平均法小。

  3. 加权平均法
    $ \bar{\hat{y}}=\frac{\omega_1\hat{y}_1+\omega_2\hat{y}_2+...+\omega_n\hat{y}_n}{\omega_1+\omega_2+...+\omega_n} $
    该方法权重可以人工主观或根据模型分数设置,加权时一般对效果更好的模型赋予更高的权重,这种情况下,只有在表现较差的集体同意另一种选择时,才能在否决表现更好的模型,从而对表现最好的模型进行一些修正,带来小的提高。下表为5个模型的训练结果及其在算数平均和加权平均融合方式下的准确率示例。

MODEL PUBLIC ACCURACY SCORE
GradientBoostingMachine 0.65057
RandomForest Gini 0.75107
RandomForest Entropy 0.75222
ExtraTrees Entropy 0.75524
ExtraTrees Gini (Best) 0.75571
Voting Ensemble (Democracy) 0.75337
Voting Ensemble (3*Best vs. Rest) 0.75667
  1. 排序平均法
    若模型评估标准是排序或者与阈值相关(e.g. AUC),使用简单平均法不一定能取得较好的结果,如下图中,模型1波动较小,几乎没有给模型2带来大的影响。
    image

对该问题,可以使用基于排序的模型融合方法解决,具体步骤为:
(1)对预测结果进行排序
(2)对排序序号将进行平均
(3)对平均排序序号进行归一化
将排序平均法应用于上例,结果如下图所示:
image

此时,波动较小的模型也能够对最终的模型结果带来影响。需要注意的是,排序平均法中的排序是针对测试集预测结果来做的,在实际场景下,很多时候需要对新样本做预测,此时的处理方法有两种:
(1)重新排序:将新样本放入原测试集中,重新排序,一旦数据量大,时间复杂度会增加。
(2)参考历史排序:先将历史测试集的预测结果和排序结果保存,新样本进来后,在历史测试集中找到与新样本预测值最近的值,然后取其排序号赋予新样本。之后平均排序,使用历史最大最小值进行归一化操作即可。

2.2 投票法(Voting)

适用于分类任务,对多个学习器的预测结果进行投票,少数服从多数。需要有三个及以上的模型。包括两种具体实现方法:普通投票法、加权投票法。加权权重可以人工主观设置或依据模型评估分数设置权重。

2.3 堆叠法(Stacking)

Stacking的思路是,基于原始数据,训练多个基学习器,然后将基学习器的预测结果组合成新的训练集,去训练新的学习器。Stacking主要分为以下三类:单层堆叠法、多层堆叠法、其它技术与堆叠法的结合。

2.3.1 实现方法

  1. 单层堆叠法
    单层堆叠法指在基学习器上只堆叠一层元学习器,其示意图如下:
    image

其中,基学习器可以是同质或异质的模型,元学习器在传统做法中选用逻辑回归模型,也可以使用非线性模型作为元学习器,如GBDT,KNN,NN,RF等。其训练过程如下:
image

  1. 多层堆叠法
    image

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

2.3.2 过拟合问题

在堆叠法中,若直接使用全量数据训练得到元学习器的标签,则基学习器和元学习器本质上都是用同一训练集训练的,可能导致信息泄露,从而导致元学习器过拟合数据集。对于该问题,一般通过以下方法降低再训练的过拟合性:
(1)上文介绍的K折交叉验证方法
(2)元学习器尽量使用简单的线性模型
(3)使用混合法

2.4 混合法(Blending)

Blending的想法是:对原始数据集,先划分出一个较小的留出集,比如10%训练集被当作留出集,那么Blending用90%的数据做基学习器的训练,而10%留出集用于训练元学习器,这样基学习器和元学习器是使用不同的数据来训练的。其示意图如下:
image

相较于Stacking,Blending能更有效地防止信息泄露,但也正因为如此,元学习器只用了较小部分的数据集进行训练,且容易对留出集过拟合。

参考资料

[1] 周志华,2016,《机器学习》
[2] 唐正阳,2017,CreditX氪信,为什么说集成学习模型是金融风控新的杀手锏?
[3] 田杨军,2020,Datawhale,数据挖掘终篇!一文学习模型融合!从加权融合到stacking, boosting
[4] Datawhale, 2021, 模型融合方法最全总结!
[5] Angel,2019,AIQ,机器学习比赛大杀器 ---- 模型融合 (stacking & blending)
[6] https://github.com/MLWave/Kaggle-Ensemble-Guide/tree/master/src

posted @ 2022-03-24 18:08  千凉_ryou  阅读(746)  评论(0编辑  收藏  举报