核心思想三个臭皮匠顶个诸葛亮—— 多个弱学习器的组合可以胜过单个强学习器。一、为什么需要集成学习1.1 直观理解群体智慧单个模型可能有偏见、过拟合或泛化能力不足。集成学习构建并组合多个基学习器也叫弱学习器其组合结果优于任何单一学习器。例子1000 个普通人各自独立判断多数投票的结果往往比一个专家的判断更准确前提是每个人的判断略好于随机猜测。1.2 群体误差公式数学依据假设每个分类器的错误率为 ε且 ε0.5即好于随机猜测各分类器相互独立用 N 个分类器进行多数投票集成出错的概率满足结论当 N增大时误差指数级下降但前提是ε0.5 且分类器之间相互独立多样性。⚠️关键如果所有分类器犯同样的错误投票再多也没用。多样性是集成学习的命脉。二、偏差-方差分解 —— 理解不同集成方法为何有效单个模型的预测误差可以分解为三部分术语含义谁负责偏差²Bias²模型预测的平均值与真实值的偏离程度模型太简单 → 欠拟合方差Variance模型预测随训练集变化的波动程度模型太复杂 → 过拟合噪声Noise数据本身固有的随机误差无法消除是误差下界集成方法如何针对性降低误差方法主要降低原理Bagging如随机森林方差多棵树平均波动被抵消Boosting如AdaBoost、GBDT偏差串行训练逐步逼近真实函数Stacking两者兼顾多样化基学习器 元学习器融合三、BaggingBootstrap Aggregating3.1 核心思想并行训练多个基学习器每个基学习器在不同的训练子集上训练最后通过投票分类或平均回归聚合结果。3.2 三步流程Bootstrap 采样从原始数据集N 个样本中有放回地抽取 N 个样本形成一个训练子集。重复 T 次得到 T 个不同的训练子集。并行训练在每个训练子集上独立训练一个基学习器通常是不剪枝的决策树。聚合预测分类多数投票回归取平均值3.3 为什么 Bootstrap 采样是 63.2%每个样本在单次抽样中被抽到的概率p1/NN 次有放回抽样后从未被抽中的概率所以约63.2%的独特样本会被抽到有些被重复抽到约36.8%的样本从未被抽到 → 称为OOBOut-of-Bag样本可用于免费验证。3.4 Bagging 降低方差的直观理解单棵决策树对训练数据敏感方差大。Bagging 训练多棵树每棵树的“噪声”方向不同平均后噪声相互抵消方差降低。但如果基学习器本身偏差很大欠拟合Bagging 无法解决 → 需要 Boosting。3.5 Bagging 手算示例原始数据10 个样本单节点决策树最高准确率 80%x0.10.20.30.40.50.60.70.80.91.0y11-1-1-1-1-1111进行 10 轮 Bagging每轮有放回抽样 → 训练树桩 → 投票最终所有 10 个样本都分对准确率从 80% 提升到 100%。四、随机森林Random Forest4.1 随机森林 Bagging 特征随机化普通 Bagging 的问题是各棵树高度相关因为都会优先选择最重要的特征进行分裂多样性不足。随机森林的改进在每个节点分裂时不是从所有 d 个特征中选择最优特征而是随机选择 m 个特征的子集再从这 m 个中选最优。推荐值效果特征去相关 → 树更多样 → 方差降低更多。4.2 OOB 误差免费交叉验证每棵树约有 36.8% 的样本未参与训练OOB 样本。可以用这些 OOB 样本对该树进行验证得到 OOB 误差估计。sklearn 中设置oob_scoreTrue即可计算。4.3 特征重要性随机森林提供两种常用特征重要性方法计算方式优点缺点MDI内置所有树中该特征减少的不纯度之和计算极快偏向高基数/连续特征排列重要性将特征值打乱后观察性能下降更可靠、更公正计算较慢五、Boosting提升5.1 Boosting 的核心思想串行训练每一轮新分类器专注于上一轮分错的样本。通过自适应地改变样本权重让后续模型更关注难样本。Bagging并行 → 降低方差Boosting串行 → 降低偏差六、AdaBoostAdaptive Boosting6.1 算法流程6.2 关键洞察错误样本权重↑下一轮分类器会更关注它们正确样本权重↓已经被学好的样本不再重要分类器权重 α表现越好ε 越小在最终投票中话语权越大6.3 AdaBoost 手算示例10 个样本初始数据x0~9y±1存在两段 1 区域七、GBDTGradient Boosting Decision Tree7.1 与 AdaBoost 的本质区别AdaBoostGBDT如何关注难样本提高错分样本权重w_i拟合损失函数的负梯度伪残差损失函数固定指数损失任意可导损失MSE、对数损失、Huber等弱学习器通常浅树depth1较深树depth3~8GBDT 的“梯度”体现在它不是在参数空间做梯度下降而是在函数空间做梯度下降——每一轮新树拟合的是损失函数对当前预测值的负梯度方向。7.2 GBDT 算法流程7.3 平方损失回归的伪残差正好是普通残差所以 GBDT 回归的每一轮就是在拟合上一轮的残差。7.4 GBDT 手算示例4 个样本回归x1234y2.53.73.36.5八、XGBoosteXtreme Gradient Boosting8.1 什么是 XGBoostXGBoost 是 GBDT 的工程优化版本比 sklearn 的 GBDT 快 10~100 倍是 Kaggle 竞赛结构化数据项目的首选算法之一。8.2 关键改进改进点说明正则化目标函数中加入自动防过拟合列采样类似随机森林每次分裂只考虑部分特征缺失值处理自动学习缺失值分裂方向近似分裂不必枚举所有分裂点用百分位数加速缓存优化CPU 缓存友好大数据集更快8.3 核心参数n_estimators树的数量learning_rate学习率收缩系数max_depth树的最大深度subsample每轮使用的样本比例colsample_bytree每棵树使用的特征比例reg_alpha/reg_lambdaL1 / L2 正则化九、Stacking堆叠泛化9.1 核心思想两层结构第一层基学习器多个不同类型的分类器如决策树、SVM、KNN、朴素贝叶斯等第二层元学习器以基学习器的输出为“特征”训练一个模型来学习如何最佳组合它们9.2 ⚠️ 防止过拟合的关键技巧不能直接用基学习器在训练集上的预测结果作为元特征会导致严重过拟合正确做法使用K 折交叉验证生成 out-of-fold 预测将训练集分成 K 折对每个基学习器用 K-1 折训练预测剩下 1 折得到该学习器在所有训练样本上的 out-of-fold 预测用这些预测作为元特征训练元学习器sklearn 的StackingClassifier自动处理这一过程cv参数控制折数。9.3 适用场景竞赛中追求最后几个百分点的性能提升当你有多种不同类型的模型且它们各有优势时十、三种集成方法全景对比维度Bagging随机森林BoostingGBDT/XGBStacking训练方式并行串行依赖前一轮分层两阶段主要降低误差方差偏差两者兼顾基学习器类型强学习器深树弱学习器浅树任意组合过拟合风险低独立性保护中需调 lr中需 CV 防泄露训练速度快可并行慢串行依赖慢多层训练超参敏感度低鲁棒高lr × T 组合中实用场景通用 / 默认首选高精度追求竞赛 / 集成最终十一、实践选择指南场景推荐方法理由数据量适中不知道选什么随机森林最稳健超参数少OOB 免费验证追求最高精度结构化数据XGBoost / LightGBMKaggle 首选精度高速度快需要可解释性单棵决策树 或 小规模 Bagging集成模型解释性较差时间充裕追求极限Stacking可以榨取最后一点性能数据量很小Bagging防止过拟合十二、本章核心公式速记卡十三、总结“三个臭皮匠顶个诸葛亮” —— 但前提是三个臭皮匠各有各的见解多样性而不是三个人犯同样的错误。方法一句话总结Bagging并行训练多棵树投票平均 → 降方差随机森林Bagging 特征随机化 → 多样性更强AdaBoost串行训练关注错分样本 → 降偏差GBDT拟合损失函数的负梯度 → 任意损失更通用XGBoostGBDT 工程优化版 → 快 10-100 倍Stacking两层结构元学习器组合基学习器 → 极限性能
07 集成学习(Ensemble Learning)
发布时间:2026/6/19 12:40:57
核心思想三个臭皮匠顶个诸葛亮—— 多个弱学习器的组合可以胜过单个强学习器。一、为什么需要集成学习1.1 直观理解群体智慧单个模型可能有偏见、过拟合或泛化能力不足。集成学习构建并组合多个基学习器也叫弱学习器其组合结果优于任何单一学习器。例子1000 个普通人各自独立判断多数投票的结果往往比一个专家的判断更准确前提是每个人的判断略好于随机猜测。1.2 群体误差公式数学依据假设每个分类器的错误率为 ε且 ε0.5即好于随机猜测各分类器相互独立用 N 个分类器进行多数投票集成出错的概率满足结论当 N增大时误差指数级下降但前提是ε0.5 且分类器之间相互独立多样性。⚠️关键如果所有分类器犯同样的错误投票再多也没用。多样性是集成学习的命脉。二、偏差-方差分解 —— 理解不同集成方法为何有效单个模型的预测误差可以分解为三部分术语含义谁负责偏差²Bias²模型预测的平均值与真实值的偏离程度模型太简单 → 欠拟合方差Variance模型预测随训练集变化的波动程度模型太复杂 → 过拟合噪声Noise数据本身固有的随机误差无法消除是误差下界集成方法如何针对性降低误差方法主要降低原理Bagging如随机森林方差多棵树平均波动被抵消Boosting如AdaBoost、GBDT偏差串行训练逐步逼近真实函数Stacking两者兼顾多样化基学习器 元学习器融合三、BaggingBootstrap Aggregating3.1 核心思想并行训练多个基学习器每个基学习器在不同的训练子集上训练最后通过投票分类或平均回归聚合结果。3.2 三步流程Bootstrap 采样从原始数据集N 个样本中有放回地抽取 N 个样本形成一个训练子集。重复 T 次得到 T 个不同的训练子集。并行训练在每个训练子集上独立训练一个基学习器通常是不剪枝的决策树。聚合预测分类多数投票回归取平均值3.3 为什么 Bootstrap 采样是 63.2%每个样本在单次抽样中被抽到的概率p1/NN 次有放回抽样后从未被抽中的概率所以约63.2%的独特样本会被抽到有些被重复抽到约36.8%的样本从未被抽到 → 称为OOBOut-of-Bag样本可用于免费验证。3.4 Bagging 降低方差的直观理解单棵决策树对训练数据敏感方差大。Bagging 训练多棵树每棵树的“噪声”方向不同平均后噪声相互抵消方差降低。但如果基学习器本身偏差很大欠拟合Bagging 无法解决 → 需要 Boosting。3.5 Bagging 手算示例原始数据10 个样本单节点决策树最高准确率 80%x0.10.20.30.40.50.60.70.80.91.0y11-1-1-1-1-1111进行 10 轮 Bagging每轮有放回抽样 → 训练树桩 → 投票最终所有 10 个样本都分对准确率从 80% 提升到 100%。四、随机森林Random Forest4.1 随机森林 Bagging 特征随机化普通 Bagging 的问题是各棵树高度相关因为都会优先选择最重要的特征进行分裂多样性不足。随机森林的改进在每个节点分裂时不是从所有 d 个特征中选择最优特征而是随机选择 m 个特征的子集再从这 m 个中选最优。推荐值效果特征去相关 → 树更多样 → 方差降低更多。4.2 OOB 误差免费交叉验证每棵树约有 36.8% 的样本未参与训练OOB 样本。可以用这些 OOB 样本对该树进行验证得到 OOB 误差估计。sklearn 中设置oob_scoreTrue即可计算。4.3 特征重要性随机森林提供两种常用特征重要性方法计算方式优点缺点MDI内置所有树中该特征减少的不纯度之和计算极快偏向高基数/连续特征排列重要性将特征值打乱后观察性能下降更可靠、更公正计算较慢五、Boosting提升5.1 Boosting 的核心思想串行训练每一轮新分类器专注于上一轮分错的样本。通过自适应地改变样本权重让后续模型更关注难样本。Bagging并行 → 降低方差Boosting串行 → 降低偏差六、AdaBoostAdaptive Boosting6.1 算法流程6.2 关键洞察错误样本权重↑下一轮分类器会更关注它们正确样本权重↓已经被学好的样本不再重要分类器权重 α表现越好ε 越小在最终投票中话语权越大6.3 AdaBoost 手算示例10 个样本初始数据x0~9y±1存在两段 1 区域七、GBDTGradient Boosting Decision Tree7.1 与 AdaBoost 的本质区别AdaBoostGBDT如何关注难样本提高错分样本权重w_i拟合损失函数的负梯度伪残差损失函数固定指数损失任意可导损失MSE、对数损失、Huber等弱学习器通常浅树depth1较深树depth3~8GBDT 的“梯度”体现在它不是在参数空间做梯度下降而是在函数空间做梯度下降——每一轮新树拟合的是损失函数对当前预测值的负梯度方向。7.2 GBDT 算法流程7.3 平方损失回归的伪残差正好是普通残差所以 GBDT 回归的每一轮就是在拟合上一轮的残差。7.4 GBDT 手算示例4 个样本回归x1234y2.53.73.36.5八、XGBoosteXtreme Gradient Boosting8.1 什么是 XGBoostXGBoost 是 GBDT 的工程优化版本比 sklearn 的 GBDT 快 10~100 倍是 Kaggle 竞赛结构化数据项目的首选算法之一。8.2 关键改进改进点说明正则化目标函数中加入自动防过拟合列采样类似随机森林每次分裂只考虑部分特征缺失值处理自动学习缺失值分裂方向近似分裂不必枚举所有分裂点用百分位数加速缓存优化CPU 缓存友好大数据集更快8.3 核心参数n_estimators树的数量learning_rate学习率收缩系数max_depth树的最大深度subsample每轮使用的样本比例colsample_bytree每棵树使用的特征比例reg_alpha/reg_lambdaL1 / L2 正则化九、Stacking堆叠泛化9.1 核心思想两层结构第一层基学习器多个不同类型的分类器如决策树、SVM、KNN、朴素贝叶斯等第二层元学习器以基学习器的输出为“特征”训练一个模型来学习如何最佳组合它们9.2 ⚠️ 防止过拟合的关键技巧不能直接用基学习器在训练集上的预测结果作为元特征会导致严重过拟合正确做法使用K 折交叉验证生成 out-of-fold 预测将训练集分成 K 折对每个基学习器用 K-1 折训练预测剩下 1 折得到该学习器在所有训练样本上的 out-of-fold 预测用这些预测作为元特征训练元学习器sklearn 的StackingClassifier自动处理这一过程cv参数控制折数。9.3 适用场景竞赛中追求最后几个百分点的性能提升当你有多种不同类型的模型且它们各有优势时十、三种集成方法全景对比维度Bagging随机森林BoostingGBDT/XGBStacking训练方式并行串行依赖前一轮分层两阶段主要降低误差方差偏差两者兼顾基学习器类型强学习器深树弱学习器浅树任意组合过拟合风险低独立性保护中需调 lr中需 CV 防泄露训练速度快可并行慢串行依赖慢多层训练超参敏感度低鲁棒高lr × T 组合中实用场景通用 / 默认首选高精度追求竞赛 / 集成最终十一、实践选择指南场景推荐方法理由数据量适中不知道选什么随机森林最稳健超参数少OOB 免费验证追求最高精度结构化数据XGBoost / LightGBMKaggle 首选精度高速度快需要可解释性单棵决策树 或 小规模 Bagging集成模型解释性较差时间充裕追求极限Stacking可以榨取最后一点性能数据量很小Bagging防止过拟合十二、本章核心公式速记卡十三、总结“三个臭皮匠顶个诸葛亮” —— 但前提是三个臭皮匠各有各的见解多样性而不是三个人犯同样的错误。方法一句话总结Bagging并行训练多棵树投票平均 → 降方差随机森林Bagging 特征随机化 → 多样性更强AdaBoost串行训练关注错分样本 → 降偏差GBDT拟合损失函数的负梯度 → 任意损失更通用XGBoostGBDT 工程优化版 → 快 10-100 倍Stacking两层结构元学习器组合基学习器 → 极限性能