最近想用下stacking,搜了很多,现在把所学到的记录下
比较好的一个资料是:
英文版:https://mlwave.com/kaggle-ensembling-guide/
翻译版:https://blog.csdn.net/a358463121/article/details/53054686
之前乱搜一通,发现stack和blend傻傻分不清楚,后来才知道很多人stack和blend是混着叫的,所以不必纠结这个名字。只要知道stack是用cv交叉验证来得出元模型的特征(一个基模型产出一个元特征作为二级模型的输入),而blend是用留出法,比如百分之80作训练,另外百分之20的预测值作为元模型的标签(而stack是用全部的训练集预测来产出一个基模型对应的标签,二级模型只用那百分之20的预测值,这样可以把堆叠用的数据集和二级模型泛化用的数据集分开,而stacking就没有分开,所以stakcing有数据泄露,存在过拟合的风险)。
看下面的链接
https://github.com/emanuele/kaggle_pbr/blob/master/blend.py
说是blend,貌似是stakcing,whatever,能用就行,自己心里明白。好生mark下,有大用处。
下面介绍一个比较不错的库heamy。
这里有个官方的demo,
https://github.com/rushter/heamy/tree/master/examples
csdn上有个较为清晰的例子,不过觉得有些歧义:
https://blog.csdn.net/data_scientist/article/details/79036382
下面是几个方法的介绍
estimator.py中的方法(注意它们返回的都是数据集)
pipeline.py中的方法(注意它们返回的都是数据集)
上面的两个py的方法得出二级模型的输入,这些基模型的预测值的组合方法:一般的,blending和stacking都是用LR,其他的用加权平均(下面会介绍怎么找最佳的加权系数)、取平均、取最大值。可以参考https://blog.csdn.net/Gin077/article/details/84344398
---------------------------------加权平均---------------------------------
下面是三层stacking模型,第三层用find_weight方法得出最优各个基模型的权重(这里是对各基模型的预测结果作加权)。看源码可以指定寻找权重的方法
下面是获取最优权重用的方法
获取到最后权重后就可得出预测结果了
result = stack_pipeline.weight(weights).validate(mean_absolute_error,10)
原文https://blog.csdn.net/Gin077/article/details/84339790