机器学习中的 Boosting | Boosting 和 AdaBoost
简介
Boosting 是一类集成建模算法,我们利用几个弱模型构建一个强模型。在 Boosting 中,所有分类器都串联存在。首先,在实际训练数据上训练单个模型。然后构建第二个分类器,该分类器在第一个模型产生的错误上进行训练,并尝试纠正前一个模型产生的错误。这个过程不断重复,新的模型不断添加,直到没有错误,对训练数据的预测准确,或者我们已达到要添加的模型的最大阈值。
Boosting 技术
Boosting 技术减少了模型中的偏差。Boosting 算法可能会面临过度拟合问题。为了解决过度拟合问题,超参数调整在 boosting 中至关重要。
Boosting 的示例有 AdaBoost、XGBoost 和 CatBoost。
Boosting 方法有什么优势?
Boosting 可以帮助提高准确性,因为许多弱学习者的能力结合在一起可以产生更好的模型。在回归中,每个弱学习器的准确率都会被平均,并在案例分类中进行多数投票。
Boosting 可以防止过度拟合,因为权重会不断调整以最小化错误。
Boosting 可以实现更高的可解释性,因为该过程被划分为多个决策过程。
在本文中,我们将详细介绍 AdaBoost 增强技术。
AdaBoost 集成技术
AdaBoost 集成方法也称为自适应增强。此方法尝试纠正前一个模型产生的错误。在每个步骤中,它都会尝试更多地处理前一个模型中存在的欠拟合训练数据点。
一系列弱学习器在差分加权训练数据上进行训练。首先,对初始训练数据进行预测,并为每个观察结果赋予相同的权重。在第一个学习器拟合完成后,它会为预测错误的观察结果赋予更高的权重。这是一个迭代过程,并持续添加学习器,直到达到最佳准确度。
AdaBoost 通常用于决策树和分类问题。但它也可以用于回归。
如果我们研究一个使用 AdaBoost 算法的决策树示例,首先在初始训练数据上训练决策树。在拟合过程中被错误分类的点的权重会增加。然后添加第二个决策树分类器并采用更新后的权重。这是一个迭代过程,并不断重复。我们在这里可以看到第二个模型增加了前一个模型的权重。AdaBoost 顺序添加学习器,以产生更好的结果。
这种算法的缺点是它不能并行化。
AdaBoost 的工作步骤
为每个观察分配相同的权重
在数据的初始子集上,拟合模型。
现在对整个数据进行预测。
预测值与实际值的偏差会产生误差。
在此步骤中,在训练下一个模型时,将更高的权重分配给具有更高误差的错误分类点。
此过程不断重复,直到错误值不变或达到模型的阈值。
如何最好地为 AdaBoost 准备数据?
训练数据的质量应该丰富,因为 AdaBoost 试图纠正错误分类。
应从训练数据中删除异常值,否则算法可能会尝试纠正不切实际的错误。
训练数据应避免不必要的噪音,因为这些噪音可能会影响整体数据质量。
示例
from sklearn.datasets import make_classification from sklearn.ensemble import AdaBoostClassifier train_X, train_y = make_classification(n_samples=2000, n_features=30, n_informative=25, n_redundant=5) clf = AdaBoostClassifier() clf.fit(train_X, train_y) test_rowdata = [[-2.56789,1.9012436,0.0490456,-0.945678,-3.545673,1.945555,-7.746789,-2.4566667,-1.845677896,-1.6778994,2.336788043,-4.30 5666617,0.466641,-1.2866634, -10.6777077,-0.766663,-3.5556621,2.045456,0.055673,0.94545456,0.5677,-1.4567,4.3333,3.89898,1.56565,-0.56565,-0.45454,4.33535,6.34343,-4.42424]] y_hat = clf.predict(test_rowdata) print('Class prediction %d' % y_hat[0])
输出
Class prediction 0
结论
Boosting 是一种使用多个弱学习器来提高最终准确率并产生更好结果的方法。Boosting 在一定程度上有助于解决模型中的偏差,还可以防止过度拟合。AdaBoost 集成是一种主要侧重于应用于错误分类点的加权技术的 Boosting 技术,然后在迭代过程中对其进行改进。