0
我有一個多標籤數據集,我想通過交叉驗證測試確定每個單獨標籤的F分數值。是否有任何示例代碼在sklearn或skmultilearn中實現?它的文檔似乎只爲整個數據集提供了價值。通過多標籤分類中的交叉驗證評估單個標籤的F分數
我有一個多標籤數據集,我想通過交叉驗證測試確定每個單獨標籤的F分數值。是否有任何示例代碼在sklearn或skmultilearn中實現?它的文檔似乎只爲整個數據集提供了價值。通過多標籤分類中的交叉驗證評估單個標籤的F分數
可以使用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. ])
感謝您的回答的陣列。但是我真正要求的是關於多標籤數據(每個標籤具有二進制類數據的多個輸出(標籤))而不是多類數據。因此,確定交叉驗證分數的輸入應該是多標籤數據集的X,y(標籤輸出集合)。使用score = cross_val_score(model,X,y,cv = 10,scoring ='f1_weighted')會返回整個數據集的分數。有沒有辦法獲得每個單獨標籤的評分? – user3464608
我可以看到的唯一方法是在y中的每列上使用交叉驗證,即在每組標籤上。對於我在範圍內(y.shape [1])])''這將產生n_label([cross_val_score(model,X,y [:,i],cv = 10,scoring ='f1' x 10形陣列 – sgDysregulation