我正在使用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
是我的预测值。
它们在实现和含义上不同:
auc
:
使用梯形规则在曲线(AUC)下进行计算区域。这是一个通用函数,曲线上给定点。
roc_auc_score
:
从预测分数的接收器操作特征曲线(ROC AUC)下的计算区域。
这意味着auc
比roc_auc_score
更通用,尽管您可以从auc
获得相同的roc_auc_curve
值。因此,auc
的输入参数是指定曲线的x
和y
坐标,您的错误来自必要输入类型的差异!另外,x
和y
必须处于增加或减少的顺序。
- 如下所示:AUC代表什么?
AUC大多数时候都用来表示AUROC,这是一种不良的做法,因为正如马克·克莱森(Marc Claesen)指出的那样,AUC是模棱两可的(可能是任何曲线),而AUROC不是。
- 对于二进制分类,您需要使用公制的ROC AUC而不是区域在曲线下。
至于为什么AUC中发生的值误差是由于以下错误
引起的X既不增加也不减少:[1 1 1 ... 1 1 1]
AUC度量使用梯形规则来近似曲线下的面积和梯形规则,需要定期的间隔采样函数,即需要输入,如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只是该点函数的输出。
简短的答案是:
对于AUC,您需要对输入数组进行排序