Я занимаюсь классификацией нескольких ярлыков, используя scikit learn. Я использую RandomForestClassifier в качестве базовой оценки. Я хочу оптимизировать его параметры для каждой метки с помощью GridSearchCV. В настоящее время я делаю это следующим образом: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 балла с учетом всех меток. Я хочу найти параметры отдельно для каждой метки. Есть ли встроенная функция, которая может это сделать?
Multi-label подчеркивает «взаимно включительно», так что наблюдение может быть членом нескольких классов одновременно. Если вы хотите подготовить отдельные классификаторы для каждого ярлыка, то для этого конкретного классификатора каждое наблюдение может быть только членом ОДНОГО класса (один-vs-the-rest), который является «взаимоисключающим». Ваш желаемый подход, по-видимому, противоречит вашим фактическим наблюдениям с несколькими метками, и я не думаю, что для этого в scikit-learn существует реализация. –
@JianxunLi Привет, мне интересно, является ли то, что делает OneVsRestClassifier, просто бинарная релевантность в многозадачной литературе. Если это так, не считая взаимодействия между ярлыками, действительно, это главный недостаток использования бинарной релевантности, поэтому он должен быть таким же, когда вы тренируете отдельные классификаторы «вручную» по сравнению с использованием «OneVsRestClassifier». – Francis