sklearn 分类度量 auc 返回 ValueError
Posted
技术标签:
【中文标题】sklearn 分类度量 auc 返回 ValueError【英文标题】:sklearn classification metric auc return ValueError 【发布时间】:2019-07-25 13:55:08 【问题描述】:我正在使用 KNN 构建一个二分类模型
我试图用
计算auc_scorefrom 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)。
这意味着auc
比roc_auc_score
更通用,尽管您可以从auc
获得相同的roc_auc_curve
值。因此,auc
的输入参数是指定曲线的x
和y
坐标,您的错误来自于必要输入类型的差异!此外,x
和 y
必须按升序或降序排列。
【讨论】:
为什么我在使用 auc 函数时会收到 ValueError? 我能知道你所说的x和y坐标是什么意思吗?您是指实际值和预测值吗? @user214x
和 y
要计算其 auc
的曲线的坐标。它们必须按升序或降序排列。【参考方案2】:
这里指出:What does AUC stand for and what is it?
对于二进制分类,您需要使用度量 ROC AUC 而不是面积 在曲线下。AUC 大部分时间用于表示 AUROC,这是一种不好的做法,因为正如 Marc Claesen 指出的那样,AUC 是模棱两可的(可能是任何曲线),而 AUROC 不是。
至于为什么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 阈值
如何在 sklearn 中获取用于二进制分类的 roc auc
使用 sklearn 的 roc_auc_score 进行 OneVsOne 多分类?
sklearn.metrics中的评估方法介绍(accuracy_score, recall_score, roc_curve, roc_auc_score, confusion_matrix,cla