如何更好地使用AdaboostClassfier?

我必须解决python中的多类分类问题。

我开始使用合奏,并且从adaboostclassfier开始,但是在进行网格搜索后,我得到了不好的结果。

我所做的是使用经过调整的分类器(在我尝试过的分类器列表中),该分类器向我显示了最佳的基本估计值: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. 为什么使用1个以上的估计量,我无法使用AdaBoostClassfier来提高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,150],'classfier__learning_rate': [0.1,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))
iCMS 回答:如何更好地使用AdaboostClassfier?

通常,采用整体方法将胜过单个预测器。

尤其是,Adaboost将依次适合多个基本分类器。 Adaboost算法为每个分类器修改示例的权重,以便分类器专注于(或“更加关注”)先前分类器的未分类示例。

单个SVC的性能要优于Adaboost SVC。

我的主要建议是对SVC的超参数以及AdaBoostClassifier的超参数进行GridSearch(请参阅以下参考资料,详细了解如何实现:Using GridSearchCV with AdaBoost and DecisionTreeClassifier)。根据数据集的大小,采用许多估计量可能会使数据过拟合。如果您的数据集很小,建议您在GridSearch中尝试1至50之间的多个估计量。

本文链接:https://www.f2er.com/1951031.html

大家都在问