我正在使用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
是我的预测值。
答案 0 :(得分:2)
它们在实现和手段上有所不同:
auc
:
使用梯形法则计算曲线下的面积(AUC)。 给定曲线上的点,这是一项常规功能。
根据预测得分计算接收器工作特性曲线(ROC AUC)下的面积。
这意味着Promise.resolve().then(()=> {
return new Promise(resolve => {
setTimeout(() => {
console.log('done 1');
resolve();
}, 1000);
});
}).then(() => {
console.log('done 2');
});
比auc
更通用,尽管您可以从roc_auc_score
获得相同的roc_auc_curve
值。因此,auc
的输入参数是指定曲线的auc
和x
坐标,您的错误来自于必需输入类型的不同!另外,y
和x
必须按升序或降序排列。
答案 1 :(得分:1)
AUC大部分时间用于表示AUROC,这是一个不好的做法,因为正如Marc Claesen指出的那样,AUC模棱两可(可以是任何曲线),而AUROC则不是。
至于为什么AUC中发生值错误是由于以下错误导致的
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只是该点上函数的输出。