开心实习之第二十九天
集成学习(ensemble learning)的核心思想源于 “群体智慧”—— 对于复杂任务,综合多个专家的判断往往比单一专家的判断更准确。在机器学习领域,它通过构建并结合多个个体学习器来完成学习任务,最终输出由 “结合策略” 决定,旨在提升模型的泛化能力与稳定性,避免单一学习器的偏见或误差。
(一)核心构成
- 个体学习器:构成集成模型的基础模型(如决策树、KNN、SVM 等),是集成学习的 “专家”。
- 结合策略:将多个个体学习器的输出整合为最终结果的规则,常见策略包括三类:
- 简单平均法:对回归任务,直接计算所有个体学习器预测结果的平均值作为最终输出,适用于各学习器性能相近的场景。
- 加权平均法:对回归任务,为不同个体学习器分配不同权重(权重非负且总和为 1),公式为 H(x)=∑i=1Tωihi(x)(其中ωi为第i个学习器的权重,hi(x)为其预测结果),性能更优的学习器权重更高,提升整体精度。
- 投票法:对分类任务,遵循 “少数服从多数” 原则,统计所有个体学习器的预测类别,得票最多的类别即为最终输出。但投票法效果受个体学习器一致性影响:若学习器差异大且多数正确,集成性能会提升;若学习器高度一致且均错误,集成则可能起负作用。
二、集成算法的分类
根据个体学习器的生成方式,集成学习可分为三大类,核心差异在于个体学习器间的依赖关系与生成顺序:
分类 | 核心特点 | 代表算法 |
---|---|---|
Bagging | 个体学习器无强依赖,可并行生成 | 随机森林(Random Forest) |
Boosting | 个体学习器有强依赖,需串行生成 | AdaBoost |
Stacking | 分阶段聚合多类学习器,先独立训练再二次学习 | 基于 KNN、SVM、RF 等的堆叠模型 |
三、Bagging 与随机森林
(一)Bagging 基础
- 定义与原理:全称为 “Bootstrap Aggregation”,核心是通过 “有放回采样(Bootstrap)” 生成多个不同的训练集,在每个训练集上独立训练一个个体学习器,最终通过结合策略输出结果。
- 关键特性:
- 并行训练:个体学习器无依赖,可同时训练,效率高。
- 降低方差:通过多个学习器的 “平均”,减少单一学习器的过拟合风险,尤其适用于方差大的模型(如决策树)。
- 预测规则:分类任务用简单投票法,回归任务用简单平均法,公式为 f(x)=M1∑m=1Mfm(x)(其中M为学习器数量,fm(x)为第m个学习器的预测结果)。
(二)随机森林:Bagging 的典型实现
随机森林以 “决策树” 为基础个体学习器,通过 “双重随机性” 构建 “森林”,是 Bagging 最成功的应用。
核心特性:双重随机性
- 数据采样随机:采用有放回采样(Bootstrap),每个决策树的训练集都是从原始数据中随机抽取的子集,确保各树训练数据存在差异。
- 特征选择随机:每个决策树在分裂节点时,仅从所有特征中随机选择部分特征(而非全部)进行评估,进一步降低树之间的相关性。
显著优势
- 高维数据适配:无需手动进行特征选择,可直接处理特征数量多的数据集。
- 特征重要性评估:训练完成后,能量化输出各特征对预测结果的贡献度,辅助特征分析。
- 并行高效:各决策树独立训练,可充分利用并行计算资源,训练速度快。
- 可解释性强:可通过可视化单棵决策树,直观理解模型的决策逻辑。
关键参数(基于 Scikit-learn)
| 参数名 | 含义 | 默认值 |
|----|----|----|
|n_estimators | 森林中决策树的数量 | 100|
|oob_score | 是否使用 “袋外样本(未被采样到的样本)” 评估模型性能 | False(设为 True 时,等同于简易交叉验证)|
|bootstrap | 是否采用有放回采样生成训练集 | True|
|max_samples | 每棵树训练时使用的最大样本量 | None(默认使用全部采样样本)|实践应用:葡萄酒分类任务
以 Scikit-learn 的load_wine
数据集为例,任务是根据葡萄酒的 13 个特征(如酒精含量、苹果酸、镁含量等)将其分为 3 类,核心步骤如下:- 加载数据集:
from sklearn.datasets import load_wine; wine = load_wine()
,其中wine.data
为特征矩阵,wine.target
为类别标签(0、1、2 三类)。 - 模型初始化:使用
RandomForestClassifier()
构建分类器,可根据需求调整n_estimators
、oob_score
等参数。 - 训练与预测:划分训练集与测试集后,通过
fit()
训练模型,predict()
输出预测结果,最终通过准确率等指标评估性能。
- 加载数据集:
四、Boosting 与 AdaBoost
(一)Boosting 基础
- 定义与核心逻辑:Boosting 是 “串行式” 集成方法,从 “弱学习器”(性能略优于随机猜测的学习器)开始,通过动态调整样本权重与学习器权重,逐步强化模型能力,最终将多个弱学习器整合为 “强学习器”。
- 关键特性:
- 串行依赖:后一个学习器的训练依赖前一个学习器的结果,无法并行。
- 聚焦误差:通过权重调整,让后续学习器更关注前一个学习器分类错误的样本,逐步修正误差。
(二)AdaBoost:Boosting 的经典算法
AdaBoost(Adaptive Boosting)是 Boosting 的代表性算法,核心是 “自适应调整权重”,具体流程分为 4 步:
初始化样本权重:假设训练集有N个样本,初始时每个样本的权重相同,即w1i=N1(i=1,2,...,N),确保初始训练集分布均匀。
训练弱学习器并调整样本权重:
- 基于当前样本权重分布,训练一个弱学习器(如决策 stump,即单节点决策树)。
- 计算该弱学习器的分类误差率ϵ(错误分类样本的权重总和)。
- 调整样本权重:若样本分类正确,权重降低;若分类错误,权重提高,使后续学习器优先学习这些 “难分样本”。
迭代训练多个弱学习器:重复步骤 2,生成T个弱学习器,每个学习器都基于前一轮调整后的样本权重训练,逐步降低整体误差。
整合弱学习器为强学习器:
- 为每个弱学习器分配权重αt:误差率越小的学习器,权重越高(公式为αt=21ln(ϵt1−ϵt)),体现 “优质学习器更重要” 的逻辑。
- 最终预测时,对所有弱学习器的预测结果进行加权投票,得票最高的类别即为最终输出。
五、Stacking(堆叠集成)
(一)核心定义
Stacking 是一种 “分阶段” 的集成方法,核心思路是 “先利用多种基础模型生成预测结果,再将这些结果作为新特征,训练一个‘元学习器’(Meta-Learner)来输出最终预测”,相当于 “用模型学习如何结合其他模型的结果”。
(二)关键流程
第一阶段:基础模型训练:
- 选择多种不同类型的基础模型(如 KNN、SVM、随机森林、AdaBoost 等)。
- 将原始训练集划分为多个子集(或使用交叉验证),分别训练每个基础模型,得到每个样本在各基础模型上的预测结果(称为 “元特征”)。
第二阶段:元学习器训练:
- 以第一阶段生成的 “元特征” 为新的训练数据,以原始任务的标签为目标,训练一个元学习器(通常选择简单模型,如逻辑回归、线性回归,避免过拟合)。
预测阶段:
- 对新测试样本,先通过所有基础模型得到元特征,再输入元学习器,得到最终预测结果。
(三)特点
- 灵活性高:可整合任意类型的基础模型,充分利用不同模型的优势。
- 复杂度较高:需训练多组基础模型与元学习器,计算成本高于 Bagging 和 Boosting,但通常能获得更优的泛化性能。
六、三类集成算法对比与总结
维度 | Bagging(随机森林) | Boosting(AdaBoost) | Stacking |
---|---|---|---|
学习器依赖 | 无,并行生成 | 有,串行生成 | 无(基础模型并行,元学习器串行) |
核心逻辑 | 降低方差(减少过拟合) | 降低偏差(提升精度) | 优化结合策略(学习如何整合) |
优势 | 速度快、鲁棒性强、可解释性较好 | 精度高、能处理弱学习器 | 灵活性高、泛化性能优 |
劣势 | 对噪声样本敏感 | 易过拟合、对异常值敏感 | 复杂度高、计算成本高 |
适用场景 | 高维数据、大样本、需快速训练 | 中小样本、需高精度预测 | 复杂任务、追求最优性能 |
综上,集成算法通过 “组合多个学习器” 的思路,解决了单一模型的局限性:Bagging 通过并行化降低方差,Boosting 通过串行化降低偏差,Stacking 通过 “二次学习” 优化结合策略。在实际应用中,需根据数据规模、特征维度、任务需求(精度 / 速度)选择合适的集成方法,其中随机森林因 “高效、稳定、易用” 成为最常用的 baseline 模型,而 AdaBoost 和 Stacking 则在需更高精度的场景中发挥作用