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

news2024/11/18 13:28:34

集成学习的定义

  • 集成学习(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.coloradmin.cn/o/1675872.html

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

相关文章

数据可视化训练第7天(json文件读取国家人口数据,找出前10和后10)

数据 https://restcountries.com/v3.1/all;建议下载下来,并不是很大 import numpy as np import matplotlib.pyplot as plt import requests import json #由于访问url过于慢;将数据下载到本地是json数据 #urlhttps://restcountries.com/v3…

Go微服务: Gin框架搭建网关, 接入熔断器,链路追踪以及服务端接入限流和链路追踪

概述 本文使用最简单和快速的方式基于Gin框架搭建一个微服务的网关调用微服务的场景网关作为客户端基于RPC调用某一服务端的服务并接入熔断和限流以及链路追踪具体场景:通过网关API查询购物车里的数据在最后,会贴上网关和购物车服务的代码仓库 服务端搭…

RK3566(泰山派):GP7101背光驱动

RK3566(泰山派):GP7101背光驱动 文章目录 RK3566(泰山派):GP7101背光驱动GP7101背光驱动电路配置i2c1设备树创建驱动编写Makefilegp7101_bl.c驱动触摸I2C驱动框架。驱动中的结构体probe函数devm_backlight_…

【opencv】图像拼接实验

实验环境:anaconda、jupyter notebook 实验用到的包:opencv、matplotlib、numpy 注:opencv在3.4.2之后sift就不是免费的了 我用的是3.4.1.15版本 实验使用到的图片 一、sift函数获取特征值 读入图片 book cv2.imread(book.png, cv2.IMRE…

每日两题 / 437. 路径总和 III 105. 从前序与中序遍历序列构造二叉树(LeetCode热题100)

437. 路径总和 III - 力扣(LeetCode) 前序遍历时,维护当前路径(根节点开始)的路径和,同时记录路径上每个节点的路径和 假设当前路径和为cur,那么ans 路径和(cur - target)的出现次数 /*** D…

linux系统修改网卡名称

说明: 因操作过程需要停用网卡,导致ssh远程连接不上,需要控制台登录操作。 测试环境: CentOS7.9、8.2虚拟机 Suse15 SP4虚拟机 操作步骤: 方法一: 1、 查看网卡当前名称及状态 ip a2、 将网卡状态从启用…

C# OpenCvSharp DNN 黑白老照片上色

C# OpenCvSharp DNN 黑白老照片上色 目录 效果 项目 代码 下载 参考 效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using System; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropS…

Nios-II编程

文章目录 一硬件部分设计1Qsys2Quartus 二软件1Nios-II Eclipse 三运行项目及效果1配置 FPGA 一硬件部分设计 1Qsys 1创建一个项目 2点击 Tools 下拉菜单下的 Platform Designer 工具,启动 Platform Designer 后,点击 File-save,在文件名中…

用面向对象的思想编写实时嵌入式C程序

实时嵌入式系统的软件一般由C语言编写,程序结构基本上都是这样的: // 主程序 int main(void) {init(); // 初始化while(1){tick(); // 业务逻辑}return 0; }// 计时器 static unsigned int g_timer_tick_cnt 0; // 时钟中断回调 void isr_time…

RK3566(泰山派):3.1寸屏幕D310T9362V1SPEC触摸驱动(竖屏)

RK3566(泰山派):3.1寸屏幕D310T9362V1SPEC触摸驱动(竖屏) 文章目录 RK3566(泰山派):3.1寸屏幕D310T9362V1SPEC触摸驱动(竖屏)电路配置i2c1设备树创建驱动编写…

Llama 3 超级课堂 -笔记

课程文档: https://github.com/SmartFlowAI/Llama3-Tutorial 课程视频:https://space.bilibili.com/3546636263360696/channel/series 1 环境配置 1.1 创建虚拟环境,名为:llama3 conda create -n llama3 python3.10 1.2 下载、安装 pyt…

企业管理咨询公司不会选?一文带你避开“坑人”陷阱

近年来,企业管理咨询公司如雨后春笋般涌现,数量之多令人眼花缭乱。所以,面对这么多的企业管理咨询公司,企业该选谁?又该如何选择?本文将从以下几个方面为大家解析。 首先,我们要明确自己的需求和…

【RAG 论文】UPR:使用 LLM 来做检索后的 re-rank

论文:Improving Passage Retrieval with Zero-Shot Question Generation ⭐⭐⭐⭐ EMNLP 2022, arXiv:2204.07496 Code: github.com/DevSinghSachan/unsupervised-passage-reranking 论文:Open-source Large Language Models are Strong Zero-shot Query…

Intel HDSLB 高性能四层负载均衡器 — 快速入门和应用场景

目录 文章目录 目录前言与背景传统 LB 技术的局限性HDSLB 的特点和优势HDSLB 的性能参数基准性能数据对标竞品 HDSLB 的应用场景HDSLB 的发展前景参考文档 前言与背景 在云计算、SDN、NFV 高速发展并普遍落地的今天,随着上云业务的用户数量越来越多、数据中心的规模…

10 大IDEA 插件集合,解放双手!!【送源码】

1、POJO to JSON 开发工作中,常常在设计完 API 后,会使用如 GsonFormat 工具来将设计文档上的 JSON 格式数据生成Java实体类,这可以节省很多时间。 不过,在某些情况下,我们需要将已有实体类转换为 JSON 格式数据&#…

Git 基础使用(1) 入门指令

文章目录 Git 作用Git 安装Git 使用Git 仓库配置Git 工作原理Git 修改添加Git 查看日志Git 修改查询Git 版本回退 概念补充 Git 作用 Git 是一种分布式版本控制系统,它旨在追踪文件和文件夹的更改,并协助多人协作开发项目。 Git 安装 (Lin…

52岁「豹嫂」代夫尽孝送花畀奶奶被赞

歌手胡蓓蔚与「豹哥」单立文相爱28年,两人曾上节目分享婚姻之道,指婚姻最紧要有忍耐力,要抗拒引诱。其实除了忍耐力,胡蓓蔚和奶奶相处都有一套。 早前单立文带胡蓓蔚及妈妈到米芝连一星餐厅叹美食,庆祝奶奶89岁生日&am…

H5嵌入原生----兼容安卓与ios

主要分UI展示,键盘,输入框等等。解决bug最苦恼的问题不是没有解决方案,而是你没有找到真正的原因。再就是现象难以重现,每次都要发布代码,然后到手机app中去测试,模拟。这些地方会耗费大量的精力。 一、UI…

【工作篇】软件工程师的知识基础(持续更新)

目录 1. linux 知识篇 1. linux 知识篇 1. Linux API 是什么 Linux API 是指 Linux 操作系统 提供的应用程序接口,用于与操作系统进行交互。它包含了一系列的函数、系统调用、库函数和数据结构,用于实现各种系统级的操作,如文件操作、进程…

Mimikatz安装 lsass进程 SAM NTML

目录 什么是Mimikatz Mimikatz在windows上安装及使用 mimkatz语法 lsass进程 SAM NTML 什么是Mimikatz Mimikatz是一款开源的Windows安全工具,由法国安全研究员Benjamin Delpy开发。它最初被设计为用于学习C语言和进行Windows安全性实验的工具。然而&#xf…