机器学习 - 集成学习算法介绍

集成学习的定义

  • 集成学习(Ensemble Learning)是一种通过组合多个模型来提升预测性能的技术。简单来说,它就像是在开会时听取多人的意见,而不是只依赖一个人的观点,从而做出更准确的决策。

  • 提示:若无特别标注,以下学习方法的预测结果均表示为 y ^ \hat{y} y^

1. Bagging(Bootstrap Aggregating)

1.1 随机森林(Random Forest)

算法概述:
随机森林是一种基于Bagging的集成学习方法,通过生成多个决策树并对其结果进行投票或平均来提升模型的稳定性和准确性。

模型构建过程:

  1. 数据集有放回抽样(Bootstrap Sampling): 从训练数据集中随机有放回地抽取样本,生成多个子数据集。
  2. 构建决策树: 对每个子数据集构建一棵决策树。在构建每棵树时,随机选择部分特征进行节点分裂。
  3. 集成决策树: 对所有决策树的预测结果进行投票(分类问题)或平均(回归问题)。

公式:

假设我们有 N 个训练样本,随机森林中构建 M 棵决策树。第 i 棵树的预测结果为 hi(x) 。

对于分类问题,随机森林的最终预测结果是各树预测结果的众数:
y ^ = mode { h i ( x ) } i = 1 M \hat{y} = \text{mode}\{h_i(x)\}_{i=1}^M y^=mode{hi(x)}i=1M

对于回归问题,随机森林的最终预测结果是各树预测结果的均值:
y ^ = 1 M ∑ i = 1 M h i ( x ) \hat{y} = \frac{1}{M} \sum_{i=1}^M h_i(x) y^=M1i=1Mhi(x)

公式推导:

在这里插入图片描述

常见问题和解决方案:

  1. 过拟合:

    • 问题: 虽然随机森林通过集成多棵决策树降低了单个树过拟合的风险,但如果每棵树深度过大,仍然可能过拟合。
    • 解决方案: 限制树的最大深度,或减少每棵树的最小样本分裂数。
  2. 高计算成本:

    • 问题: 随机森林需要训练大量决策树,计算成本较高。
    • 解决方案: 使用并行计算,或减少树的数量。
  3. 数据不平衡:

    • 问题: 在数据不平衡的情况下,随机森林可能偏向多数类。
    • 解决方案: 使用样本加权或生成合成少数类样本(如SMOTE)。
  4. 特征重要性解释:

    • 问题: 随机森林可以输出特征重要性,但解释复杂。
    • 解决方案: 使用其他模型解释技术(如SHAP值)来增强解释性。
  5. 大数据处理:

    • 问题: 当数据集非常大时,随机森林训练可能需要大量内存。
    • 解决方案: 使用分布式计算框架(如Spark)或在线学习算法。

1.2 Bagged Decision Trees

算法概述:
与随机森林类似,但没有随机选择特征,每棵树使用全部特征。

模型构建过程:

  1. 数据集有放回抽样(Bootstrap Sampling): 从训练数据集中随机有放回地抽取样本,生成多个子数据集。
  2. 构建决策树: 对每个子数据集构建一棵决策树,使用所有特征进行节点分裂。
  3. 集成决策树: 对所有决策树的预测结果进行投票(分类问题)或平均(回归问题)。

公式:

假设我们有 N 个训练样本,Bagged Decision Trees中构建 M 棵决策树。第 i 棵树的预测结果为 hi(x) 。

对于分类问题,Bagged Decision Trees的最终预测结果 ( \hat{y} ) 是各树预测结果的众数:
y ^ = mode { h i ( x ) } i = 1 M \hat{y} = \text{mode}\{h_i(x)\}_{i=1}^M y^=mode{hi(x)}i=1M

对于回归问题,Bagged Decision Trees的最终预测结果是各树预测结果的均值:
y ^ = 1 M ∑ i = 1 M h i ( x ) \hat{y} = \frac{1}{M} \sum_{i=1}^M h_i(x) y^=M1i=1Mhi(x)

公式推导:

在这里插入图片描述

常见问题和解决方案:

  1. 过拟合:

    • 问题: 虽然Bagged Decision Trees通过集成多棵决策树降低了单个树过拟合的风险,但如果每棵树深度过大,仍然可能过拟合。
    • 解决方案: 限制树的最大深度,或减少每棵树的最小样本分裂数。
  2. 高计算成本:

    • 问题: Bagged Decision Trees需要训练大量决策树,计算成本较高。
    • 解决方案: 使用并行计算,或减少树的数量。
  3. 数据不平衡:

    • 问题: 在数据不平衡的情况下,Bagged Decision Trees可能偏向多数类。
    • 解决方案: 使用样本加权或生成合成少数类样本(如SMOTE)。
  4. 特征重要性解释:

    • 问题: Bagged Decision Trees可以输出特征重要性,但解释复杂。
    • 解决方案: 使用其他模型解释技术(如SHAP值)来增强解释性。
  5. 大数据处理:

    • 问题: 当数据集非常大时,Bagged Decision Trees训练可能需要大量内存。
    • 解决方案: 使用分布式计算框架(如Spark)或在线学习算法。

