集成学习是什么?把多个模型组合起来,比单个模型更准
集成学习(Ensemble Learning)是一种通过训练多个模型,再把它们的预测结果组合起来完成任务的机器学习方法。它的基本思想就是“三个臭皮匠,顶个诸葛亮”:多个模型集思广益,往往比任何一个单独的模型都更准确、更稳定。参与组合的每个模型叫作基学习器或个体学习器。
为什么集成能提高效果
假设有多个分类器,每一个都比随机猜测要好,而且它们犯的错误各不相同。当进行投票时,个别分类器的错误会被其他分类器纠正,只有当大多数分类器同时犯错时,集成的结果才会出错,而这种情况发生的概率比单个分类器犯错的概率要小得多。所以,集成学习的关键在于基学习器要“好而不同”:每一个都要有一定的准确性,彼此之间又要有足够的差异。如果所有的模型都一模一样,集成就没有任何意义。
三类主要的方法
Bagging(自助聚合):由 Leo Breiman 在 1996 年提出。它通过有放回的随机抽样,从原始训练集中生成多个不同的训练子集,在每个子集上独立地训练一个模型,最后通过投票或平均来组合它们的结果。由于各个模型可以同时训练,它天然适合并行计算。Bagging 主要能降低模型的方差,对决策树这类不稳定的模型效果尤其明显。随机森林是 Bagging 最著名的扩展,它在训练每棵决策树时,还会随机地选择一部分特征,进一步增加了树与树之间的差异。
Boosting(提升法):按顺序地训练一系列模型,每一个新模型都重点关注前面的模型犯错的样本,努力纠正前面的错误,最后把所有模型加权组合起来。Boosting 主要能降低模型的偏差,可以把多个只比随机猜测稍好的弱学习器组合成一个强学习器。代表算法有 AdaBoost、梯度提升树,以及 XGBoost、LightGBM、CatBoost 等高效的实现。它们在表格数据上的表现非常出色,长期在数据科学竞赛中占据主导地位。
Stacking(堆叠):先训练多个不同类型的基学习器,比如一个决策树、一个支持向量机、一个神经网络,然后把它们的预测结果作为新的特征,再训练一个“元学习器”来学习如何最好地组合这些预测。为了避免过拟合,通常使用交叉验证的方式生成元学习器的训练数据。
结合策略
对于分类问题,常用的结合方式有绝对多数投票、相对多数投票和加权投票,以及对概率进行平均的软投票;对于回归问题,常用简单平均或加权平均。
优缺点和应用
集成学习的优点是准确率高、稳定性好、不容易过拟合。它的缺点是需要训练和存储多个模型,计算和部署的成本更高;预测速度较慢;而且整体的可解释性不如单个简单模型。在各类机器学习竞赛中,排名靠前的方案几乎都使用了集成学习,比如在 Netflix 电影推荐大赛中,获胜的方案就组合了上百个不同的模型。在深度学习中,把多个独立训练的神经网络的预测取平均,也是提升效果的常用技巧;Dropout 也可以被理解为在隐式地训练和集成大量共享参数的子网络。