Stacking集成学习算法

由于Blending在集成过程中只会用到验证集的数据,对数据的利用效率低,为了解决这个问题,可以引入交叉验证的方式。Stacking集成学习算法就是基于这个想法。
Stacking集成学习算法_第1张图片

  • 首先将所有数据分为训练集和测试集,假设训练集样本数为10000,测试集样本数为2500,对训练集进行5折交叉验证,每次使用训练集中的8000个样本训练模型,剩余2000个样本用来验证(在上图中表示为橙色)。
  • 每次验证相当于使用图中蓝色的8000个样本训练出一个模型,每个模型对验证集进行预测,得到2000个预测结果。同时测试集进行预测得到2500个预测结果。经过5折交叉验证,可以得到训练集所有样本在验证时的预测结果,同时也对于测试集所有样本都可得到5个预测结果。
  • 接下来将训练集所有样本的预测结果作为新的特征,标记为 A 1 A_1 A1,而对于测试集中每个样本的5个预测结果进行加权平均,得到新的特征,标记为 B 1 B_1 B1
  • 以上基于一个基模型在数据集上得到特征 A 1 , B 1 A_1,B_1 A1,B1,如果使用3个基模型,可以在训练集和预测集分别得到新特征 A 1 , B 1 , A 2 , B 2 , A 3 , B 3 A_1,B_1,A_2,B_2,A_3,B_3 A1,B1,A2,B2,A3,B3
  • 基于训练集新特征 A 1 , A 2 , A 3 A_1,A_2,A_3 A1,A2,A3训练第二层学习器,然后对测试集的新特征 B 1 , B 2 , B 3 B_1,B_2,B_3 B1,B2,B3进行预测,得到最终的预测结果。
    Stacking集成学习算法_第2张图片
    sklearn并没有直接实现Stacking的方法,因此我们需要下载mlxtend工具包(pip install mlxtend)。

Stacking案例
Stacking集成学习算法_第3张图片
Stacking集成学习算法_第4张图片
可见,此案例中,Stacking的效果不如Random Forest。

Stacking集成学习算法_第5张图片
Stacking集成学习算法_第6张图片

使用第一层所有基分类器所产生的类别概率值作为meta-classfier的输入。需要在StackingClassifier 中增加一个
参数设置:use_probas = True。

另外,还有一个参数设置average_probas = True,那么这些基分类器所产出的概率值将按照列被平均,否则会拼接。

例如:
基分类器1:predictions=[0.2,0.2,0.7]
基分类器2:predictions=[0.4,0.3,0.8]
基分类器3:predictions=[0.1,0.4,0.6]
(1)若use_probas = True,average_probas = True,
则生成的meta-feature为[0.233, 0.3, 0.7]
(2)若use_probas = True,average_probas = False,
则生成的meta-feature为[0.2,0.2,0.7,0.4,0.3,0.8,0.1,0.4,0.6]。

使用概率作为元特征:
Stacking集成学习算法_第7张图片
使用概率作为元特征的Stacking比使用标签的Stacking提升了准确性,但是与Random Forest相比,虽然平均准确性相同,但是方差更大,性能依然不如Random Forest。

使用5折分类与网格调参基模型:
Stacking集成学习算法_第8张图片
Stacking集成学习算法_第9张图片
Stacking集成学习算法_第10张图片
基模型可以重复使用同一类但参数不同的模型:
Stacking集成学习算法_第11张图片
Stacking集成学习算法_第12张图片
Stacking集成学习算法_第13张图片
经过调参,并且增加了1个KNN基模型后,准确率提高到了0.96。

在不同特征子集上运行的分类器的堆叠:
Stacking集成学习算法_第14张图片
Stacking集成学习算法_第15张图片
绘制ROC曲线:
Stacking集成学习算法_第16张图片
Stacking集成学习算法_第17张图片在这里插入图片描述
Stacking集成学习算法_第18张图片
Stacking集成学习算法_第19张图片
Stacking集成学习算法_第20张图片
相比Blending,Stacking使用了交叉验证,对数据的利用率更高,同时结果也更加稳健。

本文来源于Datawhale的开源学习内容,链接是https://github.com/datawhalechina/team-learning-data-mining/tree/master/EnsembleLearning

感谢Datawhale对开源学习的贡献!

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