答えて

3

あなたはscikit学習の分類レポートを使用することができ、あなたは、yとy_predictが

from sklearn.metrics import classification_report 
y = [0, 1, 2, 2, 2] 
y_pred = [1, 0, 2, 2, 1] 
classes = {'Banana':0,'Apple':1,'Orange':2} 
print(classification_report(y, y_pred,target_names=classes.keys())) 

出力また

   precision recall f1-score support 

    Banana  0.00  0.00  0.00   1 
     Apple  0.00  0.00  0.00   1 
    Orange  1.00  0.67  0.80   3 

avg/total  0.60  0.40  0.48   5 

あなたは

print(f1_score(y, y_pred,average=None)) 

使用することができているとし、あなたが買ってあげますリスト内のラベルのスコア

[ 0. 0. 0.8] 

もちろん、あなたはKFolds iteratorを使用することができますし、すべての折り目を通過し、各ラベルのための彼らのF1を得るが、私はあなたがそれをやりたいと思い理由を参照いけません。

クロスバリデーションを使用している場合は、スコアを使用してモデルを評価して最適なものを選択するため、1回のスコアでf1スコアを取得できます。

from sklearn import svm, datasets 
from sklearn.model_selection import cross_val_score 
iris = datasets.load_iris() 
X, y = iris.data, iris.target 
clf = svm.SVC() 
cross_val_score(model, X, y, cv=10, scoring='f1_weighted') 

意志出力10のスコア、回答の折り目あたり1つの

array([ 1.  , 0.93265993, 1.  , 1.  , 1.  , 
     0.93265993, 0.93265993, 1.  , 1.  , 1.  ]) 
+0

おかげの配列次の例を参照。しかし、私が本当に尋ねたのは、マルチラベルデータではなく、マルチラベルデータ(各ラベルのバイナリクラスデータを持つ複数出力(ラベル))です。したがって、クロスバリデーションスコアを決定する入力は、マルチラベルデータセットのX、y(ラベル出力のセット)でなければなりません。 score = cross_val_score(model、X、y、cv = 10、scoring = 'f1_weighted')を使用すると、データセット全体のスコアが返されます。個々のラベルごとにスコアを得る方法はありますか? – user3464608

+0

私が見ることができるのは、yの各列、つまり各ラベルのセットで交差検証を使用することだけです。範囲(y.shape [1])])内のiに対して 'np.vstack([モデル、X、y [:、i]、cv = 10、スコアリング= 'f1')のようにn_label ×10形状のアレイ – sgDysregulation

関連する問題