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)下的面积。

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

更多信息请参阅 用户指南

Parameters:
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) 的输出。更多信息请参阅 用户指南

  • 在多分类情况下,它对应于 predict_proba 方法提供的形状为 (n_samples, n_classes) 的概率估计数组。概率估计 必须 在可能的类别中求和为 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_fprfloat > 0 且 <= 1, 默认=None

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

multi_class{‘raise’, ‘ovr’, ‘ovo’}, 默认=’raise’

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

'ovr' :

表示一对多。计算每个类别对其余类别的 AUC [3] [4]。这将以与多标签情况相同的方式处理多分类情况。即使 average == 'macro' ,对类别不平衡也很敏感,因为类别不平衡会影响每个 ‘rest’ 组合的组成。

'ovo' :

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

labels形状为 (n_classes,) 的类数组, 默认=None

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

Returns:
aucfloat

曲线下的面积得分。

See also

average_precision_score

精度-召回曲线下的面积。

roc_curve

计算受试者工作特征(ROC)曲线。

RocCurveDisplay.from_estimator

给定估计器和数据绘制受试者工作特征(ROC)曲线。

RocCurveDisplay.from_predictions

给定真实值和预测值绘制受试者工作特征(ROC)曲线。

Notes

基尼系数是二分类器排序能力的总结度量。它使用 ROC 下的面积表示如下:

G = 2 * AUC - 1

其中 G 是基尼系数,AUC 是 ROC-AUC 得分。这种归一化将确保随机猜测的预期得分为 0,并且其上限为 1。

References

Examples

二分类情况:

>>> 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])
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="liblinear").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)
>>> # 获取形状为 (n_samples, n_classes) 的概率数组列表
>>> y_pred = clf.predict_proba(X)
>>> # 提取每个输出的正列
>>> 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...])