簡體   English   中英

與 sklearn 一起交叉驗證精度、召回率和 f1

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM