Machine learning 错误与树数的Boosting(集成学习)图显示了不正确的趋势

Machine learning 错误与树数的Boosting(集成学习)图显示了不正确的趋势,machine-learning,scikit-learn,decision-tree,ensemble-learning,boosting,Machine Learning,Scikit Learn,Decision Tree,Ensemble Learning,Boosting,我正在标准数据集(鲍鱼)上运行boosting,同时使用SAMME和SAMMME.R boosting算法和我获得的图并不是我所期望的。这是一个使用监督学习的多类分类问题 这是图表 我希望得到一个误差随树数增加而减少的图,但这里的误差似乎增加或保持不变。 这是这个图的代码 bdt_real=AdaBoostClassifier( DecisionTreeClassifier(最大深度=2), n_估计值=600, 学习率=1) 有没有人有一些有效的指针,来说明这种错误随着树的数量而增加的趋势的

我正在标准数据集(鲍鱼)上运行boosting,同时使用SAMME和SAMMME.R boosting算法和我获得的图并不是我所期望的。这是一个使用监督学习的多类分类问题

这是图表

我希望得到一个误差随树数增加而减少的图,但这里的误差似乎增加或保持不变。 这是这个图的代码

bdt_real=AdaBoostClassifier( DecisionTreeClassifier(最大深度=2), n_估计值=600, 学习率=1)


有没有人有一些有效的指针,来说明这种错误随着树的数量而增加的趋势的原因?我确实认为这可能意味着我已经过度适应了模型。但看起来根本没有减少错误。对于过度拟合,我希望先减小误差,然后增大误差。

请您将这两个图的颜色不同好吗?数据集中有多少类/标签?你能用RandomForest替换Adaboost并告诉我们接下来会发生什么吗?-这将确保代码的其他部分没有错误,问题当然是Adaboost
bdt_discrete = AdaBoostClassifier(
    DecisionTreeClassifier(max_depth=2),
    n_estimators=600,
    learning_rate=1.5,
    algorithm="SAMME")

bdt_real.fit(X_train, y_train)
bdt_discrete.fit(X_train, y_train)

real_test_errors = []
discrete_test_errors = []

for real_test_predict, discrete_train_predict in zip(
        bdt_real.staged_predict(X_test), bdt_discrete.staged_predict(X_test)):
    real_test_errors.append(
        1. - accuracy_score(real_test_predict, y_test))
    discrete_test_errors.append(
        1. - accuracy_score(discrete_train_predict, y_test))

n_trees_discrete = len(bdt_discrete)
n_trees_real = len(bdt_real)

# Boosting might terminate early, but the following arrays are always
# n_estimators long. We crop them to the actual number of trees here:
discrete_estimator_errors = bdt_discrete.estimator_errors_[:n_trees_discrete]
real_estimator_errors = bdt_real.estimator_errors_[:n_trees_real]
discrete_estimator_weights = bdt_discrete.estimator_weights_[:n_trees_discrete]

# print discrete_test_errors
# print real_test_errors
plt.figure(figsize=(15, 5))

plt.subplot(131)
plt.plot(range(1, n_trees_discrete + 1),
         discrete_test_errors, c='black', label='SAMME')
plt.plot(range(1, n_trees_real + 1),
         real_test_errors, c='black',
         linestyle='dashed', label='SAMME.R')
plt.legend()
# plt.ylim(0.0, 1.0)
plt.ylabel('Test Error')
plt.xlabel('Number of Trees')