2. Boosting

2.1 AdaBoost(Adaptive Boosting)

算法概述:
AdaBoost 是一种迭代算法,通过不断调整样本权重来训练一系列弱学习器(如决策树桩),每个弱学习器重点关注前一轮中错误分类的样本。

模型构建过程:

  1. 初始化权重: 为每个训练样本分配一个初始权重 w i = 1 N w_i = \frac{1}{N} wi=N1 其中 N 是样本数。
  2. 迭代训练弱学习器:
    • 对每一轮 t :
      • 用当前的权重分布训练一个弱学习器 ht
      • 计算弱学习器的错误率 ϵ t = ∑ i = 1 N w i I ( y i ≠ h t ( x i ) ) ∑ i = 1 N w i \epsilon_t = \frac{\sum_{i=1}^N w_i I(y_i \neq h_t(x_i))}{\sum_{i=1}^N w_i} ϵt=i=1Nwii=1NwiI(yi=ht(xi)) 其中 I 是指示函数。
      • 计算弱学习器的权重 α t = 1 2 ln ⁡ ( 1 − ϵ t ϵ t ) \alpha_t = \frac{1}{2} \ln\left(\frac{1 - \epsilon_t}{\epsilon_t}\right) αt=21ln(ϵt1ϵt)
      • 更新样本权重:对于每个样本 i ,如果分类正确,则权重减少;如果分类错误,则权重增加。更新公式为:
        w i ← w i ⋅ exp ⁡ ( α t ⋅ I ( y i ≠ h t ( x i ) ) ) w_i \leftarrow w_i \cdot \exp(\alpha_t \cdot I(y_i \neq h_t(x_i))) wiwiexp(αtI(yi=ht(xi)))
      • 规范化权重使其和为1。
  3. 构建最终模型: 最终模型为所有弱学习器的加权和:
    H ( x ) = sign ( ∑ t = 1 T α t h t ( x ) ) H(x) = \text{sign}\left( \sum_{t=1}^T \alpha_t h_t(x) \right) H(x)=sign(t=1Tαtht(x))

公式推导:

  1. 初始化权重: 所有样本初始权重相等 w i = 1 N w_i = \frac{1}{N} wi=N1

  2. 计算错误率: 弱学习器在样本上的错误率为:
    ϵ t = ∑ i = 1 N w i I ( y i ≠ h t ( x i ) ) ∑ i = 1 N w i \epsilon_t = \frac{\sum_{i=1}^N w_i I(y_i \neq h_t(x_i))}{\sum_{i=1}^N w_i} ϵt=i=1Nwii=1NwiI(yi=ht(xi))

  3. 计算弱学习器权重:
    α t = 1 2 ln ⁡ ( 1 − ϵ t ϵ t ) \alpha_t = \frac{1}{2} \ln\left(\frac{1 - \epsilon_t}{\epsilon_t}\right) αt=21ln(ϵt1ϵt)

  4. 更新样本权重:
    w i ← w i ⋅ exp ⁡ ( α t ⋅ I ( y i ≠ h t ( x i ) ) ) w_i \leftarrow w_i \cdot \exp(\alpha_t \cdot I(y_i \neq h_t(x_i))) wiwiexp(αtI(yi=ht(xi)))
    然后规范化权重。

  5. 最终模型:
    H ( x ) = sign ( ∑ t = 1 T α t h t ( x ) ) H(x) = \text{sign}\left( \sum_{t=1}^T \alpha_t h_t(x) \right) H(x)=sign(t=1Tαtht(x))

常见问题和解决方案:

  1. 过拟合:

    • 问题: 在训练数据量少或噪声较多时,AdaBoost可能过拟合。
    • 解决方案: 使用早停法(如通过交叉验证选择最佳迭代次数),或者限制弱学习器的复杂度(如限制树的深度)。
  2. 弱学习器选择:

    • 问题: 选择不合适的弱学习器可能影响模型效果。
    • 解决方案: 常用决策树桩(单层决策树)作为弱学习器,但可以尝试其他简单模型。
  3. 计算成本:

    • 问题: 每一轮都需要重新训练弱学习器,计算成本较高。
    • 解决方案: 使用并行计算优化训练过程。
  4. 样本权重不稳定:

    • 问题: 样本权重可能会在迭代中不稳定,导致某些样本权重过大。
    • 解决方案: 设置权重的上限或对权重进行平滑处理。
  5. 处理多分类问题:

    • 问题: AdaBoost原始版本适用于二分类问题,多分类时效果不佳。
    • 解决方案: 使用AdaBoost.M1或AdaBoost.M2等变种,或者将多分类问题转化为多个二分类问题(如一对一、一对多)。

2.2 Gradient Boosting Machines(GBM)

算法概述:
GBM通过逐步训练新的模型来纠正前一个模型的误差,常用于回归和分类问题。其改进版本包括XGBoost、LightGBM和CatBoost。

