Boosting集合方法的介绍

178 阅读6分钟

在这篇文章中,我们深入介绍了Boosting的概念,以及不同类型的Boosting算法,Boosting的好处和挑战。

内容表

  1. 集合方法简介

  2. 提升算法

  3. Boosting算法
    4.AdaBoost
    5.梯度提升
    6 . 极端梯度提升算法(XGBoost)

  4. 对基本梯度提升的改进

  5. 提升算法的好处

  6. 提升的挑战

  7. 总结

让我们开始学习提升技术。

集合方法简介

也许在座的各位几乎都熟悉机器学习算法,如K邻居分类器或回归器、线性回归、Ridge等。但是,如果你的模型不够强大,怎么办?这个问题的解决方案之一是Boosting,一种集合算法。

一般来说,团体工作的人比单独工作的人更有可能表现得更好。当任务被分配给一个小组时,这个特定的小组可以用不同的视角来处理这个任务。同样的规则也适用于机器学习模型。我们可以对不同的弱小学习者进行分组,以实现一个强大的、高度准确的模型。

这就是我们所说的 "集合方法",一种将基础估计器结合起来的方法,使单个估计器比单个估计器的精度更高。

有两种类型的集合方法平均法提升法。在这篇文章中,我们将重点讨论提升法。

提升法

Boosting是指将几个弱的学习者串联起来。Boosting方法主要是针对以前的模型出错的训练。提升组合的关键属性是纠正预测错误的想法。这些模型按顺序拟合并加入到集合中,第二个模型试图纠正第一个模型的预测,第三个模型纠正第二个模型,以此类推。

提升算法

提升算法将每个弱学习者结合起来,形成一个强预测规则。为了识别弱规则,有一个基础模型。每当该模型被应用时,它就会使用迭代过程创建新的预测规则。经过一段时间的迭代,它将所有的弱规则结合起来,创建一个单一的预测规则。在Boosting中有两种主要的算法,AdaBoost(自适应Boosting)和梯度Boosting。

1.1.AdaBoost

AdaBoost是自适应提升的意思,是一种作为集合方法的提升方法。Adaboost从尽可能简单地预测原始数据集开始,然后给每个观察值赋予同等的权重。如果使用第一个学习者所做的预测是不正确的,它将更高的重要性分配给不正确的预测语句和一个迭代的过程。它继续增加新的学习者,直到达到模型的极限。
ezgif-1-b46fc7f7d7d5

最常被用作AdaBoost的基础估计器或弱学习器的是Decision Stump

使用Decision Stump的AdaBoost

决策树是一个决策树机器学习模型,但只由一个内部节点组成,它与叶子紧密相连。决策树桩只根据单一输入特征的值进行预测。

decision-stump-example

在Python中的实现

from sklearn.ensemble import AdaBoostClassifier #for classifier
from sklearn.ensemble import AdaBoostRegressor #for regressor

clf = AdaBoostClassifier(n_estimators=100, learning_rate=1)
clf.fit(X, y)
  • 它将使用决策树桩作为它的基础估计器。
  • n_estimator参数用于决定使用多少个弱学习器。
  • 学习率参数控制所有脆弱学习者在最终输出中的贡献。

2.梯度提升法

梯度提升法处理问题的方式有点不同。梯度提升法不是调整数据点的权重,而是关注预测和基础事实之间的差异。梯度提升法以渐进、加法和顺序的方式训练许多模型。虽然AdaBoost模型通过使用高权重的数据点来识别缺点,但梯度提升通过在损失函数中使用梯度来达到同样的效果。

gradient-boost

在Python中的实现

from sklearn.ensemble import GradientBoostingClassifier #for classifier
from sklearn.ensemble import GradientBoostingRegressor #for regressor

clf = GradientBoostingRegressor(n_estimators=100, learning_rate=1)
clf.fit(X, y)
  • n_estimatorlearning_rate参数的作用与AdaBoost相同。

极限梯度提升(XGBoost)

XGBoost是常用的梯度提升的变种之一。它是一个以决策树为弱学习者的集合式机器学习。XGBoost被设计用来提高机器学习模型的性能和速度。XGBoost使用预排序算法和基于直方图的算法来计算最佳分割。基于直方图的算法将一个特征的所有数据点分割成离散的仓,并使用这些仓来寻找直方图的分割值。另外,在XGBoost中,树可以有不同数量的终端节点,用较少的证据计算的树的左边权重被缩减得更厉害。

对基本梯度提升法的改进

梯度提升算法是一种贪婪的算法,它可以迅速地过度拟合训练数据集。为了防止梯度提升算法的过度拟合,我们做了一些改进

  1. 树的约束条件

有一些约束条件可以应用于决策树的构建,如树的数量树的深度节点的数量损失的最小化等。

  1. 加权更新

每棵树对这个总和的贡献可以加权,以减慢算法的学习速度。这种加权被称为缩减或学习率。其效果是,学习速度减慢,反过来需要更多的树被添加到模型中,反过来需要更长的时间来训练,在树的数量和学习率之间提供一个配置权衡。

提升法的好处

  1. Boosting模型可以通过几个超参数选项进行调整,以改善模型。在boosting中,我们不必在拟合前进行数据预处理,因为在scikit-learn这样的boosting库中,它有内置的程序来处理缺失的数据。

  2. 提升算法迭代地结合了多个弱学习者,并根据观察结果进行改进。它可以减少逻辑回归和决策树等模型中通常出现的高偏差

  3. 提升算法只选择对目标有重大影响的特征,因此它可以帮助降低维度,并提高计算效率

提升算法的挑战

  1. 顺序训练很难扩大规模,因为每个估计器都是基于它的前辈建立的,提升算法在计算上是很昂贵的。XGBoost试图解决在其他类型的提升中出现的可扩展性问题。由于大量的参数会影响模型的行为,因此提升算法与Bagging相比可能会更慢。

结论

Boosting是一种集合方法,它将弱的学习者组合成一个强的学习者。它可以超越浅层机器学习模型,如Logistic回归。提升法也适用于各行各业的人工智能项目,包括医疗、IT和金融。

通过OpenGenus的这篇文章,你一定对Boosting有了完整的了解。请欣赏。