如何对多标签分类问题执行网格搜索?
How to perform Grid Search on a multi-label classification problem?
我正在学习 Scikit-Learn,我正在尝试对多标签分类问题执行网格搜索。这是我写的:
from sklearn.model_selection import GridSearchCV
param_grid = [
{'randomforestclassifier__n_estimators': [3, 10, 30], 'randomforestclassifier__max_features': [2, 4, 5, 8]},
{'randomforestclassifier__bootstrap': [False], 'randomforestclassifier__n_estimators': [3, 10], 'randomforestclassifier__max_features': [2, 3, 4]}
]
rf_classifier = OneVsRestClassifier(
make_pipeline(RandomForestClassifier(random_state=42))
)
grid_search = GridSearchCV(rf_classifier, param_grid=param_grid, cv=5, scoring = 'f1_micro')
grid_search.fit(X_train_prepared, y_train)
然而,当我 运行 它时,我得到以下错误:
ValueError: Invalid parameter randomforestclassifier for estimator
OneVsRestClassifier(estimator=Pipeline(steps=[('randomforestclassifier',
RandomForestClassifier(random_state=42))])). Check the list of available parameters
with `estimator.get_params().keys()`.
我也尝试 运行 grid_search.estimator.get_params().keys()
命令,但我只得到一个参数列表,其中包含我编写的参数,因此我不确定我应该做什么。
您能否建议问题所在以及我如何才能 运行 正确地进行网格搜索?
您可以像在 rf_classifier
是一个 Pipeline
对象时那样定义 param_grid
。引用 Pipeline 的文档
The purpose of the pipeline is to assemble several steps that can be cross-validated together while setting different parameters. For this, it enables setting parameters of the various steps using their names and the parameter name separated by a '__'.
在您的情况下,rf_classifier
是 OneVsRestClassifier
实例。因此,在为 RFC 设置参数之前,您需要能够访问管道实例,您可以通过 OneVsRestClassifier
estimator
的参数进行访问,如下所示:
param_grid = [
{'estimator__randomforestclassifier__n_estimators': [3, 10, 30],
'estimator__randomforestclassifier__max_features': [2, 4, 5, 8]
},
{'estimator__randomforestclassifier__bootstrap': [False],
'estimator__randomforestclassifier__n_estimators': [3, 10],
'estimator__randomforestclassifier__max_features': [2, 3, 4]
}
]
我正在学习 Scikit-Learn,我正在尝试对多标签分类问题执行网格搜索。这是我写的:
from sklearn.model_selection import GridSearchCV
param_grid = [
{'randomforestclassifier__n_estimators': [3, 10, 30], 'randomforestclassifier__max_features': [2, 4, 5, 8]},
{'randomforestclassifier__bootstrap': [False], 'randomforestclassifier__n_estimators': [3, 10], 'randomforestclassifier__max_features': [2, 3, 4]}
]
rf_classifier = OneVsRestClassifier(
make_pipeline(RandomForestClassifier(random_state=42))
)
grid_search = GridSearchCV(rf_classifier, param_grid=param_grid, cv=5, scoring = 'f1_micro')
grid_search.fit(X_train_prepared, y_train)
然而,当我 运行 它时,我得到以下错误:
ValueError: Invalid parameter randomforestclassifier for estimator
OneVsRestClassifier(estimator=Pipeline(steps=[('randomforestclassifier',
RandomForestClassifier(random_state=42))])). Check the list of available parameters
with `estimator.get_params().keys()`.
我也尝试 运行 grid_search.estimator.get_params().keys()
命令,但我只得到一个参数列表,其中包含我编写的参数,因此我不确定我应该做什么。
您能否建议问题所在以及我如何才能 运行 正确地进行网格搜索?
您可以像在 rf_classifier
是一个 Pipeline
对象时那样定义 param_grid
。引用 Pipeline 的文档
The purpose of the pipeline is to assemble several steps that can be cross-validated together while setting different parameters. For this, it enables setting parameters of the various steps using their names and the parameter name separated by a '__'.
在您的情况下,rf_classifier
是 OneVsRestClassifier
实例。因此,在为 RFC 设置参数之前,您需要能够访问管道实例,您可以通过 OneVsRestClassifier
estimator
的参数进行访问,如下所示:
param_grid = [
{'estimator__randomforestclassifier__n_estimators': [3, 10, 30],
'estimator__randomforestclassifier__max_features': [2, 4, 5, 8]
},
{'estimator__randomforestclassifier__bootstrap': [False],
'estimator__randomforestclassifier__n_estimators': [3, 10],
'estimator__randomforestclassifier__max_features': [2, 3, 4]
}
]