失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Stacking集成学习算法

Stacking集成学习算法

时间:2024-03-28 09:56:11

相关推荐

Stacking集成学习算法

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

首先将所有数据分为训练集和测试集,假设训练集样本数为10000,测试集样本数为2500,对训练集进行5折交叉验证,每次使用训练集中的8000个样本训练模型,剩余2000个样本用来验证(在上图中表示为橙色)。每次验证相当于使用图中蓝色的8000个样本训练出一个模型,每个模型对验证集进行预测,得到2000个预测结果。同时测试集进行预测得到2500个预测结果。经过5折交叉验证,可以得到训练集所有样本在验证时的预测结果,同时也对于测试集所有样本都可得到5个预测结果。接下来将训练集所有样本的预测结果作为新的特征,标记为A1A_1A1​,而对于测试集中每个样本的5个预测结果进行加权平均,得到新的特征,标记为B1B_1B1​。以上基于一个基模型在数据集上得到特征A1,B1A_1,B_1A1​,B1​,如果使用3个基模型,可以在训练集和预测集分别得到新特征A1,B1,A2,B2,A3,B3A_1,B_1,A_2,B_2,A_3,B_3A1​,B1​,A2​,B2​,A3​,B3​。基于训练集新特征A1,A2,A3A_1,A_2,A_3A1​,A2​,A3​训练第二层学习器,然后对测试集的新特征B1,B2,B3B_1,B_2,B_3B1​,B2​,B3​进行预测,得到最终的预测结果。

sklearn并没有直接实现Stacking的方法,因此我们需要下载mlxtend工具包(pip install mlxtend)。

Stacking案例

可见,此案例中,Stacking的效果不如Random Forest。

使用第一层所有基分类器所产生的类别概率值作为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比使用标签的Stacking提升了准确性,但是与Random Forest相比,虽然平均准确性相同,但是方差更大,性能依然不如Random Forest。

使用5折分类与网格调参基模型:

基模型可以重复使用同一类但参数不同的模型:

经过调参,并且增加了1个KNN基模型后,准确率提高到了0.96。

在不同特征子集上运行的分类器的堆叠:

绘制ROC曲线:

相比Blending,Stacking使用了交叉验证,对数据的利用率更高,同时结果也更加稳健。

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

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

如果觉得《Stacking集成学习算法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。