GridSearchCV 分别对每个标签进行多标签分类
GridSearchCV for multi-label classification for each label separately
我正在使用 scikit learn 进行多标签分类。我使用 RandomForestClassifier 作为基础估计器。我想使用 GridSearchCV 为每个标签优化它的参数。目前我是通过以下方式进行的:
from sklearn.ensemble import RandomForestClassifier
from sklearn.multiclass import OneVsRestClassifier
from sklearn.grid_search import GridSearchCV
parameters = {
"estimator__n_estimators": [5, 50, 200],
"estimator__max_depth" : [None, 10,20],
"estimator__min_samples_split" : [2, 5, 10],
}
model_to_tune = OneVsRestClassifier(RandomForestClassifier(random_state=0,class_weight='auto'))
model_tuned = GridSearchCV(model_to_tune, param_grid=params, scoring='f1',n_jobs=2)
print model_tuned.best_params_
{'estimator__min_samples_split': 10, 'estimator__max_depth': None, 'estimator__n_estimators': 200}
考虑到所有标签,这些是给出最佳 f1 分数的参数。我想分别为每个标签找到参数。有没有内置函数可以做到这一点?
这并不难,尽管它不是内置的,而且我不确定我是否理解您想要这样做的原因。
像这样简单地预处理您的数据:
for a_class in list_of_unique_classes:
y_this_class = (y_all_class==a_class)
model_to_tune = RandomForestClassifier(random_state=0,class_weight='auto')
model_tuned = GridSearchCV(model_to_tune, param_grid=params, scoring='f1',n_jobs=2)
model_tuned.fit( X, y_this_class )
# Save the best parameters for this class
(另外,请注意 f1 分数,它不能很好地描述偏斜数据集的分类器的性能。您想使用 ROC 曲线 and/or informedness)。
我正在使用 scikit learn 进行多标签分类。我使用 RandomForestClassifier 作为基础估计器。我想使用 GridSearchCV 为每个标签优化它的参数。目前我是通过以下方式进行的:
from sklearn.ensemble import RandomForestClassifier
from sklearn.multiclass import OneVsRestClassifier
from sklearn.grid_search import GridSearchCV
parameters = {
"estimator__n_estimators": [5, 50, 200],
"estimator__max_depth" : [None, 10,20],
"estimator__min_samples_split" : [2, 5, 10],
}
model_to_tune = OneVsRestClassifier(RandomForestClassifier(random_state=0,class_weight='auto'))
model_tuned = GridSearchCV(model_to_tune, param_grid=params, scoring='f1',n_jobs=2)
print model_tuned.best_params_
{'estimator__min_samples_split': 10, 'estimator__max_depth': None, 'estimator__n_estimators': 200}
考虑到所有标签,这些是给出最佳 f1 分数的参数。我想分别为每个标签找到参数。有没有内置函数可以做到这一点?
这并不难,尽管它不是内置的,而且我不确定我是否理解您想要这样做的原因。
像这样简单地预处理您的数据:
for a_class in list_of_unique_classes:
y_this_class = (y_all_class==a_class)
model_to_tune = RandomForestClassifier(random_state=0,class_weight='auto')
model_tuned = GridSearchCV(model_to_tune, param_grid=params, scoring='f1',n_jobs=2)
model_tuned.fit( X, y_this_class )
# Save the best parameters for this class
(另外,请注意 f1 分数,它不能很好地描述偏斜数据集的分类器的性能。您想使用 ROC 曲线 and/or informedness)。