1. Bagging(Bootstrap Aggregating)
核心思想:
Bagging 的思路是通过对训练集进行多次有放回抽样(Bootstrap)来获得多个不同的子训练集,然后分别训练多个相同类型的弱学习器(例如多棵决策树),最后通过平均(对于回归问题)或投票(对于分类问题)来对预测结果进行集成。
数据采样方式:
有放回抽样(Bootstrap Sampling):从原始训练集(大小为 N)中有放回地随机抽取 N 个样本形成一个子训练集,每个子训练集中往往会有重复的样本,也会有部分原始样本未被抽中(约 36.8% 的未被抽样的原始样本称为"包外数据":Out-of-Bag Data)。
这种方式保证了每个子模型训练数据有一定程度的多样性,从而在一定程度上降低方差。
验证集选择:
对于 Bagging,常见的做法是使用 OOB(Out-of-Bag)样本来估计泛化误差。因为在每个子训练集的抽样中总会有一部分数据未被抽到,这些数据可以直接用来评估对应子模型的性能,从而省去单独划分验证集的步骤。
如果不使用 OOB 方法,也可在训练前从整体数据中划分出专门的验证集或采用交叉验证来评估最终模型的性能。
2. Boosting
核心思想:
Boosting 通过迭代地训练一系列弱学习器,其中每个后来的弱学习器会针对之前模型在训练数据上的错误进行重点学习。换句话说,Boosting 不像 Bagging 那样平行训练多个模型,而是串行地调整和提高先前模型的弱点。
数据采样方式(以 AdaBoost 为例):
在初始时,对所有训练样本赋予相同的权重。
每一轮训练后,会根据前一轮弱学习器的分类结果动态调整样本权重:将错误分类的样本权重提升,提高它们在下轮训练中的重要性;对正确分类的样本权重适当降低。
不同于 Bagging 的有放回抽样,Boosting 通常是对同一训练集反复使用,但每次更新样本的权重分布,从而让后续模型更关注难分的样本。
验证集选择:
Boosting 通常在构造模型的过程中就能内部观察到错误率的变化,也可以在最终模型训练完成后用独立的验证集来评估性能。
常用的策略是事先划分一部分数据作为验证集,最终在模型训练完成后,用该验证集或交叉验证来评价模型泛化能力。
3. Stacking(Stacked Generalization)
核心思想:
Stacking 使用多种类型的基础模型(可以是不同算法或同一算法不同参数设置)对训练数据进行训练,然后将这些基础模型的输出结果作为新的特征输入到一个元学习器(meta-learner)中,通过第二层模型来对最终预测进行集成。
数据采样方式:
Stacking 并不像 Bagging 或 Boosting 那样通过对同一数据集的重采样或重加权来获得子模型训练集。相反,Stacking 常用的策略是使用原始训练集对各个基础模型进行训练。
不过,为了得到基础模型对“未见过数据”的预测,以保证对第二层元学习器的训练不发生信息泄露(即避免训练集预测结果过拟合),通常会使用 K 折交叉验证(K-fold Cross-Validation)对基础模型进行训练和预测。
具体流程:将训练集分成 K 折,对每个基础模型在第 i 折训练集训练并在第 i 折验证集上预测,收集所有折的预测结果,最终得到与原训练集大小相同的"一级预测结果"。将这些预测结果(以及原特征或不需要原特征)作为新的特征,合并形成二级训练集,用来训练元学习器。
在最终预测阶段,各基础模型一般在全部训练数据上重新训练,然后再对新样本预测,最终由元学习器对这些预测结果再次进行组合。
验证集选择:
对于 Stacking,验证一般通过严格的交叉验证策略确保元模型(第二层模型)训练时所用的特征(基础模型的输出)是来自基础模型对未见过数据的预测。
在最终模型评估时,仍可保留一部分数据作为最终的独立测试集(验证集),或者全程使用交叉验证来评估整个 Stacking 架构的泛化表现。
总结:
Bagging(主要是可以降低方差):
数据处理:通过有放回抽样产生多个子训练集(Bootstrap),各子模型并行独立训练。
验证策略:可使用 OOB 样本直接评估,也可额外划分验证集或使用交叉验证。
Boosting(主要是可以降低偏差):
数据处理:同一训练集,通过迭代调整样本权重来强化难分样本的影响。
验证策略:通常在训练结束后使用独立验证集或交叉验证评估泛化性能。
Stacking(对偏差和方差都有潜在改善):
数据处理:使用原始数据同时训练多个不同类型的基础模型,通过交叉验证获取基础模型对未见数据的预测,构成新的训练特征供元学习器使用。
验证策略:主要通过交叉验证形成中间层预测数据,最终评估可使用独立验证集或交叉验证。