1

私は、バイナリデータの相互検証を行うには、次の方法を使用することができたが、マルチクラスのデータのために働いていないようです:どのようにマルチクラスデータの相互検証を行うには?

> 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 

私もf1roc_aucを変更するが、それでもエラーが発生して試してみました:

/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. 

私はデータのようなタイプのための相互検証を行うために使用することができます任意の方法はありますか?

+0

ROCは、バイナリ分類のためにのみ適しています。別の採点関数を検討するか、またはOne vs Rest法でROCを計算する必要があります。 – sjakw

+1

([こちら] 'average'パラメータをチェックし、[ここ](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html#sklearn.metrics.f1_score)とのhttp:// scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html#sklearn.metrics.roc_auc_score)と適切なものを使用します。 –

答えて

0

としては、データがアンバランスである場合、いくつかの制限があるが、F1 scoreROC computations両方について多クラス平均化をサポートVivek Kumar sklearnメトリックによってコメントで指摘しました。だから、あなたは手動で対応するaverageパラメータで得点王を構築するか、事前に定義されたものの一つを使用することができます(例えば:「f1_micro」、「f1_macro」、「f1_weighted」)。

複数のスコアが必要な場合はcross_val_scoreの代わりにcross_validate(モジュールsklearn.model_selectionのsklearn 0.19以降で利用可能)を使用してください。

関連する問題