Sklearn分类度量AUC返回值



我正在使用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

为什么aucroc_auc_score正常工作的位置不起作用。我俩都一样吗?我在这里缺少什么?

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

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

auc

使用梯形规则在曲线(AUC)下进行计算区域。这是一个通用函数,曲线上给定点。

roc_auc_score

从预测分数的接收器操作特征曲线(ROC AUC)下的计算区域。

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

  • 如下所示: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,您需要对输入数组进行排序

相关内容

  • 没有找到相关文章