模型融合---Stacking和Blending方法

前言

机器学习中常常需要进行模型融合操作,而对于简单的问题,我们可以采用简单的方法,比如回归问题可以采用简单的线性加权融合,对于分类问题可以进行投票。这两个方法都是简单好理解的方法,但是有些时候为了达到更好的融合效果,我们需要更加花里胡哨的融合方法,其实也不复杂,原理也很简单。这里就介绍两种常用的进阶模型融合方法—stackingblending

这里是kaggle上面对于这两种模型融合方法的英文介绍:
kaggle模型融合介绍

话不多说,直接开始!

Stacking

Stack的中文翻译为“堆”,“叠”,就是把多个结果堆叠起来形成一个最终的结果,但是个人感觉中文翻译并不能完全解释stacking的思想。

下面是我自己画的一个Stacking思想的流程图:
Stacking流程图
Stacking主要思想如下:

1.对于训练集,先用多个模型对其进行训练,模型训练好后,让模型对训练集和测试集都进行标签的预测(没错,训练集虽然有标签,但是也要进行预测,后面会用到);

2.然后将多个模型对训练集的预测值train_pre和测试集的预测值test_pre分别保存起来(上图所示);

3.最后将多个模型的训练集的预测值作为新的特征和训练集的真实标签train_true一起输入第二层的模型中进行训练(这里多个模型对训练集的预测值是作为特征,真实标签train_true是作为标签label),然后让第二层训练好的模型再对之前多个测试集的预测值(同样,多个模型对测试集的预测值也是作为特征输入模型,但是和训练集不同的是没有真实标签,我们要做的就是预测标签label)进行预测得最终结果。

总结来说:stacking就是将多个模型对训练集和测试集的预测结果分别合并起来作为新的训练集和测试集,然后放到另外一个模型中进行训练,然后对测试集进行预测。还是很好理解的。

Stacking的优缺点及改进方式:

优点:stacking的方法可以提高预测的准确度,一般情况(上面我举的例子)stacking是采用两层模型,如果想搞得更加复杂也是可以的,可以多层模型都可以,那样就有点神经网络那味了哈哈哈!

缺点:stacking是容易过拟合训练集的,当遇到测试集和训练集数据分布不太一致的时候泛化能力不够强。

改进方法:
1.最简单的是可以采用k折交叉验证的方法进行第一层模型的训练和预测,交叉验证本身训练集有区别,可以适当提高单个模型的泛化能力。
2.第一层的模型可以选用简单的一些线性模型,简单的模型复杂度不高,一般不会产生严重的过拟合。

Blending

blending的大致思想结构和stacking差不多,只不过在第一层训练模型的时候训练集划分有些差别。

下面是我画的blending的流程图示意:
在这里插入图片描述
Blending的主要思想:和Stacking的区别在于第一层模型训练的时候,是选取了训练集的70%的数据进行训练,然后对训练集剩下的30%的数据进行预测(这里70%和30%可根据个人意愿选择比例,只要将训练集分为合适的两部分就行了),然后就将对30%训练集的预测结果作为第二层模型训练的输入特征,后面都和Stacking是一样的。(blending和stacking的区别:stacking是对全部训练集进行预测,得到全部训练集的预测结果;而blending是将训练集划分为两部分,一部分用于模型训练,一部分用于预测结果)

Stacking和Blending的对比:

实际应用的效果上面都差不多,只不过blending两层模型训练数据不同,可以避免信息泄露问题。

写在最后

本人才疏学浅,如有理解错误或者不足的地方欢迎指正!

猜你喜欢

转载自blog.csdn.net/qq_44694861/article/details/115208731