机器学习之集成学习

一、集成学习简介

1. 概述

集成学习是机器学习中的一种思想,它通过多个模型的组合形成一个精度更高的模型,参与组合的模型称为弱学习器(基学习器)。训练时,使用训练集依次训练出这些弱学习器,对未知的样本进行预测时,使用这些弱学习器联合进行预测。

核心思想:集体决策与优势互补。即不依赖单个模型的判断,而是综合多个模型的意见做出最终决策;将多个模型组合起来,让它们相互取长补短,从而在整体上达到更稳定、更准确的效果。

2. 分类

根据集成学习中基学习器的生成方式组合策略的差异,通常将集成学习分为以下三大类:

  • Bagging(并行集成学习)

    • 核心思想:有放回的随机抽取多个大小相同的子集,并行在每个子集上独立训练一个基学习器,然后通过**投票(分类)或平均(回归)**结合得到最终结果。
    • 主要特点:
      • 有效降低方差(防止过拟合),对噪声数据鲁棒性强。
      • 可高度并行化,训练效率高。
    • 代表算法:
      • 随机森林
      • Bagging决策树
  • Boosting(串行集成学习)

    • 核心思想:通过样本权重扰动串行依赖产生多样性。依次训练基学习器,每一轮根据上一轮的学习器的表现,提高被分错样本的权重(或降低正确样本的权重),然后通过加权结合得到最终结果。
    • 主要特点:
      • 主要降低偏差(提升模型精度),但对噪声和异常值敏感。
      • 串行训练,不易并行,但通过优化(如XGBoost、LightGBM)可部分并行。
    • 代表算法:
      • AdaBoost(自适应提升)
      • GBDT(梯度提升决策树)
      • XGBoost
      • LightGBM
  • Stacking(层次集成学习)

    • 核心思想:通过模型结构扰动引入多样性。使用不同的学习器(如KNN、决策树)对数据进行预测,将这些基学习器的输出作为新特征经过K折交叉验证再训练一个次级学习器来做出最终决策。
    • 主要特点:
      • 能有效利用不同模型的优势,表达能力强。
      • 结构灵活,但计算开销较大,容易过拟合。

二、随机森林算法

1. 概述

随机森林(Random Forest)是一种基于Bagging思想 ,并以决策树为基学习器的集成学习算法。核心思想是:集成了随机性的多棵决策树,通过投票或平均进行集体决策。

Bagging决策树 :有放回的随机抽取样本进行采样。每棵树在分裂节点时,会考察所有特征,从中选取最佳分裂特征。

随机森林 :在Bagging决策树的基础上,增加了特征采样。每棵树在分裂节点时,只随机考察部分特征子集,再从这些特种中选取最佳分裂特征。

说明

  1. 随机森林的方法即对训练样本进行了采样,又对特征进行了采样,充分保证了所构建的每个树之间的独立性,使得投票结果更准确。
  2. 随机森林的随机性体现在每棵树的训练样本是随机的,树中每个节点的分裂属性也是随机选择的。有了这2个随机因素,即使每棵决策树没有进行剪枝,随机森林也不会产生过拟合的现象。

思考

  1. 为什么要随机抽样训练集?  
    答:如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样。
  2. 为什么要有放回地抽样?
    答:如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是"有偏的",都是绝对"片面的",也就是说每棵树训练出来都是有很大的差异的;而随机森林最后分类取决于多棵树(弱分类器)的投票表决。

2. 构建步骤

  1. 从训练数据集中有放回的随机选取m条样本数据(可能包含重复样本)
  2. 从候选的样本数据中随机选取k个数据特征,选择最能划分训练样本的特征
  3. 在训练样本和特征确定后训练决策树(默认为CART算法)
  4. 重复1-3步骤构造出n个弱决策树
  5. 平权投票集成n个弱决策树的结果

三、AdaBoost算法

1. 概述

Adaptive Boosting(自适应提升)基于Boosting思想 实现的一种集成学习算法。核心思想是:通过逐步提高那些被前一步分类错误的样本的权重来训练一个强分类器。特点是:训练时,样本具有权重,并且在训练过程中动态调整。被预测错误的样本会加大权重,算法更加关注难分的样本。

