[英]how to score precision, recall and f1-score in a multi-class dataset using cross-validate?
[英]Cross-validate precision, recall and f1 together with sklearn
有沒有簡單的方法來交叉驗證分類器並立即計算精度和召回率? 目前我使用該功能
cross_validation.cross_val_score(classifier, designMatrix, classes, cv=5, scoring="precision")
但是它只計算一個指標,所以我必須調用它 2 次來計算精度和召回率。 對於大型 ML 模型,計算時間會不必要地延長 2 倍。 有沒有更好的內置選項,還是我必須自己實現交叉驗證? 謝謝。
我不確定當前的情況(這個功能已經討論過了),但你總是可以擺脫以下 - 糟糕 - hack
from sklearn.metrics import recall_score, precision_score
from sklearn.metrics.scorer import make_scorer
recall_accumulator = []
def score_func(y_true, y_pred, **kwargs):
recall_accumulator.append(recall_score(y_true, y_pred, **kwargs))
return precision_score(y_true, y_pred, **kwargs)
scorer = make_scorer(score_func)
然后在交叉驗證中使用scoring=scorer
。 您應該在recall_accumulator
數組中找到召回值。 不過要注意,這個數組是全局的,所以請確保不要以無法解釋結果的方式寫入它。
當cross_val_score()
的參數n_job設置為 1 時, eickenberg 的答案有效。為了支持並行計算( n_jobs > 1),必須使用共享列表而不是全局列表。 這可以在多處理模塊的Manager類的幫助下完成。
from sklearn.metrics import precision_recall_fscore_support
from sklearn.metrics.scorer import make_scorer
from multiprocessing import Manager
recall_accumulator = Manager().list()
def score_func(y_true, y_pred, **kwargs):
recall_accumulator.append(precision_recall_fscore_support(y_true, y_pred))
return 0
scorer = make_scorer(score_func)
然后每個折疊的結果將存儲在recall_accumulator
中。
我也搜索過同樣的問題,所以我把它留給下一個人。
您可以使用cross_validate
。 它可以在scoring
參數中有多個指標名稱。
scores = cross_validate(model, X, y, scoring=('precision','recall','f1'), cv=5)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.