6.集成学习

基本概念

    将多个模型的决策结合起来,提高整体效果;集成学习模型通过将多个学习器组合,获取比单一学习显著优越的泛化能力。分类大纲:

  • 模型融合:将训练出的强学习器组合进一步提高性能。

    • 多数法(Max Voting)

    • 平均法(Averaging)

    • 加权平均法(Weighted Averaging)

    • 堆叠法(Stacking)

    • 混合法(Blending)

  • 机器学习元算法:弱学习器的组合

    • 袋装法(Bagging)

      • 袋装通用(Bagging Meta-Estimator)

      • 随机森林(Random Forest)

    • 提升法(Boosting)

      • Adaboost

      • XGBoost

      • Gradient Boost

1. 模型融合

    步骤

  1. 先训练出多个功能强大的学习器

  2. 然后,进一步提高学习器能力,尝试将其组合起来

    优缺点

  • 好处是增强模型的预测和泛化能力

  • 坏处是多模型的学习加上再学习的过程会增加计算代价

    目标:好而不同:

  • 表示个体学习器的性能都要好

  • 不同是个体模型的类别不同

1.1. 多数法(Max Voting)

    通常用于分类,使用多个模型对每个数据预测,每个模型预测视为“投票”,大多数模型得到的结果为最终预测结果。

1.2. 平均法(Averaging)

    采用所有模型的平均预测值进行最终预测,可用于回归和分类中的概率预测。

1.3. 加权平均(Weighted Averaging)

    平均法的扩展,根据模型的重要性分配不同权重(权重总和为1.0)。

1.4. 堆叠(Stacking)

    堆叠法来自多个模型(KNN、SVM、决策树)的预测来构建新模型,使用多个模型,在交叉验证基础上,使用部分训练数据训练,然后部分数据测试,最终得到每个模型的预测结果,最终将多个模型融合到一起。(过程很复杂

1.5. 混合法(Blending)

    混合法和堆叠法类似,区别是它仅使用验证集来重新建模并进行预测,模型是一样的,但训练部分使用的数据集有所区别(训练集、验证集、测试集)。

2. 机器学习元算法

    不使用多个算法,一般只使用一个算法,同一个算法创建不同的模型,后期使用投票的方式处理(如使用决策树),每个分类器都是弱分类器,但最终组合后效果比强分类器好。

    分成两大类:

  • Bagging个体学习器相互之间不依赖,同时对样本随机采样并行化生成个体学习器。——对样本随机取样产生多个独立模型,平均所有模型预测值,目的是减小方差(Variance),模型稳定。

  • Boosting的个体学习器之间存在依赖,在前边模型的训练结果生成的模型,必须串行化生成。——拟合前一个模型的误差,主要是减小偏差(Bias),模型准确但稳定性不是很好。

    下图Variance和Bias区别:准和稳

2.1. 抽样技术

    抽样:

  1. 在训练数据集可取回时的抽样(Bagging/Boosting)

  2. 在输入特征上抽样(Random Forest = Bagging + 特征抽样)

2.2. Bagging

    上图中构造One-Level二分类树:χ0.35,χ0.75\chi \le 0.35, \chi \le 0.75两个切割点,一层二元树最终准确率极限:70%。如果使用袋装,在该例子上重复抽样10次,依旧使用χ0.35\chi \le 0.35的切割点。

    十个分类器投票来计算结果,最终根据Sum的结果综合投票计算——都是一层二元树,而投票结果却有二层二元树的能力。这个例子的假设:

  1. 每一层的实例的权重是一样的,各自独立,一视同仁。

  2. 不太容易出现过拟合(Model Overfitting)。

2.3. Random Forest

    随机森林是特别针对决策树的Bagging方法,除了对训练数据上做随机,它还会在算法上做随机,从K个最好的字段中随机挑选特征,并从这些特征中选择最好的:

  1. 训练数据上随机抽样

  2. 特征上随机抽样(比通用Bagging多的一个特点)

Bagging的方法不一定要和随机森林配搭,它允许搭配任何算法,所以Random Forest = Bagging + 特征抽样

2.4. Boosting

    梯度提升决策树(GBDT:Gradient Boosting Decision Tree),集成许多弱(决策树)分类器,以发展最优模型的方法。Boosting是利用迭代找到优化后的模型,一旦碰到数据集非常复杂时,成千上万计算会成为瓶颈,所以有了极限梯度提升(XGBoost:eXtreme Gradient Boosting),之后微软训练了效率更高、准确率更高的LightGBM(Light Gradient Boosting Machine)。

    同样是在训练数据上做手脚,在挑选训练数据时会动态调整每一笔数据被动态抽到的概率,针对难以分类正确的数据提高其抽样概率,它对训练数据提供了一个概率的权重,让某些数据更容易被抽样。——根据上一次的结果调整权重,决定下一次哪些数据必须被抽中

  • 最开始每笔数据权重都是1/N1/N

  • 然后发现某些数据分类错误,于是调整其权重。

权重低不代表不会被抽中。

    参考下图:

    4的概率在后续抽样提高了,而其他正确的分类下的概率降低了。

权重分配后,权重的总和依旧是1.0

    越后面的分类器越重要,从图上可以看到三个分类器最终调整的权重会不一样,Boosting的结果最终是加权的结果,容易产生过拟合,XGBoost全称是Extreme Gradient Boosting,它最大的特点是在于能够自动利用CPU的多线程进行并行,大幅度提高模型运算效率。

    下图是提升法原理

    最终产生的是非线性的结果。

2.5. GBDT

    原理:

  1. 使用训练集和样本真集(标准答案)训练一棵树,使用这个树预测训练集,得到每个样本预测值,使用预测和真实的差异,二者相减得到“残差”。

  2. 然后训练第二棵树,此时使用残差代替真值做标答,两棵树训练完成后,再次得到每个样本的残差。

  3. 然后训练第三棵树,依次类推,监控某个指标来停止训练。

    XGBoost在分布式应用上也有优势,可以直接在YARN和Spark机器学习上使用。

最后更新于

这有帮助吗?