2. 构建步骤

  1. 使用全部训练集作为样本数据,初始化设置相同样本权重,训练第1个弱学习器,寻找最优分裂点(错误率最小),计算模型权重,更新样本权重
  2. 根据第1个弱学习器的预测结果,训练第2个弱学习器,寻找最优分裂点,计算模型权重,更新样本权重
  3. 以此类推,直到迭代训练出n个弱学习器
  4. 加权投票集成n个弱学习器的结果

3. 公式

  • AdaBoost 模型公式
    H(x)=sign(∑i=1mαihi(x)) H(x) = \text{sign}\left( \sum_{i=1}^m \alpha_i h_i(x) \right) H(x)=sign(i=1∑mαihi(x))

α 为模型的权重

m 为弱学习器数量

hi(x) 表示弱学习器

H(x) 输出结果大于 0 则归为正类,小于 0 则归为负类。

  • AdaBoost 权重更新公式
    αt=12ln⁡(1−εtεt) \alpha_t = \frac{1}{2} \ln \left( \frac{1 - \varepsilon_t}{\varepsilon_t} \right) αt=21ln(εt1−εt)

εt 表示第 t 个弱学习器的错误率

  • AdaBoost 样本权重更新公式

Zt 为归一化值(所有样本权重的总和)

Dt(x) 为样本权重

αt 为模型权重。

四、GBDT算法

1. 概述

提升树

提升树(Boosting Decision Tree)即提升决策树,是一种Boosting思想实现的集成学习算法。核心思想:通过不断拟合残差来逐步提升模型泛化能力。

残差 = 真实值 - 预测值

梯度提升树

梯度提升树(Gradient Boosting Decision Tree)是提升树的一种改进算法,在回归问题中通常用残差 ,而在分类问题中GBDT使用损失函数的负梯度作为提升树算法中的残差近似值,使其能灵活处理多种任务。

2. 构建步骤

  1. 采用样本中的目标值的均值作为第1个弱学习器的预测值
  2. 求得第1个弱学习器的负梯度(残差=目标值 - 预测值),将该列值作为第2个弱学习器的目标值
  3. 针对于第1个弱学习器,寻找最优分裂点(平方和最小),至此第1个弱学习器搭建完成
  4. 把上述步骤的分裂点代入第2个弱学习器,计算它的预测值(以分割点为界,目标值的均值)
  5. 求得第2个弱学习器的负梯度,最佳分割点,至此第2个弱学习器搭建完成
  6. 以此类推,直至达到指定的学习器个数
  7. 当输入未知样本时,将所有弱学习器的输出结果组合起来作为强学习器的输出

五、XGBoost算法

1. 概述

XGBoost(Extreme Gradient Boosting)是对梯度提升树的改进,并且在损失函数中加入了正则化项。核心思想:采用打分函数决定是否进行分裂,如果增益(Gain值)大于0,说明分裂后树的损失更小,考虑分裂;否则不考虑分裂。

XGBoost对GBDT的改进

  • 二阶泰勒展开式:使得模型收敛更快,精确度更高
  • 加入正则化项:控制模型复杂度,防止过拟合
  • 缺失值处理:自动学习缺失值应该走左分支还是右分支
  • 并行计算:在找最佳分裂点时,对不同特征进行并行评估,训练快
  • 剪枝:从叶子往根部剪掉增益为负的分支,保证树结构合理

目标函数

目标函数(又称损失函数,打分函数)是衡量XGBoost模型的方法,目标函数越小,模型越好

  • 公式:
    obj(θ)=∑i=1nL(yi,y^i)+∑k=1KΩ(fk) \text{obj}(\theta) = \sum_{i=1}^n L(y_i, \hat{y}i) + \sum{k=1}^K \Omega(f_k) obj(θ)=i=1∑nL(yi,y^i)+k=1∑KΩ(fk)

目标函数的第一项表示整个强学习器的损失,第二项表示强学习器中 K 个弱学习器的复杂度。

每一个弱学习器的复杂度主要从两个方面来考量:

