持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
我们做机器学习的时候,很可能出现预测结果不太好看的情况。而有句老话说得好,三个臭皮匠顶一个诸葛亮。所谓的集成学习也是这个思路。具体来说就是训练几个不一样的模型,然后根据这几个模型的结果来得到结果。比如最简单的想法,我有好几个模型,那我就选最多的相同结果。这也被叫做所谓的投票。
集成学习有三种常见的方法,分别是:Bagging、Boosting、Stacking。
Bagging
Bagging 的意思应该是 Bootstrap aggregating,但是也有人把它叫做装袋法。
基本思路是在数据集中取一部分子集作为训练集,避免全部使用相同的数据集。
其集大成者就是 Random Forest 随机森林。它不仅仅采用了上述策略,还在特征上各自选取不相交的子集作为特征。
通过更甚于基本思路的方式划分出不同的数据集,避免构造出相似的模型。
有些书上可以看到的所谓行列上分别做随机过程,特征无放回抽取,子集有放回抽取。就是指上面的思路。
Bagging被称为并行的集成学习,因为一旦划分出或者说选取出子集,他就可以开始训练了。
Boosting
与Bagging 相对的是 Boosting。又叫做提升法,与上面不同,Boost期望通过新的模型弥补上一个模型的不足。将训练重点放在上一个模型的不足上。
因此它必定是按顺序训练的。所谓的Boost的串行也就是指这个原因。
Stacking
Stacking的想法是把多个模型的输出作为特征,从输出上建立模型。Stacking 并不限制模型的类型,而前面的两者算法期望训练的模型是相同的。
这里有一个小小的问题,Stacking 一般认为每一层的模型都是一层层训练好的。
如果先训练好了第一层,在这个基础上训练第二层,如果使用相同的数据集,容易发生过拟合。
解决的办法是通过把训练集划分,训练每一层时使用不同的部分。
说起来其实还挺麻烦的,不过现在有所谓的automl,可以自动帮我们实现这些功能。