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

集成学习的定义

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

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的最终预测结果 ( \hat{y} ) 是各树预测结果的均值:
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) = \text{sign}\left( \sum_{t=1}^T \alpha_t h_t(x) \right)
    ]

公式推导:

  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. 每个基学习器进行预测:
    [ \hat{h}_k(x) = h_k(x), \quad k = 1, 2, \ldots, 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 \mid x) = \sum_{k=1}^K w_k P_k(y \mid x) ]

最终预测结果 ( \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 模型的加权和:

对于分类问题,最终预测结果 ( \hat{y} ) 是所有模型预测结果的众数:
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

对于回归问题,最终预测结果 ( \hat{y} ) 是所有模型预测结果的均值:
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机器人

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SL3038 48V/60V电动车里程增程器电源驱动芯片 大电流3A

在电动车领域中,电池续航能力一直是制约其广泛应用的关键因素之一。为了提高电动车的续航能力和使用效率,各大厂商纷纷投入研发,寻求更为先进的电源驱动芯片解决方案。其中,SL3038 48V/60V电动车里程增程器电源驱动芯片以其卓越的…

【Java基础】权限修饰符

一个java文件中只能有一个被public修饰的类,且该类名与java文件的名字一样 同一个类同一个包不同包有继承不同包无继承private✔❌❌❌默认✔✔❌❌protected✔✔✔❌public✔✔✔✔

产品经理资料包干货

1.《产品汪》免费电子书 2016年我面试了差不多有200多位产品求职者,其中不乏之前做厨师编剧这些岗位的人。在这个过程中我意识到大众或许对产品经理这个岗位存在一些认知和理解上的误差,于是我就想着写一本产品经理相关的书。 关于本书的更多信息可查看…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷5(私有云)

#需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包…

windows无法启动硬件设备,代码(19)解决办法

遇到一台电脑,摄像头无法使用,查看设备管理器看到设备名前出现感叹号,双击打开看到“由于其配置信息(注册表中的)不完整或已损坏,windows无法启动硬件设备,代码(19)”错误…

在js中table表格中进行渲染轮播图

效果图&#xff1a;示例&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"><title></title><script src"js/jquery-3.6.3.js"></script><style>/* 轮播图 */.basko {width: 100%;h…

优化Mac系统,TinkerTool一键掌控!

TinkerTool System for Mac是一款专为Mac用户设计的系统设置维护工具。这款软件不仅具备执行系统维护任务的能力&#xff0c;如管理文件和调整系统或用户设置&#xff0c;还包含一系列功能强大的工具&#xff0c;旨在帮助用户解决、修复、排除故障或修复系统错误和损坏的帐户等…

华为涅槃,余承东重生

最近一段时间&#xff0c;余承东甚为低调。最为明显的是&#xff0c;“遥遥领先”已经听不到了&#xff0c;“余大嘴”口中的措辞越来越克制。 今后手机相关的发布会&#xff0c;或许不再看到余承东的身影。 5月10日&#xff0c;余承东的职位正式更新&#xff0c;从终端BG CE…

Linux/ubuntu build编译make时出现has modification time int the future的问题解决方法

针对Linux由于双系统之间的时间冲突导致linux时间经常变化&#xff0c;出现执行make命令时出现“make[2]: Warning: File xxx.c’ has modification time 1.6e05 s in the future “警告的问题&#xff0c;亦或者虚拟机出现相同的问题。 由于时钟同步问题&#xff0c;出现 warn…

菲律宾签证照片尺寸要求,用手机生成

菲律宾签证照片尺寸要求如下图所示&#xff0c;可以用手机在微信搜索随时照小程序&#xff0c;快速生成哦。

【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手

文章目录 一、前言二、绘制效果三、ConstraintLayout 使用方法3.1 创建布局文件3.2 替换配置3.3 设置约束&#xff0c;步骤13.4 设置约束&#xff0c;步骤23.5 其他设置 四、结束 一、前言 在进行Android APP开发过程中&#xff0c;减少layout嵌套即可改善UI的绘制性能&#x…

vue 百度地图点击marker修改marker图片,其他marker图片不变。

解决思路&#xff0c;就是直接替换对应marker的图片。获取marker对象判断点击的marker替换成新图片&#xff0c;上一个被点击的就替换成老图片。 marker.name tag;marker.id i; //一定要设置id&#xff0c;我这里是设置的循环key值&#xff0c;要唯一性。map.addOverlay(mark…

【ARM Cortex-M 系列 2.3 -- Cortex-M7 Debug event 详细介绍】

请阅读【嵌入式开发学习必备专栏】 文章目录 Cortex-M7 Debug eventDebug events Cortex-M7 Debug event 在ARM Cortex-M7架构中&#xff0c;调试事件&#xff08;Debug Event&#xff09;是由于调试原因而触发的事件。一个调试事件会导致以下几种情况之一发生&#xff1a; 进…

2022-1990年 各省碳排放Co2数据集(含数据及参考文献)

碳排放是指人类活动产生的二氧化碳&#xff08;CO2&#xff09;等温室气体释放到大气中的过程。通过划分排放源的范围以避免重复计算的思想&#xff0c;由世界资源研究所在关于企业温室气体排放清单编制的指南中首次提出。城市碳排放核算边界界定借鉴该思想&#xff0c;可分为3…

物联网应用开发--STM32与新大陆云平台通信(云平台控制开发板上蜂鸣器、LED)

实现目标 1、掌握云平台执行器的创建 2、熟悉STM32 与ESP8266模块之间的通信 3、具体实现目标&#xff1a;&#xff08;1&#xff09;创建5个执行器&#xff1a;蜂鸣器&#xff0c;LED1&#xff0c;LED2&#xff0c;ED3&#xff0c;LED4;&#xff08;2&#xff09;执行器能对…

【C++】每日一题 17 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 可以使用回溯法来解决这个问题。首先定义一个映射关系将数字与字母对应起来…

Web开发三层架构

##Controller Service Dao(mapper) 软件设计&#xff1a;高内聚 低耦合 Controller 调用Service&#xff0c; Service调用 DAO 模块之间耦合 如果要从EmpServiceA切换到EmpServiceB&#xff0c;Controller代码也要修改 new EmpServiceB 分层接耦 容器中放EmpServiceA&am…

文本批量高效管理,一键删除前后第一行,轻松提升工作效率!

在信息爆炸的时代&#xff0c;文本处理成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;面对大量的文本数据&#xff0c;如何高效地进行批量管理&#xff0c;成为了许多人头疼的问题。今天&#xff0c;我们将向您介绍一种简单而高效的方法&#xff0c;让您轻松删除…

【UE5.1 角色练习】01-使用小白人蓝图控制商城角色移动

目录 效果 步骤 一、导入资源 二、控制角色移动 三、更换角色移动动作 效果 步骤 一、导入资源 新建一个工程&#xff0c;然后在虚幻商城中将角色动画的相关资源加入工程&#xff0c;这里使用的是“动画初学者内容包”和“MCO Mocap Basics” 将我们要控制的角色添加进…

搜索引擎的设计与实现(四)

目录 6 系统测试 6.1测试重要性 6.2测试用例 结 论 参 考 文 献 前面内容请移步 搜索引擎的设计与实现&#xff08;三&#xff09; 免费源代码&毕业设计论文 搜索引擎的设计与实现 6 系统测试 6.1测试重要性 该项目是在本地服务器上进行运行和调试&#xff0c;…