减少 n_estimators 是否会提高 AdaBoost 的准确性?

数据挖掘 分类 助推 adaboost
2022-03-07 16:48:45

我正在探索 sklearn 中的 AdaBoost 分类器。这是数据集的图。(X,Y 是预测列,颜色是标签)

在此处输入图像描述

正如你所看到的,两边正好有 16 个点很容易被错误分类。为了检查性能如何随着 n_estimators 的增加而增加,我使用了这段代码

for i in range(1,21):
    clf = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2),
            n_estimators=i,algorithm='SAMME')
    clf.fit(X_df,y)
    y_pred = clf.predict(X_df)

    from sklearn.metrics import confusion_matrix as CM
    #CM(y_pred,y_pred1)
    #CM(y,y_pred1)
    print(i,CM(y,y_pred))

直到 n_estimators = 13,所有 32 个点都未分类。混淆矩阵是

[[84 16]
 [16 84]]

(除了 n_estimators=8。这里所有的红点都被正确分类了)

[[100 0]
 [16 84]]

从 13 日起,它开始以一种奇怪的方式翻转。混淆矩阵是按顺序给出的。

[[84 16] | [[ 84  16] | [[84 16] | [[ 84  16] | [[ 84  16] | [[100   0] | [[100   0] | [[84 16]
[16 84]] | [  0 100]] | [16 84]] | [  0 100]] | [  0 100]] | [ 16  84]] | [  0 100]] | [16 84]]

显然 n_estimators=19 比 n_estimators = 20 提供更好的性能。

有人可以解释发生了什么以及导致这种行为的原因吗?

1个回答

简而言之,AdaBoost 的工作方式是在后续迭代中进行训练,然后测量所有可用弱分类器的误差。在随后的每次迭代中,不正确合格观察的“有效性”都会增加,从而使分类器更加关注它们。因此可以在每次迭代后(13 次后)显示混淆矩阵。如果n_estimators=19看起来你有完美的拟合,所以对于更大的n_estimators模型开始过度拟合,这会导致更差的性能。在您的情况下,请阅读有关提前停止的信息。该技术可帮助您找到n_estimators的最佳价值。

https://scikit-learn.org/stable/auto_examples/ensemble/plot_gradient_boosting_early_stopping.html