前言
在机器学习的世界里,集成学习就像是一群 "朋友" 共同出谋划策,通过结合多个模型的智慧来解决复杂问题。这种思路和我们日常生活中遇到难题时,会咨询多位朋友的意见并综合判断的逻辑不谋而合。
今天,我们就来深入剖析集成学习的核心原理,看看这些 "朋友" 是如何协作,最终提升模型性能的。
1、集成算法概述

集成算法核心:
少数服从多数,人多力量大,三个臭皮匠顶个诸葛亮。
假设你有 100 个朋友给你出主意投资股票,你怎么做最终的决定?
- 选择最牛 x 的一个朋友的意见当作自己的意见(找到最好的单颗决策树)
- 所有朋友的意见投票,少数服从多数(随机森林)
- 还是牛一点的朋友多给几票,弱鸡一点的少给几票(Adaboost)
1.1、聚合模型:
所有朋友的意见投票, 少数服从多数(随机森林对应原理公式)
- G(x) = \\frac{1}{n}\\sum\\limits_{i =1}\^n1 \\times g_i(x)
其中,gig_igi(x)代表第 i 个基础模型的预测结果,n 是基础模型的数量,G(x)G(x)G(x)
则是最终集成模型的预测结果。
这个公式的含义是,将所有基础模型的预测结果取平均值(对于回归问题)或多数投票(对于分类问题),得到最终的决策。
这种方式的优势在于简单直接,能够有效降低单个模型的随机误差,通过"民主决策"的方式提高模型的稳定性和泛化能力。
1.2、差异化权重
在现实生活中,不同朋友的专业领域和判断力可能存在差异。比如,对于金融投资的问题,一位资深的金融从业者的意见可能比一位刚入门的新手更有参考价值。
Adaboost 算法就借鉴了这种思路,给"牛一点的朋友多几票,弱鸡一点的少几票",即根据基础模型的表现赋予不同的权重。其对应的原理公式可以表示为:
G(x)=sign(∑i=1nαigi(x))G(x) = \text{sign}\left( \sum_{i=1}^n \alpha_i g_i(x) \right)G(x)=sign(i=1∑nαigi(x))
其中,αiα_iαi是第 i 个基础模型的权重,它的值取决于该模型在训练过程中的表现------表现越好的模型,权重越大;反之则越小。
sign函数则用于将加权求和的结果转换为最终的分类标签(+1或-1)。这种差异化权重的方式,能够让性能更优的基础模型在最终决策中发挥更大的作用,从而进一步提升集成模型的精度。
2、构造不同模型(朋友)
要让集成学习发挥作用,关键在于拥有一群"各有所长"的朋友(基础模型)。如果所有朋友的意见都高度一致,那么咨询再多的人也只是重复劳动,无法提升决策质量。
因此,构造具有多样性的基础模型是集成学习的核心任务之一。具体来说,我们可以通过以下几种方式来生成不同的模型:
-
同样的数据,行列都相同,不同的超参数。
-
同样的超参数,行相同,列不同。
-
同样的超参数,行不同,列相同。
-
同样的超参数,同样的数据,但是数据权重不同。
3、集成算法不同方式
有了多样化的基础模型后,如何组织它们进行协作也是一个关键问题。
根据模型训练的顺序和方式,集成算法可以分为两种主要类型:Bagging(套袋法)和Boosting(提升法)。
方式一Bagging(套袋法)
Bagging的核心思想是"独立自主",各个基础模型可以并行训练,彼此之间互不干扰。具体来说,它的工作流程如下:
- 对训练集进行抽样:采用有放回的抽样方式(即 Bootstrap 抽样),从原始数据集中生成多个不同的样本子集。每个样本子集的大小与原始数据集相同,但由于是有放回抽样,不同子集之间会存在一定的重叠和差异。
- 并行,独立训练:使用每个样本子集分别训练一个基础模型。由于各个子集之间相对独立,这些模型的训练过程可以并行进行,大大提高了算法的效率。
- 最终的模型为每次生成的模型进行投票:当需要进行预测时,将所有基础模型的预测结果进行综合(如多数投票或取平均值),得到最终的预测结果。
随机森林(Random Forest)便是Bagging算法的典型代表。
它在Bagging的基础上,进一步引入了特征的随机选择------在构建每个决策树时,不仅样本是随机抽样的,每个节点分裂时所考虑的特征也是从所有特征中随机选择的一个子集。
这种双重随机性使得各个决策树之间的多样性更强,从而进一步提升了集成模型的性能。
Bagging算法的优势在于稳定性高,能够有效降低模型的方差。由于各个基础模型独立训练,彼此之间的误差会相互抵消,从而使得最终的集成模型更加稳健,泛化能力更强。
方式二Boosting(提升法)
与Bagging的并行独立不同,Boosting采用的是"串行协作"的模式,各个基础模型的训练过程相互依赖,后面的模型需要根据前面模型的表现进行调整。其工作流程如下:
- 利用训练集训练出第一个模型:首先,使用原始数据集训练一个基础模型。
- 根据本次模型的预测结果,调整训练集:分析第一个模型的预测误差,将被误分类的样本赋予更高的权重,而将正确分类的样本赋予较低的权重。这样,下一个模型就会更关注那些被之前的模型 "忽视" 的样本。
- 利用调整后的训练集训练下一个模型:基于调整后的样本权重,训练第二个基础模型。这个模型会试图纠正第一个模型的错误。
- 重复上述过程,直到训练出足够数量的模型:每个新的模型都会在前一个模型的基础上进行优化,不断降低整体的预测误差。
- 串行,需要第一个模型:由于每个模型的训练都依赖于前一个模型的结果,因此Boosting算法无法并行训练,只能串行进行。
Adaboost、GBDT(Gradient Boosting Decision Tree)和Xgboost都是Boosting算法的典型代表。
其中,Adaboost通过调整样本权重来聚焦难分样本;GBDT则通过拟合前一个模型的残差(即预测值与真实值之间的差异)来不断优化模型;Xgboost则在GBDT的基础上进行了一系列工程上的优化,如并行计算、正则化等,大大提高了算法的效率和性能。
Boosting算法的优势在于能够有效降低模型的偏差,通过不断迭代优化,逐步提升模型的预测精度。但需要注意的是,由于模型之间存在依赖关系,Boosting算法更容易过拟合,因此在实际应用中需要谨慎调整参数。
4、总结
集成学习通过将多个基础模型的智慧结合起来,能够显著提升模型的性能,这背后的核心思想是"多样性"和"协作"。无论是Bagging 的并行独立,还是Boosting的串行优化,都是通过不同的方式利用模型的多样性来实现性能的提升。
在实际应用中,我们需要根据具体的问题和数据特点,选择合适的集成方式和基础模型,才能让集成学习发挥最大的威力。
希望通过今天的介绍,你对集成学习有了更深入的理解。