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)[source]#

根据预测分数计算受试者工作特征曲线下面积 (ROC AUC)。

注意:此实现可用于二分类、多分类和多标签分类,但存在一些限制(参见参数)。

用户指南中阅读更多内容。

参数:
y_true形状为 (n_samples,) 或 (n_samples, n_classes) 的 array-like

真实标签或二元标签指示器。二分类和多分类情况期望形状为 (n_samples,) 的标签,而多标签情况期望形状为 (n_samples, n_classes) 的二元标签指示器。

y_score形状为 (n_samples,) 或 (n_samples, n_classes) 的 array-like

目标分数。

  • 在二分类情况下,它对应于形状为 (n_samples,) 的数组。可以提供概率估计和非阈值决策值。概率估计对应于**具有较大标签的类的概率**,即 estimator.classes_[1],因此为 estimator.predict_proba(X, y)[:, 1]。决策值对应于 estimator.decision_function(X, y) 的输出。在用户指南中查看更多信息;

  • 在多分类情况下,它对应于形状为 (n_samples, n_classes) 的数组,其中包含由 predict_proba 方法提供的概率估计。概率估计**必须**在所有可能的类中加总为 1。此外,如果提供了 labels,则类分数的顺序必须与 labels 的顺序对应;否则,对应于 y_true 中标签的数值或字典序。在用户指南中查看更多信息;

  • 在多标签情况下,它对应于形状为 (n_samples, n_classes) 的数组。概率估计由 predict_proba 方法提供,非阈值决策值由 decision_function 方法提供。概率估计对应于分类器**每个输出中具有较大标签的类的概率**。在用户指南中查看更多信息。

average{‘micro’, ‘macro’, ‘samples’, ‘weighted’} 或 None, default=’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,) 的 array-like, default=None

样本权重。

max_fprfloat > 0 且 <= 1, default=None

如果不是 None,则返回范围 [0, max_fpr] 内的标准化部分 AUC [2]。对于多分类情况,max_fpr 应等于 None1.0,因为多分类目前不支持 AUC ROC 部分计算。

multi_class{‘raise’, ‘ovr’, ‘ovo’}, default=’raise’

仅用于多分类目标。确定要使用的配置类型。默认值会引发错误,因此必须明确传递 'ovr''ovo'

'ovr':

表示 One-vs-rest(一对多)。计算每个类与其余类之间的 AUC [3] [4]。这以与多标签情况相同的方式处理多分类情况。即使当 average == 'macro' 时,也对类不平衡敏感,因为类不平衡会影响每个“其余”分组的构成。

'ovo':

表示 One-vs-one(一对一)。计算所有可能的类对组合的平均 AUC [5]。当 average == 'macro' 时,对类不平衡不敏感。

labels形状为 (n_classes,) 的 array-like, default=None

仅用于多分类目标。在 y_score 中索引类的标签列表。如果为 None,则使用 y_true 中标签的数值或字典序。

返回:
aucfloat

曲线下面积分数。

另请参阅

average_precision_score

精确率-召回率曲线下面积。

roc_curve

计算受试者工作特征 (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="newton-cholesky", random_state=0).fit(X, y)
>>> roc_auc_score(y, clf.predict_proba(X)[:, 1])
0.99
>>> roc_auc_score(y, clf.decision_function(X))
0.99

多分类情况

>>> from sklearn.datasets import load_iris
>>> X, y = load_iris(return_X_y=True)
>>> clf = LogisticRegression(solver="newton-cholesky").fit(X, y)
>>> roc_auc_score(y, clf.predict_proba(X), multi_class='ovr')
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_score = clf.predict_proba(X)
>>> # extract the positive columns for each output
>>> y_score = np.transpose([score[:, 1] for score in y_score])
>>> roc_auc_score(y, y_score, average=None)
array([0.828, 0.852, 0.94, 0.869, 0.95])
>>> from sklearn.linear_model import RidgeClassifierCV
>>> clf = RidgeClassifierCV().fit(X, y)
>>> roc_auc_score(y, clf.decision_function(X), average=None)
array([0.82, 0.847, 0.93, 0.872, 0.944])