首页 > 解决方案 > 是否可以将 base_estimator 设置为 Adaboost 的 OneVsRestClassifier(DecisionTreeClassifier())?

问题描述

我正在尝试在具有年龄组和种族组的多类标签的数据集上构建 Adaboost 模型。

因为我打算获得 ROC 和 AUC,所以我将目标变量二值化为年龄组的 yb_train2 和种族组的 yb_train3。然后我在决策树模型中尝试了 one-vs-rest,效果很好。

但现在我不知道如何在网格搜索中指定参数,我尝试了以下代码,并得到一个语法错误:

abc = AdaBoostClassifier(base_estimator= (OneVsRestClassifier(DecisionTreeClassifier()))


param_grid = dict(base_estimator__estimator__criterion = ["gini", "entropy"],
                  base_estimator__estimator__splitter = ["best", "random"],
                  n_estimators = [1, 2],
                  learning_rate =  [0.0001,0.001,0.01,0.1,1]
                  )

grid = GridSearchCV(abc,param_grid)

grid.fit(X_train,yb_train2)
print ('best score: {:}').format(grid.best_score_ ), ('with parameter: {:}').format(grid.best_params_)

grid.fit(X_train,yb_train3)
print ('best score: {:}').format(grid.best_score_ ), ('with parameter:{:}').format(grid.best_params_)

在此处输入图像描述 有人可以在这种情况下提出一些建议吗?谢谢:)

标签: pythonmachine-learningscikit-learngrid-searchadaboost

解决方案


您错过了关闭括号之一。

from sklearn.ensemble import AdaBoostClassifier
from sklearn.multiclass import OneVsRestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV

abc = AdaBoostClassifier(base_estimator= (OneVsRestClassifier(DecisionTreeClassifier())))

param_grid = dict(base_estimator__estimator__criterion = ["gini", "entropy"],
                  base_estimator__estimator__splitter = ["best", "random"],
                  n_estimators = [1, 2],
                  learning_rate =  [0.0001,0.001,0.01,0.1,1]
                  )

grid = GridSearchCV(abc,param_grid)      

这可以帮助您克服语法错误。

但是 DecisionTreeClassifier 默认情况下是多类分类器,因此我建议不要在其上使用 oneVsRestclassifier 包装器。


推荐阅读