模型构建过程:

  1. 初始化模型: 使用初始模型(如常数值)进行预测。
  2. 迭代训练弱学习器:
    • 对每一轮 ( t ):
      • 计算当前模型的残差(预测误差)。
      • 使用残差训练新的弱学习器 ht
      • 更新模型:新的模型为前一个模型和当前弱学习器的加权和。
  3. 构建最终模型: 最终模型为所有弱学习器的加权和。

公式:

假设我们有 N 个训练样本,第 t 轮的弱学习器为 ht ,其权重为 βt。最终模型 FT(x) 为:
F T ( x ) = F T − 1 ( x ) + β t h t ( x ) F_T(x) = F_{T-1}(x) + \beta_t h_t(x) FT(x)=FT1(x)+βtht(x)

其中,残差为:
r i , t = y i − F t − 1 ( x i ) r_{i,t} = y_i - F_{t-1}(x_i) ri,t=yiFt1(xi)

公式推导:

  1. 初始化模型:
    F 0 ( x ) = arg ⁡ min ⁡ γ ∑ i = 1 N L ( y i , γ ) F_0(x) = \arg\min_{\gamma} \sum_{i=1}^N L(y_i, \gamma) F0(x)=argγmini=1NL(yi,γ)
    其中 L 是损失函数(如均方误差、对数损失)。

  2. 计算残差:
    r i , t = y i − F t − 1 ( x i ) r_{i,t} = y_i - F_{t-1}(x_i) ri,t=yiFt1(xi)

  3. 训练弱学习器: 用残差 r i , t r_{i,t} ri,t 作为新的目标变量训练弱学习器ht

  4. 更新模型:
    F t ( x ) = F t − 1 ( x ) + β t h t ( x ) F_t(x) = F_{t-1}(x) + \beta_t h_t(x) Ft(x)=Ft1(x)+βtht(x)
    其中,权重 βt 通过最小化损失函数得到:
    β t = arg ⁡ min ⁡ β ∑ i = 1 N L ( y i , F t − 1 ( x i ) + β h t ( x i ) ) \beta_t = \arg\min_{\beta} \sum_{i=1}^N L(y_i, F_{t-1}(x_i) + \beta h_t(x_i)) βt=argβmini=1NL(yi,Ft1(xi)+βht(xi))

常见问题和解决方案:

  1. 过拟合:

    • 问题: GBM容易过拟合训练数据。
    • 解决方案: 使用早停法,或者通过交叉验证选择最佳迭代次数;限制树的最大深度,或者使用正则化技术。
  2. 高计算成本:

    • 问题: GBM计算成本较高,尤其是当迭代次数较多时。
    • 解决方案: 使用改进版本如XGBoost、LightGBM等,它们通过并行计算和高效的算法实现来加速训练。
  3. 模型复杂度:

    • 问题: 随着迭代次数增加,模型复杂度也增加,导致难以解释。
    • 解决方案: 使用特征重要性分析工具(如SHAP值)来解释模型。
  4. 数据不平衡:

    • 问题: 在数据不平衡的情况下,GBM可能偏向多数类。
    • 解决方案: 使用样本加权,或在训练时对少数类样本进行重采样。
  5. 处理缺失值:

    • 问题: GBM对缺失值敏感,可能导致模型性能下降。
    • 解决方案: 使用改进版本如CatBoost,它可以原生处理缺失值。

3. Stacking(Stacked Generalization)

算法概述:
Stacking 通过结合多个不同的基学习器的输出作为输入,训练一个次级学习器(meta-learner)来进行最终预测。与 Bagging 和 Boosting 不同,Stacking 主要利用不同类型的基学习器来提高模型的多样性和性能。

模型构建过程:

  1. 训练基学习器: 使用训练数据训练多个不同的基学习器。
  2. 生成次级训练数据: 使用训练数据通过交叉验证生成每个基学习器的预测结果,作为次级训练数据的输入特征。
  3. 训练次级学习器: 使用次级训练数据训练一个次级学习器来进行最终预测。

公式:

假设我们有 K 个基学习器 h 1 , h 2 , … , h K h_1, h_2, \ldots, h_K h1,h2,,hK以及一个次级学习器 g 。对于输入样本 x ,基学习器的预测为:
h ^ k ( x ) = h k ( x ) , k = 1 , 2 , … , K \hat{h}_k(x) = h_k(x), \quad k = 1, 2, \ldots, K h^k(x)=hk(x),k=1,2,,K

次级学习器的输入为基学习器的预测:
h ( x ) = ( h ^ 1 ( x ) , h ^ 2 ( x ) , … , h ^ K ( x ) ) \mathbf{h}(x) = (\hat{h}_1(x), \hat{h}_2(x), \ldots, \hat{h}_K(x)) h(x)=(h^1(x),h^2(x),,h^K(x))

次级学习器的预测为:
y ^ = g ( h ( x ) ) \hat{y} = g(\mathbf{h}(x)) y^=g(h(x))

