小鱼的上一篇连载介绍了集成算法中的 Bagging 模型,即并行地训练多个分类器取平均,并介绍了 Bagging 模型的典型代表随机森林~
本节,我们再来学习两种集成算法:Boosting 提升模型以及 Stacking 堆叠模型。
Boosting 提升模型
Boosting 提升模型核心为:从弱学习器开始加强,通过加权来进行训练。对比 Bagging 可以发现,Boosting 提升模型为串行算法,通过串行的方式,不断在弱学习器的基础上串联模型,从而提升模型的准确率。
注:Boosting 提升模型无法并行训练模型,必须训练完一个,根据前一个模型的结果,训练接下来的模型。
举个例子:假设我们使用决策树训练一个模型,来预测银行贷款的额度。
首先,经过决策树 A 的预测,预测结果为 950 万,其真实值为 1000 万,残差为 50 万;那么接下来,我们需要训练决策树 B ,决策树 B 此时只需要解决残差的部分就好了,即决策树 B 预测的目标变为残差 50 万。
接下来,假设经过决策树 B 的预测,输出值为 30 万,与残差 50 万相比,误差为 20 万。然后,再串联决策树 C ,决策树 C 预测的结果为 19 万,与残差 1000万 - 950万 - 30万 = 20万 的误差缩小到了 1 万。
最后,将 3 个决策树的结果相加,即:950 万 + 30 万 + 19 万 = 999 万,为 Boosting 模型最终的预测结果。
Boosting 提升模型的典型代表是:AdaBoost 和 Xgboost 算法。其中 Xgboost 算法的思想和上述小鱼介绍的残差树非常像,可以不断地将模型提升,因此 Xgboost 集成算法最终的效果会非常强。小鱼在后续会单独出一篇文章介绍 Xgboost 集成算法,此处就不做过多介绍了。
下面,我们来看 Boosting 提升模型的典型代表之一:AdaBoost。AdaBoost 会根据前一次的分类效果调整数据权重。如果某一个数据在这次分错了,那么下次就会给它安排更大的权重。更大的权重意味着下一棵树会更重视这条数据,尽全力把它预测对。
那最终的结果怎么确定呢?每个模型在预测后,计算各自的准确性,准确性越高的模型我们认为越好,越可靠,那么也就希望该模型在最终的结果中出力更多。因此,在计算最终结果时,我们会为准确性更高的模型赋予更高的权重,再合体。
AdaBoost 工作流程:

AdaBoost 分类器相当于每一次切一刀,最终合在一起,实现弱分类器的提升。
Stacking 堆叠模型
Stacking 堆叠模型可以堆叠各种各样的分类器,如KNN、SVM、RF、LR、DT、Xgboost等等。训练过程分两个阶段走:
- 训练多种模型,得出各自结果;
- 使用第一阶段的预测结果,作为训练集数据,开始第二阶段的训练,并得到最终结果。
例如:第一阶段,我们堆叠了 RF、LR、DT、Xgboost 来预测分类任务,训练集共包含 5 个样本,经过第一阶段的预测后,各类模型的预测结果如下:

那么,在第二阶段,就可以以上表中的数据作为输入特征,可以使用 LR 再建立一个分类器,预测出最终结果。
注:Stacking 堆叠模型结合了各类模型的预测结果,可以在一定层度上防止过拟合。不过,模型堆叠在一起虽然使得准确率提升,但却带来了速度的牺牲。
Stacking 工作流程:



将以上模型堆叠后的结果:

网友评论