机器学习中的提升算法 | 提升和 AdaBoost
介绍
提升是一类集成建模算法,我们从中构建多个弱模型来构建一个强模型。在提升中,所有分类器都串联存在。首先,在实际训练数据上训练单个模型。然后构建第二个分类器,该分类器在第一个模型产生的错误上进行训练,并尝试纠正前一个模型产生的错误。这个过程持续重复,并不断添加新模型,直到没有错误并且训练数据的预测准确,或者我们达到了要添加的模型的最大阈值。
提升技术
提升技术减少了模型中的偏差。提升算法可能会遇到过拟合问题。为了解决过拟合问题,在提升中超参数调整至关重要。
提升的示例包括 AdaBoost、XGBoost 和 CatBoost。
提升方法有哪些优势?
提升可以帮助提高准确性,因为许多弱学习器的能力被组合起来以产生更好的模型。在回归中,每个弱学习器的准确性取平均值,在分类情况下进行多数投票。
提升可以防止过拟合,因为权重会持续调整以最大程度地减少错误。
通过提升可以实现更高的可解释性,因为该过程被细分为多个决策过程。
在本文中,我们将详细了解 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.305666617,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 predicted %d' % y_hat[0])
输出
Class predicted 0
结论
提升是一种使用多个弱学习器来提高最终准确性和产生更好结果的方法。提升在一定程度上帮助解决了模型中的偏差,并且还防止了过拟合。AdaBoost 集成是一种提升技术,主要集中在应用于错误分类点的加权技术上,然后在迭代过程中进行改进。