Ω(f)=γT+12λ∥w∥2 \Omega(f) = \gamma T + \frac{1}{2} \lambda \|w\|^2 Ω(f)=γT+21λ∥w∥2

  1. γT 中的 T 表示一棵树的叶子结点数量,γ 是对该项的调节系数
  2. λ||w||2 中的 w 表示叶子结点输出值组成的向量,λ 是对该项的调节系数

第t轮树的简化目标函数

obj(t)=−12∑i=1T(Gi2Hi+λ)+γT \text{obj}^{(t)} = -\frac{1}{2} \sum_{i=1}^{T} \left( \frac{G_i^2}{H_i + \lambda} \right) + \gamma T obj(t)=−21i=1∑T(Hi+λGi2)+γT

公式中各符号含义如下:

  • TTT:当前树中叶子节点的个数。
  • GiG_iGi:第 iii 个叶子节点上所有样本的一阶梯度之和(代表总修正方向)。
  • HiH_iHi:第 iii 个叶子节点上所有样本的二阶梯度之和(代表修正步长的参考)。
  • λ\lambdaλ:L2 正则化系数(防止叶子权重过大)。
  • γ\gammaγ:每个新增叶子节点的惩罚系数(控制树复杂度)。
    该公式的意义:在最优的叶子权重下,计算这棵树能达到的最小损失与正则化项之和,是XGBoost节点分裂和剪枝的核心依据。

Gain

增益(Gain)衡量的是在某个节点上按某个特征或阈值进行分裂,能降低多少损失函数(比如方差或对数损失)。降低越多,Gain越大,说明分裂越好。

Gain =(分裂前该节点的目标函数值) −(分裂后左子节点目标值 + 右子节点目标值)

2. 构建步骤

  1. 初始化预测值
    给所有样本一个初始预测(如均值)
  2. 计算修正方向(梯度)
    对每个样本,利用损失函数的一阶梯度(方向)和二阶梯度(步长)计算当前预测与真实值之间的"偏差",指明要调整多少
  3. 构建一棵新树拟合修正方向
    • 从根节点开始,尝试用不同特征和分裂点划分样本
    • 根据打分函数,选择增益最大 的分裂点
      • Gain值大于0,说明树分裂后的损失更小,考虑分裂
      • Gain值小于0,说明树分裂后的分数比分裂前大,不考虑分裂
    • 选择Gain值最大且大于0的那个分裂点进行分裂,直到触发以下条件时停止分裂
      • 达到最大深度
      • 叶子节点样本数量低于某个阈值
      • Gain值小于0
  4. 更新预测值
    新预测 = 旧预测+学习率*树输出的修正量(学习率让每棵树只做小幅修正,防止过拟合)
  5. 重复2-4步骤
    依次生成第2,3...N棵树,每棵树都专注于修正当前整体预测的剩余误差
  6. 输出最终模型
    将初始化预测与所有树的修正输出(乘以学习率后)累加,得到最终预测结果
相关推荐
weixin_468466851 小时前
SURF 图像特征提取算法新手实战指南
图像处理·人工智能·算法·机器视觉·surf·sift
盛夏光年爱学习1 小时前
Agentic RAG 深度解析:让 Agent 自己决定要不要检索、检索几次,这才是 RAG 的正确打开方式
人工智能
weiwin1231 小时前
MAF入门(3 下):多轮对话进阶——清除历史、注入 System、截断策略
人工智能·agent
Coder小相1 小时前
LangChain 1.0 第五篇 - Tool与MCP让Agent拥有行动力
人工智能·langchain·ai编程
太华1 小时前
学习AI Agent编程-第五天-LlamaIndex - 将Nodes生成索引并存储
人工智能
太华1 小时前
学习AI Agent编程-第三天-LlamaIndex - 如何将PDF文件正确转成Document
人工智能
jiayong231 小时前
AI架构师面试问题与解答 - 深度学习架构篇
人工智能·深度学习
unclejet1 小时前
颠覆传统开发!AI根治软件工程技术债务顽疾
大数据·人工智能·软件工程
程序员鱼皮2 小时前
我用 GitHub 仓库养 AI 龙虾,自动开发上线项目!保姆级教程
前端·人工智能·ai·程序员·github·编程·ai编程