Как сделать перекрестную проверку для данных мультикласса?
Я смог использовать следующий метод для перекрестной проверки двоичных данных, но он не работает для данных мультикласса:
> cross_validation.cross_val_score(alg, X, y, cv=cv_folds, scoring='roc_auc')
/home/ubuntu/anaconda3/lib/python3.6/site-packages/sklearn/metrics/scorer.py in __call__(self, clf, X, y, sample_weight)
169 y_type = type_of_target(y)
170 if y_type not in ("binary", "multilabel-indicator"):
--> 171 raise ValueError("{0} format is not supported".format(y_type))
172
173 if is_regressor(clf):
ValueError: multiclass format is not supported
> y.head()
0 10
1 6
2 12
3 6
4 10
Name: rank, dtype: int64
> type(y)
pandas.core.series.Series
Я также пытался изменить roc_auc
в f1
но все еще с ошибкой:
/home/ubuntu/anaconda3/lib/python3.6/site-packages/sklearn/metrics/classification.py in precision_recall_fscore_support(y_true, y_pred, beta, labels, pos_label, average, warn_for, sample_weight)
1016 else:
1017 raise ValueError("Target is %s but average='binary'. Please "
-> 1018 "choose another average setting." % y_type)
1019 elif pos_label not in (None, 1):
1020 warnings.warn("Note that pos_label (set to %r) is ignored when "
ValueError: Target is multiclass but average='binary'. Please choose another average setting.
Можно ли использовать какой-либо метод для перекрестной проверки данных такого типа?
1 ответ
Как отмечено в комментарии Vivek Kumar, показатели sklearn поддерживают усреднение по нескольким классам как для оценки F1, так и для вычислений ROC, хотя и с некоторыми ограничениями, когда данные не сбалансированы. Таким образом, вы можете вручную построить счетчик с соответствующим average
параметр или использовать один из предопределенных (например: "f1_micro", "f1_macro", "f1_weighted").
Если необходимо несколько баллов, вместо cross_val_score
использование cross_validate
(доступно со склеарна 0.19 в модуле sklearn.model_selection
).