集成策略

Bagging

众人拾柴火焰高

Bagging

  • Bagging 的全程是 Bootstrap Aggregating,其中的 Boostrap 指的是自助采样法,即通过有放回地抽样来构建数据集,其中最常用的是 0.632 自助采样法,每次采样全数据集中的 63.2%。
  • 在 Bagging 中,每个基学习器会使用 Boostrap 自助采样法来构建自己的训练集并独立训练,当所有基学习器都训练完毕之后,综合所有基学习器的与测试得到最终的预测结果。

Boosting

一山还有一山高

Boosting

  • 与 Bagging 的独立训练基模型不同,Boosting 的训练过程是线性的,每个基模型的训练都会在之前的所有基模型的基础上进行训练,每次训练新的基模型的时候会更关心之前出错的样本,并为它们赋予更大的训练权重,最终也是综合了所有基模型的预测值来产生最终结果。

Stacking

根据多个基模型的预测结果来预测最终结果

Stacking

  • 简化版做法(去掉了 交叉验证 的部分,便于理解思路):
    1. 假设训练集样本数 800,测试集样本数 200,数据维度 64,那么训练集特征 $X_{train} \in R^{800 \times 64}$,标签 $Y_{train} \in R^{800 \times 1},$ 测试集特征 $X_{test} \in R^{200 \times 64}$,标签 $Y_{test} \in R^{800 \times 1}$;
    2. 假设基模型有 3 个:$M_1$、$M_2$、$M_3$,例如随机森林、SVM、线性回归模型;
    3. 第一层
      1. 用模型 $M _1$ 在训练集 $X_{train}$ 上训练,学得的模型在 $X_{train}$ 上测试得到 $P_{train} \in R^{800 \times 1}$,在测试集 $X _{test}$ 上测试得到 $P_{test} \in R^{200 \times 1}$;
      2. 用模型 $M_2$、$M_3$ 做同样操作,从而得到 3 份 $P_{train} \in R^{800 \times 1}$、3 份 $P_{test} \in R^{200 \times 1}$;
    4. 第二层
      1. 拼接第一层得到的 3 份 $P_{train}$ 得到新的 $P_{train} \in R^{800 \times 3}$,拼接 $P_{test}$ 得到新的 $P_{test} \in R^{200 \times 3}$;
      2. 以 $P_{train}$ 作为样本特征,以训练集原标签 $Y_{train}$ 为样本标签,训练第二层的 stacking 模型 $S$(一般用 LR 模型)。对于每个样本,该模型的输入为第一层 3 个模型的预测结果(维度为 $3$),输出为真实的预测结果(维度为 $1$),也就是 根据基模型预测的结果来预测最终结果
      3. 用模型 $S$ 来预测测试集结果,即输入为 $P_{test} \in R^{200 \times 3}$,输出为最终预测结果 $\hat{P}_{test} \in R^{200 \times 1}$。
  • 真正的做法(为了防止过拟合,一般在第一层会使用 交叉验证):
    • 与简化版做法的区别只在于第一层中获得 $P_{train}$、$P_{test}$ 的过程
    • 以模型 $M_1$ 为例,假设使用五折交叉验证,那么:
      1. 取索引为 161~800 的训练集样本来训练 $M_1$,然后在索引为 1~160 的训练集样本预测得到 $P_{train}^{(1)} \in R^{160 \times 1}$,在测试集上预测得到 $P_{test}^{(1)} \in R^{200 \times 1}$;
      2. 遵循交叉验证的方式获得 $P_{train}^{(2)}$、$P_{train}^{(3)}$、$P_{train}^{(4)}$、$P_{train}^{(5)}$、$P_{test}^{(2)}$、$P_{test}^{(3)}$、$P_{test}^{(4)}$、$P_{test}^{(5)}$;
      3. 拼接 5 份 $P_{train}$ 得到新的 $P_{train} \in R^{800 \times 1}$;
      4. 平均 5 份 $P_{test}$ 得到新的 $P_{test} \in R^{200 \times 1}$;
      5. 由此,得到的 $P_{train}$、$P_{test}$ 即为以上简化版做法中的第一层第 1 步。
  • 网上中文资料普遍写得一般,可以看看:

MoE(Mixture of Experts)

根据输入数据+门控机制,来组合多个基模型的预测结果来预测最终结果

  • 与 Stacking 有一点类似,都是最终 对多个基模型的预测结果进行加权,区别在于
    • Stacking 的第二层模型通常使用 LR 模型,其输入是基模型的预测结果,输出是最终的预测结果。当模型训练完毕后,基模型的权重是固定的
    • MoE 的第二层模型是个 门控机制,其输入是各个样本的特征 $x$,输出是各个基模型的权重。当模型训练完毕后,也就是说 基模型的权重是根据样本来决定的
    • 换句话说,Stacking 是 MoE 的权重固定简化版。
  • 参考:

整合方式

  1. Voting(投票法),票数最多的为预测类别。
  2. Averaging(平均法)
    • 对于回归任务来说
      • 简单平均,各个基模型的结果的平均值
      • 加权平均,各个基模型的结果的加权平均结果
    • 对于分类
      • 简单投票,人头票,少数服从多数
      • 加权投票,每个基模型的投票权重不同
      • 概率投票,以某个概率遵从某个基模型的结果(例如根据模型效果)

集成学习的好处

  • 如果从「偏差-方差」的角度解释,我们可以使用更低偏差、更高方差的模型来作为基模型,并使用集成学习来综合这些基模型,从而获得低偏差、低方差的结果。

参考