【问题标题】:How can I use AdaboostClassfier better?如何更好地使用 Adaboost 分类器?
【发布时间】:2020-11-01 21:13:28
【问题描述】:

我必须在 python 中解决一个多类分类问题。

我开始使用 ensemble,我从 adaboostclassfier 开始,但在 gridsearch 之后我得到了不好的结果。

我所做的是使用调整后的分类器(在我尝试过的分类器列表中),它向我显示了作为基础估计器的最佳分数:SVC()。

然后我对 AdaBoostClassfier 的其他参数进行了网格搜索:

n_estimators: [1,50,100,150]
learning_rate: [0.1,0.4,0.7,1]
algorithm: ['SAMME']

现在我有 3 个问题要问你:

  1. 为什么调整后的 SVC() 显示 f1_macro 分数的 82.5%,而只有 1 个估计器的 AdaBoostClassfier 显示 18.6%?
  2. 为什么我无法使用 AdaBoostClassfier 提高 1 个以上的估算器的 f1_macro 分数?
  3. 提升是否有可能让我的数据集变得更糟,还是我做错了什么?

这是我的代码:

def adaBoost_try(train_x, train_y, test_x, test_y):
base_estimator = svm.SVC(C=60, class_weight=None, decision_function_shape='ovo', kernel='rbf', gamma=0.1, random_state=0)
classfier = AdaBoostClassifier()
pipeline = [
    ('scaler', scaler),
    ('reduce_dim', pca),
    ('classfier', classfier)]
best_params = [{
    'scaler':[scaler_quantile],
    'reduce_dim': [pca],
    'reduce_dim__n_components': [15],
    'classfier__base_estimator': [base_estimator],
    'classfier__n_estimators': [1,50,100,150],
    'classfier__learning_rate': [0.1,0.4,0.7,1],
    'classfier__algorithm': ['SAMME'],
    'classfier__random_state': [0]
}]
pipe = Pipeline(pipeline, memory=cachedir)
my_scoring = 'f1_macro'
n_folds = 5
gscv = GridSearchCV(pipe, param_grid=best_params, scoring=my_scoring, n_jobs=-1, cv=n_folds, refit=True)
gscv.fit(train_x, train_y)
print(gscv.best_params_)
print(gscv.best_score_)
print(gscv.score(test_x,test_y))

【问题讨论】:

    标签: python scikit-learn classification adaboost boosting


    【解决方案1】:

    通常,采用集成方法将优于单个预测器。

    Adaboost 尤其可以按顺序拟合多个基本分类器。 Adaboost 算法为每个分类器修改示例的权重,以便分类器专门处理(或“给予更多关注”)前一个分类器的错误分类示例。

    单个 SVC 的性能会优于 SVC 的 Adaboost,这有点出乎意料。

    我的主要建议是对 SVC 的超参数以及 AdaBoostClassifier 的超参数进行 GridSearch(有关如何实现的详细信息,请查看以下参考:Using GridSearchCV with AdaBoost and DecisionTreeClassifier)。根据数据集的大小,采用许多估计器可能会过度拟合您的数据。如果您有一个小数据集,我建议您在 GridSearch 中尝试 1 到 50 之间的估计量。

    【讨论】:

    • 我添加了我的代码,正如你所看到的,我已经完成了网格搜索,但我仍然得到更差的分数......不寻常的是,即使我只使用带有 1 个估计器的 BaggingClassifier,我的分数也会更差。 ..我不明白为什么...
    猜你喜欢
    • 2016-05-14
    • 2013-03-29
    • 2013-03-10
    • 1970-01-01
    • 2019-10-07
    • 2018-06-30
    • 2021-03-23
    • 1970-01-01
    • 2013-05-20
    相关资源
    最近更新 更多