公式推导:

  1. 训练基学习器: 使用训练数据 ( X , y ) (X, y) (X,y) 训练多个基学习器 hk

  2. 生成次级训练数据:

    • 使用交叉验证生成基学习器的预测。假设使用 M 折交叉验证,对每个基学习器 hk
      • 在每一折中,训练 hk 并对验证集进行预测,得到预测结果 h ^ k ( x ) \hat{h}_k(x) h^k(x)
      • 合并所有折的预测结果,形成次级训练数据 hk
  3. 训练次级学习器: 使用次级训练数据 ( H , y ) (H, y) (H,y) 训练次级学习器 g 。

  4. 生成最终模型: 最终模型为次级学习器对基学习器预测结果的组合:
    y ^ = g ( h ^ 1 ( x ) , h ^ 2 ( x ) , … , h ^ K ( x ) ) \hat{y} = g(\hat{h}_1(x), \hat{h}_2(x), \ldots, \hat{h}_K(x)) y^=g(h^1(x),h^2(x),,h^K(x))

常见问题和解决方案:

  1. 训练时间长:

    • 问题: 由于需要训练多个基学习器和一个次级学习器,训练时间较长。
    • 解决方案: 使用并行计算,或减少基学习器的数量。
  2. 次级学习器过拟合:

    • 问题: 次级学习器可能在基学习器的预测结果上过拟合。
    • 解决方案: 使用交叉验证生成次级训练数据,或使用正则化方法。
  3. 基学习器选择:

    • 问题: 选择不合适的基学习器可能影响模型效果。
    • 解决方案: 尝试不同类型的基学习器(如决策树、SVM、线性回归等),并进行模型选择。
  4. 次级学习器选择:

    • 问题: 选择不合适的次级学习器可能影响模型效果。
    • 解决方案: 尝试不同类型的次级学习器(如线性回归、逻辑回归、神经网络等),并进行模型选择。
  5. 数据泄露:

    • 问题: 在生成次级训练数据时,如果直接使用训练数据的预测结果,会导致数据泄露。
    • 解决方案: 使用交叉验证生成次级训练数据,确保基学习器在生成预测时没有见过验证集的数据。

好的,接下来我们详细介绍 Voting 算法。

4. Voting

算法概述:
Voting 是一种简单而有效的集成学习方法,通过结合多个模型的预测结果来提高最终预测的准确性。根据投票方式的不同,分为硬投票(Hard Voting)和软投票(Soft Voting)。

4.1 硬投票(Hard Voting)

硬投票概述:
硬投票适用于分类问题,通过直接投票选择预测次数最多的类别作为最终预测结果。

模型构建过程:

  1. 训练多个基学习器: 使用训练数据训练多个不同的基学习器。
  2. 每个基学习器进行预测: 对测试样本进行预测,得到每个基学习器的分类结果。
  3. 投票选择最终预测: 对所有基学习器的预测结果进行投票,选择预测次数最多的类别作为最终预测结果。

公式:

假设我们有 K 个基学习器 h 1 , h 2 , … , h K h_1, h_2, \ldots, h_K h1,h2,,hK
每个基学习器对样本 ( x ) 的预测结果为 ( h_k(x) )。硬投票的最终预测结果为:
y ^ = mode { h k ( x ) } k = 1 K \hat{y} = \text{mode}\{h_k(x)\}_{k=1}^K y^=mode{hk(x)}k=1K

公式推导:

  1. 训练多个基学习器: 使用训练数据 ( X , y ) (X, y) (X,y) 训练多个基学习器 hk

  2. 每个基学习器进行预测:
    h ^ k ( x ) = h k ( x ) , k = 1 , 2 , … , K \hat{h}_k(x) = h_k(x), \quad k = 1, 2, \ldots, K h^k(x)=hk(x),k=1,2,,K

  3. 投票选择最终预测:
    y ^ = mode { h k ( x ) } k = 1 K \hat{y} = \text{mode}\{h_k(x)\}_{k=1}^K y^=mode{hk(x)}k=1K

4.2 软投票(Soft Voting)

软投票概述:
软投票适用于分类问题,通过对各模型的概率输出进行加权平均,再选择概率最大的类别作为最终预测结果。

模型构建过程:

  1. 训练多个基学习器: 使用训练数据训练多个不同的基学习器。
  2. 每个基学习器进行预测: 对测试样本进行概率预测,得到每个基学习器的概率输出。
  3. 加权平均概率: 对所有基学习器的概率输出进行加权平均,选择概率最大的类别作为最终预测结果。

公式:

假设我们有 K 个基学习器 h 1 , h 2 , … , h K h_1, h_2, \ldots, h_K h1,h2,,hK
每个基学习器对样本 x 的预测概率为 P k ( y ∣ x ) P_k(y \mid x) Pk(yx),权重为 wk。软投票的最终预测概率为:
P ( y ∣ x ) = ∑ k = 1 K w k P k ( y ∣ x ) P(y \mid x) = \sum_{k=1}^K w_k P_k(y \mid x) P(yx)=k=1KwkPk(yx)

