第二章: 机器学习与神经网络概述
第三部分:类算法理论与实践
第四节:集成方法
内容:Bagging与Boosting、随机森林与梯度提升树(GBDT)。
集成方法通过组合多个弱分类器来构建一个更强的学习模型,从而提高预测性能、降低过拟合风险,是现代机器学习中非常重要的一类算法。
一、集成方法的基本思想
-
弱分类器(Weak Learner):泛化能力略优于随机猜测的模型(如浅层决策树)
-
集成策略:
-
Bagging(Bootstrap Aggregating)
-
Boosting
-
Stacking(叠加)(进阶内容)
-
二、Bagging:自助采样法
核心思想:并行训练多个模型,进行投票或平均
-
对训练数据进行有放回采样,生成多个子训练集
-
每个子集上训练一个模型(通常是决策树)
-
对于分类问题:投票表决;回归问题:取平均
典型算法:随机森林(Random Forest)
-
在 Bagging 基础上,引入特征随机选择
-
每棵树划分节点时,从特征子集中选最优特征
-
有效降低模型方差,抗过拟合能力强
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=100, max_depth=5)
rf.fit(X_train, y_train)
三、Boosting:顺序学习,重点关注错误
核心思想:串行训练模型,每一轮关注前一轮错误的样本
-
每一轮训练一个弱分类器
-
每轮根据错误样本调整样本权重或残差
-
最终组合所有弱分类器(加权)
典型算法:梯度提升树(GBDT)
-
每一轮拟合上轮残差
-
通过梯度下降方向最小化损失函数
-
对小数据、高准确率有很强表现
from sklearn.ensemble import GradientBoostingClassifier
gbdt = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)
gbdt.fit(X_train, y_train)
四、Bagging vs Boosting 对比
特性 | Bagging | Boosting |
---|---|---|
模型训练方式 | 并行训练 | 串行训练 |
误差目标 | 减小方差(Variance) | 减小偏差(Bias) |
抗噪声能力 | 强(如随机森林) | 弱(容易过拟合) |
常见算法 | 随机森林(Random Forest) | GBDT、AdaBoost、XGBoost、LightGBM 等 |
五、Python中常用集成方法(sklearn.ensemble
)
模型 | 简介 |
---|---|
RandomForest | 多棵决策树+随机特征选择 |
AdaBoost | 基于错误样本调整权重 |
GradientBoosting | 基于梯度残差建模 |
VotingClassifier | 多模型组合投票 |
StackingClassifier | 模型融合 + 二层训练器 |
六、常见应用场景
-
高维数据分类问题(如文本、图像)
-
需要模型泛化能力强的任务
-
小样本、精度要求高的建模问题
七、总结
特点 | Bagging | Boosting |
---|---|---|
代表算法 | 随机森林 | GBDT, AdaBoost |
偏差/方差优化 | 减少方差 | 减少偏差 |
并行/串行 | 并行 | 串行 |
模型解释性 | 一般 | 较弱(可使用特征重要性工具) |
以下是 Bagging、Boosting、Stacking 和单模型 的对比表,帮助你快速理解它们之间的异同:
集成方法模型对比表
对比维度 | Bagging(如随机森林) | Boosting(如GBDT、XGBoost) | Stacking(堆叠法) | 单模型(如决策树) |
---|---|---|---|---|
训练方式 | 并行训练多个弱模型 | 串行训练多个弱模型 | 多个基础模型 + 元学习器 | 单个模型 |
主要目标 | 降低方差(Variance) | 降低偏差(Bias) | 提升综合预测能力 | 学习训练集规律 |
样本处理 | 自助采样(Bootstrap) | 错误样本加权或残差建模 | 所有模型共享同一训练集 | 一次性使用全部训练数据 |
对噪声鲁棒性 | 较强(不易过拟合) | 一般(可能过拟合) | 取决于基础模型 | 易受噪声影响 |
特征处理方式 | 每棵树选取特征子集 | 每轮用全部特征(可调) | 不限,可混合特征选择机制 | 通常使用全部特征 |
典型算法 | 随机森林(Random Forest) | GBDT、AdaBoost、XGBoost、LightGBM | 堆叠模型(StackingClassifier) | 决策树、SVM、KNN 等 |
是否易并行化 | ✅ 易并行 | ❌ 串行,难并行 | ⚠️ 第二层训练器难并行 | ✅ 容易 |
是否支持概率预测 | ✅ 支持 | ✅ 支持 | ✅ 支持(取决于元模型) | 部分支持 |
模型复杂性 | 中等 | 高 | 较高 | 较低 |
可解释性 | 中 | 一般(可视化特征重要性) | 较差 | 高(如单棵树) |
性能表现 | 稳定,抗噪声 | 高精度,小样本优 | 泛化性能强,多任务适用 | 依赖模型类型,波动大 |