GridSearchCV for multi-label classification for each label separately
我正在使用scikit学习进行多标签分类。我正在使用RandomForestClassifier作为基本估计量。我想使用GridSearchCV为每个标签优化它的参数。目前,我正在通过以下方式进行操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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分数。我想为每个标签分别找到参数。有内置的功能可以做到这一点吗?
做到这一点并不难,尽管它不是内置的,而且我不确定我理解你为什么要这么做。
像这样简单地预处理您的数据:
1 2 3 4 5 6 7 | 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曲线和/或信息性)。