最终预测结果 ( \hat{y} ) 为:
y ^ = arg ⁡ max ⁡ y P ( y ∣ x ) \hat{y} = \arg\max_y P(y \mid x) y^=argymaxP(yx)

公式推导:

  1. 训练多个基学习器: 使用训练数据 ( X , y ) (X, y) (X,y) 训练多个基学习器 hk

  2. 每个基学习器进行概率预测:
    P k ( y ∣ x ) , k = 1 , 2 , … , K P_k(y \mid x), \quad k = 1, 2, \ldots, K Pk(yx),k=1,2,,K

  3. 加权平均概率:
    P ( y ∣ x ) = ∑ k = 1 K w k P k ( y ∣ x ) P(y \mid x) = \sum_{k=1}^K w_k P_k(y \mid x) P(yx)=k=1KwkPk(yx)

  4. 最终预测结果:
    y ^ = arg ⁡ max ⁡ y P ( y ∣ x ) \hat{y} = \arg\max_y P(y \mid x) y^=argymaxP(yx)

常见问题和解决方案:

  1. 基学习器选择:

    • 问题: 选择不合适的基学习器可能影响投票结果。
    • 解决方案: 尝试多种不同类型的基学习器,选择性能较好的模型进行投票。
  2. 基学习器数量:

    • 问题: 基学习器数量过多可能增加计算成本,但数量过少可能影响模型效果。
    • 解决方案: 在确保多样性的前提下,选择适当数量的基学习器。
  3. 权重分配:

    • 问题: 软投票中,权重分配不合理可能影响最终结果。
    • 解决方案: 使用交叉验证或基于基学习器性能的权重分配方法。
  4. 数据不平衡:

    • 问题: 在数据不平衡的情况下,投票结果可能偏向多数类。
    • 解决方案: 使用加权投票,或在训练时对少数类样本进行重采样。
  5. 处理多分类问题:

    • 问题: 硬投票和软投票均可处理多分类问题,但结果解释可能复杂。
    • 解决方案: 使用混淆矩阵等工具来辅助解释投票结果。

5. Bagging与Boosting结合模型

算法概述:
Bagging 和 Boosting 是两种常见的集成学习方法,分别通过不同的方式提高模型的稳定性和准确性。将这两种方法结合起来可以进一步提升模型性能。例如,可以将 Bagging 和 Boosting 应用于同一数据集,或者在 Boosting 中引入 Bagging 的思想。

5.1 Bagged Boosting Trees

算法概述:
Bagged Boosting Trees 是一种将 Bagging 和 Boosting 结合起来的方法。它首先使用 Bagging 的思想生成多个子数据集,然后在每个子数据集上应用 Boosting 方法(如 AdaBoost 或 Gradient Boosting)。

模型构建过程:

  1. 生成多个子数据集: 从训练数据集中随机有放回地抽取样本,生成多个子数据集。
  2. 在每个子数据集上应用 Boosting: 对每个子数据集应用 Boosting 方法,生成多个 Boosting 模型。
  3. 集成 Boosting 模型: 对所有 Boosting 模型的预测结果进行投票(分类问题)或平均(回归问题)。

公式:

假设我们有 N 个训练样本,生成 B 个子数据集,每个子数据集上应用 Boosting 生成 T 个弱学习器。第 b 个子数据集上的第 t 个弱学习器为 h b , t ( x ) h_{b,t}(x) hb,t(x) 其权重为 α b , t \alpha_{b,t} αb,t最终模型为所有 Boosting 模型的加权和:

对于分类问题,最终预测结果是所有模型预测结果的众数:
y ^ = mode { ∑ t = 1 T α b , t h b , t ( x ) } b = 1 B \hat{y} = \text{mode}\left\{ \sum_{t=1}^T \alpha_{b,t} h_{b,t}(x) \right\}_{b=1}^B y^=mode{t=1Tαb,thb,t(x)}b=1B

对于回归问题,最终预测结果是所有模型预测结果的均值:
y ^ = 1 B ∑ b = 1 B ( ∑ t = 1 T α b , t h b , t ( x ) ) \hat{y} = \frac{1}{B} \sum_{b=1}^B \left( \sum_{t=1}^T \alpha_{b,t} h_{b,t}(x) \right) y^=B1b=1B(t=1Tαb,thb,t(x))

公式推导:

  1. 生成多个子数据集: 假设我们有一个包含 N 个样本的数据集,每次从中随机抽取一个样本并返回抽取 N 次,生成一个包含 N 个样本的子数据集。每个样本被选中的概率为 1 − ( 1 − 1 N ) N 1 - \left(1 - \frac{1}{N}\right)^N 1(1N1)N

  2. 当 N 较大时,约为 1 − e − 1 ≈ 0.632 1 - e^{-1} \approx 0.632 1e10.632

  3. 在每个子数据集上应用 Boosting: 使用 Boosting 方法(如 AdaBoost 或 Gradient Boosting)在每个子数据集上生成一系列弱学习器 h b , t ( x ) h_{b,t}(x) hb,t(x) 及其权重 α b , t \alpha_{b,t} αb,t

  4. 集成 Boosting 模型: 对所有 Boosting 模型的预测结果进行投票(分类问题)或平均(回归问题)。

