maxframe.learn.metrics.roc_auc_score#

maxframe.learn.metrics.roc_auc_score(y_true, y_score, *, average='macro', sample_weight=None, max_fpr=None, multi_class='raise', labels=None, execute=False, session=None, run_kwargs=None)[源代码]#

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

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

更多信息请参阅 用户指南

参数:
  • y_true (array-like of shape (n_samples,) or (n_samples, n_classes)) -- 真实标签或二分类标签指示器。二分类和多分类情况下期望标签的形状为 (n_samples,),而多标签情况下期望二分类标签指示器的形状为 (n_samples, n_classes)。

  • y_score (array-like of shape (n_samples,) or (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'} or None, default='macro') -- 如果为 None,则返回每个类别的得分。否则,此参数确定对数据执行的平均类型:注意:多分类 ROC AUC 目前只支持 'macro' 和 'weighted' 平均方式。'micro':通过将标签指示矩阵中的每个元素视为一个标签来全局计算指标。'macro':为每个标签计算指标,并计算它们的未加权平均值。该方法不考虑标签不平衡。'weighted':为每个标签计算指标,并根据支持度(每个标签的真实实例数)进行加权平均。'samples':为每个实例计算指标,并计算它们的平均值。当 y_true 为二分类时将被忽略。

  • sample_weight (array-like of shape (n_samples,), default=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':表示 One-vs-rest。计算每个类别与其余类别的 AUC [3] [4]。这将以与多标签情况相同的方式处理多分类情况。即使 average == 'macro',对类别不平衡也敏感,因为类别不平衡会影响每个 'rest' 组合的构成。'ovo':表示 One-vs-one。计算所有可能类别对组合的平均 AUC [5]。当 average == 'macro' 时,对类别不平衡不敏感。

  • labels (array-like of shape (n_classes,), default=None) -- 仅用于多类目标。用于索引 y_score 中类别的标签列表。如果为 None,则使用 y_true 中标签的数字或字典序。

返回:

auc

返回类型:

float

引用

参见

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 maxframe.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]).execute()
0.99...
>>> roc_auc_score(y, clf.decision_function(X)).execute()
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').execute()
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).execute()
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).execute()
array([0.81..., 0.84... , 0.93..., 0.87..., 0.94...])