sklearn 分类度量 auc 返回 ValueError

Posted

技术标签:

【中文标题】sklearn 分类度量 auc 返回 ValueError【英文标题】:sklearn classification metric auc return ValueError 【发布时间】:2019-07-25 13:55:08 【问题描述】:

我正在使用 KNN 构建一个二分类模型

我试图用

计算auc_score
from sklearn.metrics import auc

auc(y_test, y_pred)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-183-980dc3c4e3d7> in <module>
----> 1 auc(y_test, y_pred)

~/.local/lib/python3.6/site-packages/sklearn/metrics/ranking.py in auc(x, y, reorder)
    117             else:
    118                 raise ValueError("x is neither increasing nor decreasing "
--> 119                                  ": .".format(x))
    120 
    121     area = direction * np.trapz(y, x)

ValueError: x is neither increasing nor decreasing : [1 1 1 ... 1 1 1].

然后我用roc_auc_score

from sklearn.metrics import roc_auc_score
roc_auc_score(y_test, y_pred)
0.5118361429056588

为什么auc 不起作用,而roc_auc_score 起作用。我虽然他们都是一样的?我在这里错过了什么?

这里y_test 是实际目标值,y_pred 是我的预测值。

【问题讨论】:

【参考方案1】:

它们在实现和含义上是不同的:

auc:

使用梯形规则计算曲线下面积 (AUC)。 这是一个通用函数,给定曲线上的点。

roc_auc_score:

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

这意味着aucroc_auc_score 更通用,尽管您可以从auc 获得相同的roc_auc_curve 值。因此,auc 的输入参数是指定曲线的xy 坐标,您的错误来自于必要输入类型的差异!此外,xy 必须按升序或降序排列。

【讨论】:

为什么我在使用 auc 函数时会收到 ValueError? 我能知道你所说的x和y坐标是什么意思吗?您是指实际值和预测值吗? @user214 xy 要计算其 auc 的曲线的坐标。它们必须按升序或降序排列。【参考方案2】: 这里指出:What does AUC stand for and what is it?

AUC 大部分时间用于表示 AUROC,这是一种不好的做法,因为正如 Marc Claesen 指出的那样,AUC 是模棱两可的(可能是任何曲线),而 AUROC 不是。

对于二进制分类,您需要使用度量 ROC AUC 而不是面积 在曲线下。

至于为什么AUC会出现value错误是因为下面的错误

x 既不增加也不减少:[1 1 1 ... 1 1 1]

auc 度量使用trapezoid rule 来近似曲线下的面积,梯形规则需要定期间隔采样函数,即它需要输入如下函数 y = exp(x^2)

X : 0.0, 0.1, 0.2, 0.3, 0.4

Y : 1.00000 1.01005 1.04081 1.09417 1.17351

因此 X 应该是单调递增或单调递减,而 Y 只是该点的函数输出。

【讨论】:

以上是关于sklearn 分类度量 auc 返回 ValueError的主要内容,如果未能解决你的问题,请参考以下文章

sklearn 分类器 - 最大化 auc 的 predict_proba 阈值

分类器性能度量指标之ROC曲线、AUC值

分类器性能度量指标之ROC曲线AUC值

如何在 sklearn 中获取用于二进制分类的 roc auc

使用 sklearn 的 roc_auc_score 进行 OneVsOne 多分类?

sklearn.metrics中的评估方法介绍(accuracy_score, recall_score, roc_curve, roc_auc_score, confusion_matrix,cla