常见问题和解决方案:

  1. 计算成本:

    • 问题: Bagging 和 Boosting 都是计算密集型方法,结合后计算成本更高。
    • 解决方案: 使用并行计算优化训练过程,或减少子数据集和弱学习器的数量。
  2. 模型复杂度:

    • 问题: 模型复杂度较高,导致难以解释。
    • 解决方案: 使用特征重要性分析工具(如 SHAP 值)来解释模型。
  3. 数据不平衡:

    • 问题: 在数据不平衡的情况下,模型可能偏向多数类。
    • 解决方案: 使用样本加权或在训练时对少数类样本进行重采样。
  4. 过拟合:

    • 问题: 虽然 Bagging 和 Boosting 都有助于减少过拟合风险,但结合后仍可能过拟合。
    • 解决方案: 使用早停法(如通过交叉验证选择最佳迭代次数),或限制树的最大深度。
  5. 处理缺失值:

    • 问题: Bagging 和 Boosting 对缺失值敏感,可能导致模型性能下降。
    • 解决方案: 使用改进版本如 XGBoost 或 LightGBM,它们可以原生处理缺失值。
5.2 Random Forest + Boosting

算法概述:
将随机森林(Bagging 的一种)和 Boosting 结合起来,可以在随机森林生成的基础上进一步提升模型性能。例如,可以先用随机森林生成多个决策树,再用 Boosting 对这些决策树进行加权组合。

模型构建过程:

  1. 生成随机森林: 使用随机森林算法生成多个决策树。
  2. 对决策树应用 Boosting: 使用 Boosting 方法对这些决策树进行加权组合。

公式:

假设我们有 B 棵决策树,第 b 棵树为 hb(x) ,Boosting 方法对这些决策树进行加权组合,权重为 αb。最终模型为所有决策树的加权和:

对于分类问题,最终预测结果是所有决策树预测结果的众数:
y ^ = mode { ∑ b = 1 B α b h b ( x ) } \hat{y} = \text{mode}\left\{ \sum_{b=1}^B \alpha_b h_b(x) \right\} y^=mode{b=1Bαbhb(x)}

对于回归问题,最终预测结果是所有决策树预测结果的均值:
y ^ = 1 B ∑ b = 1 B ( α b h b ( x ) ) \hat{y} = \frac{1}{B} \sum_{b=1}^B \left( \alpha_b h_b(x) \right) y^=B1b=1B(αbhb(x))

公式推导:

  1. 生成随机森林: 使用随机森林算法生成多个决策树 hb(x)。

  2. 对决策树应用 Boosting: 使用 Boosting 方法(如 AdaBoost 或 Gradient Boosting)对这些决策树进行加权组合,权重为αb

  3. 集成 Boosting 模型: 对所有决策树的预测结果进行投票(分类问题)或平均(回归问题)。

常见问题和解决方案:

  1. 计算成本:

    • 问题: 生成随机森林和应用 Boosting 都是计算密集型方法,结合后计算成本更高。
    • 解决方案: 使用并行计算优化训练过程,或减少决策树和弱学习器的数量。
  2. 模型复杂度:

    • 问题: 模型复杂度较高,导致难以解释。
    • 解决方案: 使用特征重要性分析工具(如 SHAP 值)来解释模型。
  3. 数据不平衡:

    • 问题: 在数据不平衡的情况下,模型可能偏向多数类。
    • 解决方案: 使用样本加权或在训练时对少数类样本进行重采样。
  4. 过拟合:

    • 问题: 虽然随机森林和 Boosting 都有助于减少过拟合风险,但结合后仍可能过拟合。
    • 解决方案: 使用早停法(如通过交叉验证选择最佳迭代次数),或限制树的最大深度。
  5. 处理缺失值:

    • 问题: 随机森林和 Boosting 对缺失值敏感,可能导致模型性能下降。
    • 解决方案: 使用改进版本如 XGBoost 或 LightGBM,它们可以原生处理缺失值。

综合比较

