mars.learn.metrics.roc_auc_score#

mars.learn.metrics.roc_auc_score(y_true, y_score, *, average='macro', sample_weight=None, max_fpr=None, multi_class='raise', labels=None, session=None, run_kwargs=None)[来源]#

计算接收者操作特征曲线下面积(ROC AUC) 从预测分数。

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

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

Parameters
  • y_true (数组类似,形状 (n_samples,) 或 (n_samples, n_classes)) – 真实标签或二进制标签指示符。二进制和多类情况期望标签的形状为 (n_samples,),而多标签情况期望的二进制标签指示符的形状为 (n_samples, n_classes)。

  • y_score (数组类似,形状为 (样本数量,) 或 (样本数量, 类的数量)) –

    目标分数。

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

    • 在多类情况下,它对应于形状为 (样本数量, 类的数量)的由predict_proba方法提供的概率估计。概率估计必须 在可能的类别中总和为1。此外,类别分数的顺序必须与labels的顺序相对应(如果提供),或者与y_true中标签的数字或字典顺序相对应。有关更多信息,请参见用户指南;

    • 在多标签情况下,它对应于形状为 (样本数量, 类的数量)的数组。概率估计由predict_proba方法提供,非阈值决策值由decision_function方法提供。概率估计对应于每个输出的分类器的较大标签类别的概率。有关更多信息,请参见用户指南

  • average ({'micro', 'macro', 'samples', 'weighted'} 或者 None, 默认='macro') –

    如果 None, 将返回每个类别的得分。否则,这将确定在数据上执行的平均类型: 注意:多类 ROC AUC 目前仅处理 'macro' 和 'weighted' 平均。

    'micro':

    通过将标签指示矩阵的每个元素视为标签来全局计算指标。

    'macro':

    对每个标签计算指标,并找到它们的非加权均值。 这不考虑标签不平衡。

    'weighted':

    对每个标签计算指标,并找到它们的平均值,加权由支持(每个标签的真实实例数量)决定。

    'samples':

    对每个实例计算指标,并找到它们的平均值。

    y_true 为二元时,将被忽略。

  • sample_weight (类数组,形状 (n_samples,), 默认值=None) – 样本权重。

  • max_fpr (float > 0 and <= 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':

    代表一对多。计算每个类别与其余类别的AUC 3 4。这将多类情况视为与多标签情况相同。即使在 average == 'macro' 时,也对类别不平衡敏感,因为类别不平衡会影响每个“其余”分组的组成。

    'ovo':

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

  • labels (类似数组的形状(n_classes,), 默认=None) – 仅用于多类目标。标签列表,用于索引y_score中的类。如果None,则使用y_true中标签的数值或字典序排列。

Returns

auc(曲线下面积)

Return type

float

参考文献

1

接收者操作特征的维基百科条目

2

分析ROC曲线的一部分。McClish, 1989

3

普罗沃斯特, F., 多明戈斯, P. (2000). 训练良好的 PETs: 改善概率估计树 (第6.2节), CeDER工作论文 #IS-00-04, 纽约大学斯特恩商学院.

4

Fawcett, T. (2006). ROC分析导论。模式识别快报,27(8),861-874。

5

Hand, D.J., Till, R.J. (2001). 对多类别分类问题的ROC曲线下面积的简单推广。机器学习, 45(2), 171-186.

另请参阅

average_precision_score

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

roc_curve

计算接收者操作特征 (ROC) 曲线。

RocCurveDisplay.from_estimator

根据估计器和一些数据绘制接收器操作特性(ROC)曲线。

RocCurveDisplay.from_predictions

根据真实值和预测值绘制接收者操作特征(ROC)曲线。

示例

二元情况:

>>> from sklearn.datasets import load_breast_cancer
>>> from sklearn.linear_model import LogisticRegression
>>> from mars.learn.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)
>>> # 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...])