机器学习中的Boosting | Boosting和AdaBoost
介绍
Boosting是一类集成建模算法,通过从多个弱模型中构建一个强模型。在Boosting中,所有分类器依次存在。首先,单个模型在实际训练数据上进行训练。然后,构建第二个分类器,该分类器在第一个模型产生的错误上进行训练,并尝试更正先前模型产生的错误。这个过程不断重复,直到没有错误并且对训练数据的预测准确,或者达到了要添加的模型的最大阈值。
Boosting技术
Boosting技术减少了模型的偏差。Boosting算法可能面临过拟合问题。为了解决过拟合问题,超参数调整在Boosting中非常重要。
Boosting的例子包括AdaBoost, XGBoost和CatBoost。
Boosting方法有哪些优势?
- Boosting可以通过将多个弱学习器的力量结合在一起来提高准确性。在回归中,每个弱学习器的准确性取平均值,并在分类时进行多数表决。
-
Boosting可以通过不断调整权重来防止过拟合。
-
Boosting具有更高的解释性,因为该过程被分为多个决策过程。
本文将详细介绍AdaBoost的Boosting技术。
AdaBoost集成技术
AdaBoost集成方法也称为自适应Boosting。该方法尝试纠正前任模型产生的错误。每一步,它都试图处理之前模型中存在的更多或欠拟合的训练数据点。
一系列权重不同的训练数据会训练出一系列弱学习器。首先,在初始训练数据上进行预测,并对每个观察进行相同的权重。在第一个学习器拟合后,它会将更高的权重分配给被错误预测的观察。这是一个迭代过程,不断添加学习器直到达到最佳准确性。
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集成是一种主要关注加权技术的提升技术,应用于被误分类的点,然后在迭代过程中进行改进。