算法主要特点优点缺点常见问题解决方案
Bagging- 有放回抽样生成多个子数据集
- 每个子数据集上训练一个模型
- 最后对模型结果进行平均或投票
- 减少方差,提升模型稳定性
- 简单易实现
- 对偏差的减少效果有限
- 计算成本较高
- 过拟合
- 高计算成本
- 数据不平衡
- 特征重要性解释复杂
- 大数据处理
- 限制树的最大深度
- 使用并行计算
- 样本加权或生成合成样本
- 使用 SHAP 值等解释技术
- 使用分布式计算框架
Random Forest- Bagging 的一种
- 通过随机选择特征进行节点分裂
- 高精度
- 自动处理缺失值
- 提供特征重要性
- 高计算成本
- 对小数据集不适用
- 过拟合
- 高计算成本
- 数据不平衡
- 特征重要性解释复杂
- 大数据处理
- 限制树的最大深度
- 使用并行计算
- 样本加权或生成合成样本
- 使用 SHAP 值等解释技术
- 使用分布式计算框架
AdaBoost- 逐步调整样本权重
- 训练一系列弱学习器
- 高精度
- 减少偏差
- 对噪声敏感
- 计算成本高
- 过拟合
- 弱学习器选择
- 高计算成本
- 样本权重不稳定
- 多分类问题处理
- 使用早停法
- 限制弱学习器复杂度
- 使用并行计算
- 设置权重上限或平滑处理
- 使用 AdaBoost.M1 或 M2
Gradient Boosting- 逐步训练新模型纠正前一个模型的误差- 高精度
- 减少偏差
- 灵活性强
- 高计算成本
- 模型复杂度高
- 过拟合
- 高计算成本
- 模型复杂度
- 数据不平衡
- 缺失值处理
- 使用早停法
- 使用并行计算
- 使用 SHAP 值等解释技术
- 样本加权或生成合成样本
- 使用 XGBoost, LightGBM, CatBoost
Stacking- 结合多个不同基学习器的输出
- 训练次级学习器进行最终预测
- 高精度
- 增加模型多样性
- 训练时间长
- 次级学习器可能过拟合
- 训练时间长
- 次级学习器过拟合
- 基学习器选择
- 次级学习器选择
- 数据泄露
- 使用并行计算
- 使用交叉验证生成次级训练数据
- 尝试多种基学习器
- 尝试多种次级学习器
- 确保基学习器在生成预测时没有见过验证集数据
Voting- 结合多个模型的预测结果
- 通过硬投票或软投票选择最终预测结果
- 简单易实现
- 增加模型多样性
- 可能需要调整模型权重
- 对偏差的减少效果有限
- 基学习器选择
- 基学习器数量
- 权重分配
- 数据不平衡
- 多分类问题处理
- 尝试多种基学习器
- 选择适当数量的基学习器
- 使用交叉验证或基于性能分配权重
- 使用加权投票
- 使用混淆矩阵等工具解释结果
Bagging + Boosting- 结合 Bagging 和 Boosting 方法
- 提升模型性能
- 增加模型多样性
- 提高准确性
- 高计算成本
- 模型复杂度高
- 计算成本高
- 模型复杂度高
- 数据不平衡
- 过拟合
- 缺失值处理
- 使用并行计算
- 限制决策树和弱学习器数量
- 使用 SHAP 值等解释技术
- 样本加权或生成合成样本
- 使用 XGBoost, LightGBM, CatBoost

更多问题咨询

Cos机器人

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/627747.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++auto关键字、范围for循环

一、auto关键字 1.1auto简介 在早期C/C中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量。 C11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编…

用Swagger(工具Knife4j )代替postman来进行构建、测试和调试 API

