1

我正在嘗試使用sklearn的cross_val_score函數(http://scikit-learn.org/stable/modules/cross_validation.html)進行多標籤分類。如何使用Sklearn的cross_valation(多標籤分類)獲得每個標籤的F1分數

scores = cross_validation.cross_val_score(clf, X_train, y_train, 
     cv = 10, scoring = make_scorer(f1_score, average = None)) 

我希望F1-得分爲每個標籤返回。這種類型的第一個摺疊的作品,但右後給出了一個錯誤:

ValueError: scoring must return a number, got [ 0.55555556 0.81038961 0.82474227 0.67153285 0.76494024 0.89087657 0.93502377 0.11764706 0.81611208] (<type 'numpy.ndarray'>) 

我認爲這引發錯誤,因爲cross_val_score預計要返回一個數字。是否有其他方式可以使用cross_val_score獲得每個標籤的F1分數?

+0

[多分類分類的每個分類的F1分數可能重複](http://stackoverflow.com/questions/37615544/f1-score-per-class-for-multi-class-classification) – ncfirth

回答

0

我通過在/ scikit-learn/sklearn/cross_validation.py中進行了一些更改來解決了該問題。更具體地我評論這些行:

1651  if not isinstance(score, numbers.Number): 
1652   raise ValueError("scoring must return a number, got %s (%s) instead." 
1653       % (str(score), type(score))) 

這消除了檢查的類型是否是一個數字,從而允許numpy的陣列要傳遞。

0

我一般用

from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score, classification_report, confusion_matrix 
metrics.classification_report(y_test, y_predicted2) 

通常這給了我所有的值需要評估我的模型性能。