实用机器学习笔记二十三:集成学习之 Stacking
前言:
本文是个人在 B 站自学李沐老师的实用机器学习课程【斯坦福 2021 秋季中文同步】的学习笔记,感觉沐神讲解的非常棒 yyds。
Stacking:
Stacking 即是把多个模型组合起来减小方差。如下图:
每一个模型可以是不同的模型类型
最后每一个模型的输出通过全连接层进行线性组合作为最终结果
Stacking 目前被广泛应用于竞赛中,提高涨点,减小方差
与 bagging 的不同之处:
bagging 是用不同的数据(bootstrap 采样)训练相同类型的模型
stacking 是使用相同的数据训练不同的类型的模型
Multi-layer Stacking(多层 stacking):
多层的 Stacking 是把多个模型堆叠成多层来减小方差的。如下图所示:
每一层都可以使用不同类型的模型,模型可以完全不一样
L2 层的输入可以是只有 L1 层的输出,也可以把输入和 L1 层的输出组合起来作为 L2 层的输入。根据情况而定。
多层的 Stacking 容易出现过拟合。因为:L1 层的输出已经被 L1 层的模型进行了一次特征提取,然后输出又输入到 L2 层,可能 L2 层会关注一些不重要的信息(比如:噪音),这样就会导致过拟合。
减轻多层 Stacking 过拟合:
对不同层的模型进行训练时,使用不同的训练集,减轻过拟合。
把训练数据分成 A 和 B 两份:使用 A 训练 L1 层的模型,然后用训练好的 L1 层的模型去预测 B,把预测结果再加上 B 的本身,作为 L2 层的训练集。缺点:每一层只用了一半的数据集。
重复 K 折 bagging 减轻过拟合:
使用 K 折交叉验证,把数据集分成 K 份,每次训练模型时,K-1 份用来训练,第 K 份用来验证。也就是说每一层的每一个模型都训练了 K 个版本,每一层有 n 个模型,那么就训练了 k*n 个模型。重点:在 K 折交叉验证部分中,每一层的每一个模型都会有 K 个版本,每一个版本都会做一次验证,并输出预测值,那么每一个模型总共会输出 原始数据集容量 个预测值。然后作为下一层的训练集。
使用 K 折交叉验证,可以使下一层模型训练时使用完整的数据集进行训练。
虽然使用了 K 折交叉验证,但是仍然会有过拟合。
如何解决过拟合?一个比较昂贵的办法:
把上面的步骤重复 m 次,然后验证时的输出就会有三份,做平均之后,再作为下一层的训练集。
版权声明: 本文为 InfoQ 作者【打工人!】的原创文章。
原文链接:【http://xie.infoq.cn/article/79caa3e47cea3f44b2b8e8ab7】。文章转载请联系作者。
评论