回答

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爲每個標籤,但我不明白你爲什麼會想這樣做。

在您使用交叉驗證的情況下,您可以得到每倍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])])''這將產生n_label([cross_val_score(model,X,y [:,i],cv = 10,scoring ='f1' x 10形陣列 – sgDysregulation