roc_auc_score#

sklearn.metrics.roc_auc_score(y_true, y_score, *, average='macro', sample_weight=None, max_fpr=None, multi_class='raise', labels=None)[原始碼]#

從預測分數計算接收者操作特徵曲線下的面積 (ROC AUC)。

注意:此實作可用於二元、多類別和多標籤分類,但有一些限制 (請參閱參數)。

使用者指南 中閱讀更多資訊。

參數:
y_true形狀為 (n_samples,) 或 (n_samples, n_classes) 的類陣列

真實標籤或二元標籤指示器。二元和多類別情況預期標籤的形狀為 (n_samples,),而多標籤情況預期二元標籤指示器的形狀為 (n_samples, n_classes)。

y_score形狀為 (n_samples,) 或 (n_samples, n_classes) 的類陣列

目標分數。

  • 在二元分類的情況下,它對應一個形狀為 (n_samples,) 的陣列。可以提供機率估計和未經閾值處理的決策值。機率估計對應於具有較大標籤的類別的機率,即 estimator.classes_[1],因此為 estimator.predict_proba(X, y)[:, 1]。決策值對應於 estimator.decision_function(X, y) 的輸出。請參閱使用者指南以獲取更多資訊;

  • 在多類別分類的情況下,它對應一個形狀為 (n_samples, n_classes) 的陣列,其中包含由 predict_proba 方法提供的機率估計。機率估計必須在所有可能的類別中總和為 1。此外,類別分數的順序必須與提供的 labels 的順序對應,如果沒有提供,則與 y_true 中標籤的數字或字典順序對應。請參閱使用者指南以獲取更多資訊;

  • 在多標籤分類的情況下,它對應一個形狀為 (n_samples, n_classes) 的陣列。機率估計由 predict_proba 方法提供,而未經閾值處理的決策值由 decision_function 方法提供。機率估計對應於分類器每個輸出中具有較大標籤的類別的機率。請參閱使用者指南以獲取更多資訊。

average{‘micro’, ‘macro’, ‘samples’, ‘weighted’} 或 None,預設值=’macro’

如果為 None,則會返回每個類別的分數。否則,這會決定對資料執行的平均類型。注意:多類別 ROC AUC 目前僅處理 'macro' 和 'weighted' 平均。對於多類別目標,average=None 僅在 multi_class='ovr' 時實作,而 average='micro' 僅在 multi_class='ovr' 時實作。

'micro':

透過將標籤指示器矩陣的每個元素視為一個標籤,來全域計算指標。

'macro':

計算每個標籤的指標,並找到它們的未加權平均值。這不會將標籤不平衡納入考量。

'weighted':

計算每個標籤的指標,並找到它們的平均值,該平均值會根據支持度(每個標籤的真實實例數)加權。

'samples':

計算每個實例的指標,並找到它們的平均值。

y_true 為二元時,將會忽略此項。

sample_weight形狀為 (n_samples,) 的類陣列,預設值=None

樣本權重。

max_fpr浮點數 > 0 且 <= 1,預設值=None

如果不是 None,則會返回範圍 [0, max_fpr] 上的標準化部分 AUC [2]。對於多類別情況,max_fpr 應該等於 None1.0,因為目前不支援多類別的 AUC ROC 部分計算。

multi_class{‘raise’, ‘ovr’, ‘ovo’},預設值=’raise’

僅用於多類別目標。決定要使用的組態類型。預設值會引發錯誤,因此必須明確傳遞 'ovr''ovo'

'ovr':

代表「一對其餘」。計算每個類別與其餘類別的 AUC [3] [4]。這會以與多標籤情況相同的方式處理多類別情況。即使 average == 'macro',也對類別不平衡敏感,因為類別不平衡會影響每個「其餘」分組的組成。

'ovo':

代表「一對一」。計算所有可能的類別配對組合的平均 AUC [5]。當 average == 'macro' 時,對類別不平衡不敏感。

labels形狀為 (n_classes,) 的類陣列,預設值=None

僅用於多類別目標。列出索引 y_score 中類別的標籤。如果 None,則會使用 y_true 中標籤的數字或字典順序。

回傳值:
auc浮點數

曲線下面積分數。

另請參閱

average_precision_score

精確率-召回率曲線下的面積。

ROC 曲線

計算接收者操作特徵 (ROC) 曲線。

RocCurveDisplay.from_estimator

根據估算器和一些資料繪製接收者操作特徵 (ROC) 曲線。

RocCurveDisplay.from_predictions

根據真實值和預測值繪製接收者操作特徵 (ROC) 曲線。

注意事項

吉尼係數是二元分類器排序能力的總結指標。它使用 ROC 下的面積表示如下

G = 2 * AUC - 1

其中 G 是吉尼係數,而 AUC 是 ROC-AUC 分數。此正規化將確保隨機猜測會產生預期為 0 的分數,並且上限為 1。

參考文獻

範例

二元分類情況

>>> from sklearn.datasets import load_breast_cancer
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.metrics import roc_auc_score
>>> X, y = load_breast_cancer(return_X_y=True)
>>> clf = LogisticRegression(solver="liblinear", random_state=0).fit(X, y)
>>> roc_auc_score(y, clf.predict_proba(X)[:, 1])
np.float64(0.99...)
>>> roc_auc_score(y, clf.decision_function(X))
np.float64(0.99...)

多類別分類情況

>>> from sklearn.datasets import load_iris
>>> X, y = load_iris(return_X_y=True)
>>> clf = LogisticRegression(solver="liblinear").fit(X, y)
>>> roc_auc_score(y, clf.predict_proba(X), multi_class='ovr')
np.float64(0.99...)

多標籤分類情況

>>> import numpy as np
>>> from sklearn.datasets import make_multilabel_classification
>>> from sklearn.multioutput import MultiOutputClassifier
>>> X, y = make_multilabel_classification(random_state=0)
>>> clf = MultiOutputClassifier(clf).fit(X, y)
>>> # get a list of n_output containing probability arrays of shape
>>> # (n_samples, n_classes)
>>> y_pred = clf.predict_proba(X)
>>> # extract the positive columns for each output
>>> y_pred = np.transpose([pred[:, 1] for pred in y_pred])
>>> roc_auc_score(y, y_pred, average=None)
array([0.82..., 0.86..., 0.94..., 0.85... , 0.94...])
>>> from sklearn.linear_model import RidgeClassifierCV
>>> clf = RidgeClassifierCV().fit(X, y)
>>> roc_auc_score(y, clf.decision_function(X), average=None)
array([0.81..., 0.84... , 0.93..., 0.87..., 0.94...])