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
應該等於None
或1.0
,因為目前不支援多類別的 AUC ROC 部分計算。- multi_class{‘raise’, ‘ovr’, ‘ovo’},預設值=’raise’
僅用於多類別目標。決定要使用的組態類型。預設值會引發錯誤,因此必須明確傳遞
'ovr'
或'ovo'
。- 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。
參考文獻
[3]Provost, F., Domingos, P. (2000)。訓練有素的 PET:改進機率估計樹(第 6.2 節),CeDER 工作論文 #IS-00-04,紐約大學斯特恩商學院。
範例
二元分類情況
>>> 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...])