集成学习
# Bagging 与 Boosting
# Bagging 方法
- Bootstrap 采样生成相互独立的 k 个训练集
- 用这 k 个训练集训练 k 个模型
- 用这 k 个模型投票或平均的结果作为模型的输出
例如 Bagging + 决策树 = 随机森林。
随机森林中要注意两个随机,一是为单棵决策树随机有放回地从大小为 N 的训练集中抽取 N 个样本,二是在决策树的每个节点进行分裂时随机从 M 个属性中抽取 m 个属性(m << M),然后从中选择一个最好的进行分裂。
注意,对于第二点而言,如果某节点选择的分裂属性与父节点相同,则该节点停止分裂,变成子节点。
# Boosting 方法
- 每一轮训练都改变数据的概率分布,提升误分类样本的权重,降低正确分类样本的权重
- 给错误率小的基础模型更大的权重,同时减小错误率高的模型权重
- 对基础模型进行加权组合,给出最后的结果
AdaBoost,GBDT,XGBoost 都是这类方法的例子。
# 对比
两种方法对比如下:
Bagging | Boosting | |
---|---|---|
数据选择 | 采用 Bootstrap 方法有放回地产生相互独立的训练集 | 训练集不变,但每个样本的权重会根据上一轮的分类结果进行调整 |
样本权重 | 每个样本权重一致 | 根据错误率调整权重,错误率大的下一轮学习中的权重高,以便学习器注意到该样本 |
预测函数 | 所有模型权重一致 | 每个弱分类器都有相应权重,分类效果好的权重高,反之则低 |
并行计算 | 每个弱分类器的训练互不干扰,可以并行 | 每一轮的计算都依赖于上一轮模型的分类结果,不能并行 🙅 |
通常情况下,用 Bagging 方法得到的结果方差更小,而 Boosting 方法得到的结果偏差更小。为了考虑偏差和方差的权衡,就要尽量降低 Bagging 模型的偏差(构建相对复杂的模型),降低 Boosting 模型的方差(简化弱分类器)。
# Blending 与 Stacking
Blending 与 Stacking 方法都是训练一个总模型来组合其他各个模型,首先需要训练多个模型,然后将各个模型的输出作为总模型的输入,用以得到最后的输出。
Stacking 和 Blending 最大的区别貌似体现在数据划分上,数据划分的不同导致训练过程也有所区别,对比如下。
Blending | Stacking | |
---|---|---|
初级,训练 | 把训练数据划分为初级训练集和初级验证集,然后通过初级训练集训练 m 个初级模型,用初级验证集生成次级验证集,次级验证集的大小为(初级验证集的样本数,m) | K 折交叉验证划分训练数据集,初级模型每次生成 1/K 的次级特征,K 次生成一个完整的次级特征,分别用 m 个模型生成次级训练集,其大小为(训练集的样本数,m) |
初级,测试 | 通过初级模型用初级测试集生成次级测试集 | 通过初级模型用初级测试集生成次级测试集,取 K 次的平均结果作为最后的次级测试集 |
次级,训练 | 次级验证集用于训练次级融合模型 | 次级训练集用于训练次级融合模型 |
次级,测试 | 次级测试集用于测试 | 次级测试集用于测试 |
相较于 Stacking,Blending 的操作更为简单,但数据利用率也较低。