- 简述
- 主要的三类集成学习方法为Bagging、Boosting和Stacking。目前,大型的数据挖掘比赛(如Kaggle),排名靠前的基本上都是集成机器学习模型或者深度神经网络。
- Stacking的经典图
- 具体原理讲解参考这位的博客
- 简单来说,集成学习其实都是将基本模型组合形成更优秀的模型,Stacking也不例外。
- stacking是得到各个算法训练全样本的结果再用一个元算法融合这些结果,它可以选择使用网格搜索和交叉验证。
- Mlxtend框架
- 众所周知,如今传统机器学习领域的库基本上被sciket-learn(sklearn)占领,若你没有使用过sklearn库,那就不能称为使用过机器学习算法进行数据挖掘。但是,自定义集成学习库依然没有什么太过主流的,sklearn也只是实现了一些比较主流的集成学习方法如随机森林(RF)、AdaBoost等。当然,这也是因为bagging和boosting可以直接调用而stacking需要自己设计。
- Mlxtend完美兼容sklearn,可以使用sklearn的模型进行组合生成新模型。它同时集成了stacking分类和回归模型以及它们的交叉验证的版本。
- 由于已经有很多stacking的分类介绍,本例以回归为例讲讲stacking的回归实现。
- Mlxtend安装
- 使用pip安装即可
pip install mlxtend
- 官方文档
- 使用pip安装即可
- stacking回归
- stacking回归是一种通过元回归器(meta-regressor)组合多个回归模型(lr,svr等)的集成学习技术。而且,每个基回归模型(就是上述的多个回归模型)在训练时都要使用完整训练集,集成学习过程中每个基回归模型的输出作为元特征成为元回归器的输入,元回归器通过拟合这些元特征来组合多个模型。
- 案例
- 使用StackingRegressor
- 使用StackingCVRegressor
- 简介
- mlxtend.regressor中的StackingCVRegressor是一种集成学习元回归器。
- StackingCVRegressor扩展了标准Stacking算法(在mlxtend中的实现为StackingRegressor)。
- 在标准Stacking算法中,拟合一级回归器的时候,我们如果使用与第二级回归器的输入的同一个训练集,这很可能会导致过拟合。 然而,StackingCVRegressor使用了"非折叠预测"的概念:数据集被分成k个折叠,并且在k个连续的循环中,使用k-1折来拟合第一级回归器,其实也就是k折交叉验证的StackingRegressor。
- 在K轮中每一轮中,一级回归器被应用于在每次迭代中还未用于模型拟合的剩余1个子集。然后将得到的预测叠加起来并作为输入数据提供给二级回归器。
- 在StackingCVRegressor的训练完成之后,一级回归器拟合整个数据集以获得最佳预测。
- 波士顿房价预测
- 网格搜索
- 简介
- 补充说明
- 主要介绍了框架Mlxtend的使用 ,具体的API函数见上面提到的官方文档。
- 毫不夸张的说,Stacking可以说是大型数据挖掘比赛的利器。
- 具体代码见我的Github,欢迎Star或者Fork(环境为Jupyter)