什么是Swagger? Swagger 是一个用于设计、构建和文档化 RESTful Web 服务的开源框架。它允许开发者设计 API,然后生成对应的 API 文档,提供给团队成员或者第三方开发者查阅。Swagger 的核心是 OpenAPI 规范(之前称为 Swagger 规范…

SpringBoot:缓存

点击查看SpringBoot缓存demo:LearnSpringBoot09Cache-Redis 技术摘要 注解版的 mybatisCacheConfigCacheableCachePut:既调用方法,又更新缓存数据;同步更新缓存CacheEvict:缓存清除Caching:定义复杂的缓存…

达梦(DM) SQL数据及字符串操作

达梦DM SQL数据及字符串操作 数据操作字符串操作 这里继续讲解DM数据库的操作,主要涉及插入、更新、删除操作。 数据操作 插入数据,不指定具体列的话就需要插入除自增列外的其他列,当然自增列也可以直接指定插入 INSERT INTO SYS_USER VALU…

5---Linux小程序“进度条”及缓冲区的概念(逻辑梳理,轻松理解)

一、缓冲区的解析&#xff1a; 1.1论点的引入&#xff1a; 在Linux中有一个接口sleep&#xff0c;可以使得C/C程序休眠一段指定的时间。他需要依赖的头文件是<unistd.h>&#xff0c;注意这个接口为Linux私有。 usleep接口类似sleep接口&#xff0c;但是单位为微秒。下面…

Linux 通过关键字查找文件

按文件名查找 find 路径 -name “文件名” 查找当前目录下的所有mk文件 find . -name "*.mk"按关键字查找 find 路径 -name “文件名” | xargs grep -n “关键字” 参数&#xff1a; xargs 是给命令传递参数的一个过滤器&#xff0c;也是组合多个命令的一个工具 -n…

基于springboot实现的在线动漫信息平台

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

Windows内核--Kernel API简析(3.1)

如果所有的内核提供的功能&#xff0c;内核提供进程/线程创建和终止&#xff0c;内存分配和释放&#xff0c;文件操作&#xff0c;网络功能&#xff0c;驱动程序加载和卸载等功能。这些API将在后面陆续介绍&#xff0c;如下先介绍Kernel提供的基础API(Kernel自身或Driver使用).…

SpringBoot内置插件的使用(jackson和lombok)

文章目录 引言I lombok(自动为属性生成构造器)II jacksonsee also引言 idea正式版2021.2.2 已经捆绑安装jackson和lombok插件 I lombok(自动为属性生成构造器) Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。 htt…

基于ProxySQL中间件实现MySQL的读写分离

目录 ProxySQL简介 ProxySQL安装 配置YUM仓库 YUM安装 关于读写分离的实现 集群信息 测试读写分离 测试总结 ProxySQL Configuration CLI ProxySQL简介 ProxySQL是一个高性能的MySQL协议代理&#xff0c;它支持多种数据库后端&#xff0c;包括Amazon Aurora、RDS、Cl…

51单片机:点亮一个LED灯

1.新建工程 选择AT89C52&#xff0c;在Atmel下显示的是See Microchip 并不需要添加启动文件到文件夹中。 添加main.c文件&#xff0c;c比cpp效率高&#xff0c;.asm汇编即更底层 程序编写好后 nop(); 该函数在这个头文件里面 #include <INTRINS.H> #include <R…

AI应用案例:律师服务质量评价

利用微调后的模型对律师的服务质量进行评价是一种高效且客观的方法。首先&#xff0c;我们需要一个预先训练好的模型作为基础&#xff0c;这个模型可能已经具备了处理文本或类似数据的能力。然后&#xff0c;针对律师服务质量的特定需求&#xff0c;我们对模型进行微调&#xf…

电脑录屏软件有哪些?这3款神器必须要知道

在当今现代社会&#xff0c;电脑录屏软件已经成为人们日常生活中不可或缺的一部分。无论是录制游戏精彩瞬间、制作教程、还是在线会议记录&#xff0c;一款好用的电脑录屏软件都能帮助我们更高效地完成任务。可是电脑录屏软件有哪些呢&#xff1f;接下来&#xff0c;我们将介绍…

MES系统在电线电缆行业生产上的应用

MES系统在线缆行业的应用可以带来多重价值&#xff0c;包括提高生产效率、降低生产成本、提高产品质量、优化库存管理、改善生产环境和提高企业竞争力等方面。因此&#xff0c;在电线电缆行业中广泛应用MES系统可以提高企业的经济效益和社会效益&#xff0c;推动企业发展和行业…

30W 宽电压输入 AC/DC 导轨式开关电源——TPR/DG-30-XS 系列

TPR/DG-30-XS 系列导轨式开关电源&#xff0c;额定输出功率为30W&#xff0c;产品输入范围&#xff1a;90-264VAC。提供12V、24V输出&#xff0c;12V输出时&#xff0c;工作温度范围 (-25℃~70℃)具有短路保护&#xff0c;过载保护等功能&#xff0c;并具备高效率&#xff0c;高…

地平线旭日X3开发板Object Detection测试调试

旭日X3派具有最高5TOPS的等效算力 (X3M BPU主频1.2GHz、算力5TOS; X3E BPU 主频0.6GHZ&#xff0c;算力3TOPS)&#xff0c; 因此在开发板上可以运行丰富的AI算法。 在系统/app/ai_inference目录下提供了基础算法示例&#xff1a; 01_basic_sample 系统给出的测试程序只能对给…

中腾食品上海食堂承包创新食堂空间,构建企业第三文化沙龙

在快节奏的现代职场生活中&#xff0c;企业食堂已不再是简单的餐饮供应地&#xff0c;而是逐渐演变成为员工休息休闲、互动体验、阅读思考的重要场所。中腾国际团餐产业集团通过专业的定制化食堂承包&#xff0c;在企业食堂内部打造企业第三文化空间&#xff0c;为员工提供一个…

社交媒体的探索者:探寻Facebook的发展历程

在当今数字化时代&#xff0c;社交媒体已经成为了人们日常生活中不可或缺的一部分&#xff0c;而Facebook作为最具影响力的社交平台之一&#xff0c;其发展历程承载着无数的探索与创新。本文将深入探讨Facebook的发展历程&#xff0c;从其创立初期到如今的全球化影响&#xff0…

leetcode.环形链表问题

目录 题目1 示例 解题思路 代码实现 补充 题目2 示例 解题思路 代码实现 题目1 该题链接&#xff1a;https://leetcode.cn/problems/linked-list-cycle/description/ 示例 解题思路 要创建两个指针一个是快指针(fast)&#xff0c;另一个慢指针(slow)。快指针走两步慢指…

网络安全快速入门(十二)(下) 目录结构相关命令补充

12.4 补充命令 我们已经了解了linux的目录结构&#xff0c;接下来我们大概看一下针对目录及文件的一些相关命令&#xff0c; 我们本章只讲三个目录及文件相关的命令&#xff0c;分别是tree&#xff0c;find及校验文件命令&#xff0c;我们一个一个来看这些命令。 12.4.1 tree命…