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) 的类似数组对象
目标得分。
在二元情况下,它对应于形状为
(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’} or 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_weightshape 为 (n_samples,) 的 array-like, default=None
样本权重。
- max_fprfloat > 0 and <= 1, default=None
如果不是
None,则返回范围 [0, max_fpr] 内的标准化部分 AUC [2]。对于多类别情况,max_fpr应该等于None或1.0,因为目前不支持多类别的部分 AUC ROC 计算。- multi_class{‘raise’, ‘ovr’, ‘ovo’}, default=’raise’
仅用于多类别目标。确定要使用的配置类型。默认值会引发错误,因此必须明确传递
'ovr'或'ovo'。- labels形状为 (n_classes,) 的类数组对象, 默认为 None
仅用于多类别目标。在
y_score中索引类别的标签列表。如果为None,则使用y_true中标签的数字或词典顺序。
- 返回:
- aucfloat
曲线下面积得分。
另请参阅
average_precision_scorePR 曲线下面积。
roc_curve计算接收者操作特征 (ROC) 曲线。
RocCurveDisplay.from_estimator给定一个估计器和一些数据,绘制接收者操作特征 (ROC) 曲线。
RocCurveDisplay.from_predictions给定真实值和预测值,绘制接收者操作特征 (ROC) 曲线。
注意事项
基尼系数是二元分类器排名能力的总结度量。它使用 ROC 曲线下面积表示如下:
G = 2 * AUC - 1
其中 G 是基尼系数,AUC 是 ROC-AUC 分数。这种归一化将确保随机猜测的期望得分为 0,且上限为 1。
References
[1][3]Provost, F., Domingos, P. (2000). Well-trained PETs: Improving probability estimation trees (Section 6.2), CeDER Working Paper #IS-00-04, Stern School of Business, New York University.
[4]Fawcett, T. (2006). An introduction to ROC analysis. Pattern Recognition Letters, 27(8), 861-874.
[5][6]示例
二元情况
>>> 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])