stacking模型融合_深入了解模型融合Enmble(深度+代码)

更新时间:2023-06-18 23:24:05 阅读: 评论:0

stacking模型融合_深⼊了解模型融合Enmble(深度+代
码)
在实际⼯作中,单模型遇到了瓶颈,⼀般这个时候提升模型效果,⼀种是做特征,另外⼀种就是利⽤复杂模型;我在⼀边探索特征,⼀边了解了些模型融合的知识。发现了kaggle很经典的材料。原⽂很长,⼲货太多,本⽂以KAGGLE ENSEMBLING GUIDE为主线,整理了enmble的多种⽅法,尽可能通俗的讲明⽩enmble。本⽂⽬录如下:
Voting enmbles(投票)
averaging(平均)
Stacking(堆叠)
《长恨歌》白居易Blending(⾮交叉堆叠)
Stacking 的⼀些奇淫技巧
Reference(本⽂参考)
Reference2(Kaggle-Enmble-Guide原⽂涉及到的所有链接)
Voting enmbles(投票)
我们常见的投票机制,少数服从多数,针对分类模型。
这⾥主要解决两个问题,⼀个是enmble为什么能降低误差,另⼀个是融合弱相关的结果效果更好。
1.为什么enmble会取得更好的效果:
假设我们有10个样本,真实数据都是1:
样本:1111111111
此外,我们通过模型A,B,C得到准确度(Accuracy)分别为80%,70%,60%的结果分别为:
A: 1111111100 = 80% accuracy
B: 0111011101 = 70% accuracy
C: 1000101111 = 60% accuracy
通过简单的enmble (vote:ABC同时对⼀个样本进⾏投票,投票数⼤于等于2的记为1,否则为0),于是得到结果Z为:
Z: 1111111101 = 90% accuracy
2.选择弱相关性的融合
同上,10个样本,真实数据都是1。通过模型A,B,C得到准确度分别为80%,80%,70%的结果(单模型效果明显⽐之前的模型们要好),但是三个模型⾼度相关。通过majority vote得到结果Z:
样本:1111111111
A: 1111111100 = 80% accuracy
B: 1111111100 = 80% accuracy
C: 1011111100 = 70% accuracy
Z: 1111111100 = 80% accuracy快乐六一
结果并没有提⾼。反⽽不如上三个表现较差但是弱相关的模型融合效果好.
这⾥的相关性使⽤的是⽪尔逊相关性代码:correlations.py
这⾥介绍的是公平投票 代码:kaggle_vote.py
还可以使⽤带权重的投票,效果的越好的模型权重越⾼,⽐如权重为1/loss
⼏何权重投票,有些情况下较公平投票效果更好 代码:kaggle_geomean.py
averaging(平均)
小泰迪
平均法⼀般是针对回归问题的。字⾯意思理解就是对结果求平均值。代码:kaggle_avg.py
但是直接对结果求平均值会有度量上的问题,不同的⽅法预测的结果,融合的时候波动较⼩的起的作⽤就⽐较⼩,为了解决这个问题,提出了Rank Averaging,先将回归的值进⾏排序,在利⽤均匀分布打分。代码:kaggle_rankavg.py
⼀个⼩栗⼦:
模型1:
Id,Prediction
1,0.35000056
2,0.35000002
3,0.35000098
4,0.35000111
模型2:
Id,Prediction
1,0.57
2,0.04
3,0.99
4,0.96
模型1和模型2直接averaging融合的话,模型1⼏乎对模型2没有影响,就是我们刚才说的波动较⼩的模型在融合过程中起的作⽤较⼩的问题。
我们采⽤Rank Averaging这种⽅式,则有:
先将结果排序:
模型1:
Id,Rank,Prediction
1,1,0.35000056
2,0,0.35000002
3,2,0.35000098
4,3,0.35000111
模型2:
Id,Rank,Prediction
1,1,0.57
2,0,0.04
3,3,0.99
4,2,0.96
对排序结果进⾏归⼀化:
模型1:
Id,Prediction
1,0.33
2,0.0
3,0.66
4,1.0
模型2:
Id,Prediction
1,0.33
2,0.0
3,1.0
4,0.66
再对归⼀化后的排序结果融合打分:
Id,Prediction
1,0.33
2,0.0
3,0.83
4,0.83
Stacking(堆叠)
Stacking是通过⼀个元分类器或者元回归器整合多个模型的集成学习技术。基础模型利⽤整个训练集做训练,元模型利⽤基础模型做特征进⾏训练。⼀般Stacking多使⽤不同类型的基础模型
下图是介绍stacking时,必备的⼀张图(以5-Fold Stacking 为例)
整个过程有点像CV。
⾸先,将训练集分成5份,共计迭代5次,每次迭代都将4份数据作为Train Set对每个Ba Model进⾏训练,然后剩下的⼀份作为Hold-out Set(可以类⽐cv中的测试集)进⾏预测。同时,每个Ba Model在Test Set的预测值也要保存下来。经过5-Flod迭代后,我们获得了⼀个:
花卉纹#训练数据⾏数 * # Ba Model数量的矩阵(每个Ba Model在进⾏cv 的过程,分别会对每⼀份Hold-out-t进⾏预
测,汇总产⽣⼀个对所有训练集的预测)
测,汇总产⽣⼀个对所有训练集的预测),这个矩阵作为第⼆层的训练数据进⾏训练,得到model B
然后将之前保存的每个Ba Model对测试集进⾏的预测的平均值拼成⼀个 :
#测试数据⾏数 * #Ba Model 数量的矩阵(每个Ba Model会对测试集进⾏5-fold次预测,所以在拼测试数据的预测结果之前,需要对每个Ba Model预测5-Fold次的预测结果求均值)
最后,再根据model B对测试集的预测进⾏预测。完成了⼀个5-fold的Stacking
原⽂中为了⽅便读者更好的理解,给出了⼀个2-fold stacking的例⼦,这⾥进⾏简单的介绍:
将测试集分为两部分:train_a和train_b
将基模型在训练集train_a上训练并在训练集train_b上预测
同样将基模型在训练集train_b上训练并在训练集train_a上预测
将基模型在所有训练集上训练在测试集上预测
利⽤第⼀阶段在训练集train_a和train_b的预测训练我们的stacker模型。
我们对测试集进⾏基模型预测产⽣特征时,既可以像上述⼀样让基模型在所有训练集上训练⼀遍,然后对测试集进⾏⼀次预测,也可以利⽤基模型在 k-fold 产⽣的模型对测试集进⾏预测然后取平均。
下⾯这篇超级棒的博客给出了⼀个5-fold Stacking实现的代码(其中模型和Fold都可以进⾏个性化修
改) 如何在 Kaggle ⾸战中进⼊前 10%
Blending(⾮交叉堆叠)
Blending的出现是为了解决Stacking在交叉验证阶段出现的数据泄露(stage2的input会包含output的信息,具体参考为什么做stacking enmble的时候需要固定k-fold?),容易产⽣过拟合,Blending直接使⽤不相交的数据集⽤于不同层的训练,通俗的理解就是不做交叉验证,⽽是将训练集分成3:7两个部分,70%作为训练集,对30%验证集和测试集进⾏预测,第⼆层是对30%验证集的预测结果进⾏训练,不存在数据泄露的问题。但是存在30%验证集数量较少,容易过拟合的问题,所以在实际融合中,使⽤Stacking 还是Blending是有很多Trick的。
下⾯来⼀个Blending的例⼦
早安正能量语录
1. ⾸先需要对原始训练数据集进⾏分割。⼀般训练集⽐例为60%-80%,这个⽐例不易太⼤,太⼤的话,容易第⼆层模型训练数据较
少,产⽣过拟合。
2. 假设:原始训练数据集(D)分为训练数据集(DT)和验证数据集(DA),测试数据集为(DP)
3. 构建模型阶段:构建M个模型M1,M2,…MM,以模型Mi为例,对训练集DT进⾏学习,得到模型Mi。学习完毕后,对验证数据DA进⾏
预测为DA_Mi,再对测试数据进⾏预测得到DP_Mi; 对验证集得到的DA_M1,DA_M2,…DA_MM, 作为新的特征。将这些新的特征作为第⼆层模型的输⼊,训练得到模型Model0,将测试集得到的DP_M1,DP_M2,…DP_MM,将这些特征作为预测数据的输⼊,⽤Model0预测,得到最终的结果。
4. 下⾯三个和blending相关的代码实现
Blending介绍以及blending在回归算法和分类算法的实现
blend.py 五种模型融合实例
blend_proba.py
Stacking 的⼀些技巧
⾮线性的stacker例如:GBM,KNN,NN,RF 会对特征和Ba Model有较好的补充
Feature-Weighted LinearStacking (FWLS),相⽐于⼀般的stacking只是使⽤linear regression将不⽤的模型通过线性权重融合到⼀起。这⾥的权重为特征的线性组合,整个模型被拓展为feature*model组合的形式。参考:Feature-Weighted Linear Stacking 分类问题和回归问题利⽤stacking互相转化。
分类问题可以在第⼀层利⽤分位数回归得到预测结果,作为第⼆层的输⼊
回归问题则需要先对y进⾏分类(⽐如利⽤分位点将连续的y分为⼏类),第⼀层⽤分类模型对类别进⾏预测,作为第⼆层的输⼊。
还有⽐赛中⼤神提到的⽆监督stacking,online stacking ,如果⼤家感兴趣的话我们再进⾏深⼊讲述。
Reference(本⽂参考)
Kaggle-Enmble-Guide
模型融合-Kaggle Enmbling Guide
[机器学习]集成学习–bagging、boosting、stacking
短句吧Enmble Learning to Improve Machine Learning Results
集成学习⽅法1
Reference2(Kaggle-Enmble-Guide原⽂涉及到的所有链接)
KAGGLE ENSEMBLING GUIDE这篇博⽂不知道作者写⽤了多久,个⼈觉得把⾥⾯的链接和论⽂都看完,少说也得半个⽉,强度绝对不低于读⼀本⼤块头,同时还有很多实际⽐赛的代码分享,对个⼈提升⼤有裨益。
下⾯是对原⽂出现的链接的汇总和⼀个简单的总结,感兴趣的留⾔,我们下⼀期会继续深⼊这个主题。
Vitaly Kuznetsov :Rearch Scientist at Google AI
Pearson correlation :⽪尔逊相关性
UC Irvine Machine Learning Repository :公开数据库
Covertype Data Set :森林覆盖类型数据
Forest Cover Type Prediction:kaggle ⽐赛
Forest cover type prediction 森林覆盖⽐赛多种算法⽐较以及blending性能⽐较论⽂
CIFAR-10 Competition Winners: Interviews with Dr. Ben Graham, Phil Culliton, & Zygmunt Zając:CIFAR-10 ⽐赛获胜者采访,可以学到很多trick
A Brief Overview of Deep Learning:深度学习⼤纲
Dropout: A Simple Way to Prevent Neural Networks from
Overfitting:Dropout的介绍
Why calibration works概率校准的优良表现,分类算法输出时可以考虑
Feature-Weighted Linear Stacking :特征为权重的stacking
Combining Predictions for Accurate Recommender Systems:推荐系统中的enmble应⽤
江国河Bagging Predictors:⼀篇bagging理论的论⽂
Stacked Generalization ;stacking如何降低泛化误差
kaggle_pbr/blend.py:blending代码
Yangela:kaggler
Tuning doesn’t matter. Why are you doing it?:搜参在enmble中讨论,结合stacked generalization 看更佳
41599 via TSNE, meta bagging :TSNE, meta bagging
t-SNE:TSNE
007. Machine learning best practices we’ve learned from hundreds of competitions - Ben Hamner :kaggler的参赛经验分享视频,⽆字幕==
Profiling Top Kagglers: KazAnova, Currently #2 in the World:Top Kagglers的采访
>蜈蚣草水草

本文发布于:2023-06-18 23:24:05,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/986709.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模型   训练   预测   融合   结果   数据   问题
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图