簡體   English   中英

如何在 scikit-learn 的 LogisticRegressionCV 調用中將參數傳遞給評分函數

[英]How to pass argument to scoring function in scikit-learn's LogisticRegressionCV call

問題

我正在嘗試使用scikit-learnLogisticRegressionCVroc_auc_score作為評分指標。

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score

clf = LogisticRegressionCV(scoring=roc_auc_score)

但是當我嘗試擬合模型( clf.fit(X, y) )時,它會引發錯誤。

 ValueError: average has to be one of (None, 'micro', 'macro', 'weighted', 'samples')

這很酷。 很明顯發生了什么:根據其文檔和上面的錯誤,需要使用指定的average參數調用roc_auc_score 所以我試過了。

clf = LogisticRegressionCV(scoring=roc_auc_score(average='weighted'))

但事實證明,不能單獨使用可選參數調用roc_auc_score ,因為這會引發另一個錯誤。

TypeError: roc_auc_score() takes at least 2 arguments (1 given)

問題

關於如何使用roc_auc_score作為LogisticRegressionCV的評分指標的任何想法,我可以為評分函數指定一個參數?

我在scikit-learn的 GitHub 存儲庫中找不到關於此問題的 SO 問題或對此問題的討論,但肯定有人以前遇到過這個問題?

您可以使用make_scorer ,例如

from sklearn.linear_model import LogisticRegressionCV
from sklearn.metrics import roc_auc_score, make_scorer
from sklearn.datasets import make_classification

# some example data
X, y = make_classification()

# little hack to filter out Proba(y==1)
def roc_auc_score_proba(y_true, proba):
    return roc_auc_score(y_true, proba[:, 1])

# define your scorer
auc = make_scorer(roc_auc_score_proba, needs_proba=True)

# define your classifier
clf = LogisticRegressionCV(scoring=auc)

# train
clf.fit(X, y)

# have look at the scores
print clf.scores_

我找到了解決這個問題的方法!

scikit-learn在其metrics模塊中提供了一個make_scorer函數,允許用戶從其本機評分函數之一創建評分對象,並將參數指定為非默認值(有關此函數的更多信息,請參見此處來自scikit-learn文檔)。

因此,我創建了一個指定average參數的評分對象。

roc_auc_weighted = sk.metrics.make_scorer(sk.metrics.roc_auc_score, average='weighted')

然后,我在對LogisticRegressionCV的調用中傳遞了該對象,它運行沒有任何問題!

clf = LogisticRegressionCV(scoring=roc_auc_weighted)

有點晚(4年后)。 但今天你可以使用:

clf = LogisticRegressionCV(scoring='roc_auc')

此外,所有其他評分鍵都可以通過以下方式獲得:

from sklearn.metrics import SCORERS
print(SCORERS.keys())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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