python - 是否可以将 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_)
解决方案
您错过了关闭括号之一。
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 包装器。
推荐阅读
- apache - 使用 Tomcat 配置带有 HTTPS 反向代理的 Bitbucket 服务器的问题
- javascript - 聚合物`
`: 哪一行代码停止将同一自定义样式模板模块的多个导入附加到 DOM? - python - 如何从数组中删除字符并计算出现次数到 CSV 文件
- node.js - 在无服务器(nodejs 8)中调用 lambda 的正确方法
- angular - 角度中的类或函数实用程序
- python-2.7 - 从文件中读取行,在每行中添加 String + 换行符并写入目标文件
- c# - 来自 RefCount() 的 Observable 不会停止发布
- sql - 在联结表中,如果我需要一个单一的唯一标识符和一个单独的唯一复合标识符,哪个应该是主键?
- javascript - 使用反应原生拖动移动的 Animated.Image
- python-3.x - await 似乎阻止了 asycio.Future