【发布时间】:2018-09-11 05:36:36
【问题描述】:
我在 Tensorflow 中创建了一个二进制分类器,它将输出一个包含预测的生成器对象。我从对象中提取预测(例如 [0.98, 0.02])到一个列表中,然后将其转换为一个 numpy 数组。我有这些预测的相应标签数组。使用这两个数组,我相信我应该能够通过以下方式绘制 roc 曲线:
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve
fpr, tpr, thr = roc_curve(labels, predictions[:,1])
plt.plot(fpr, tpr)
plt.show()
print(fpr)
print(tpr)
print(thr)
其中 predictions[:,1] 给出正预测分数。但是,运行此代码只会导致一条直线,并且每个 fpr、tpr 和 thr 只有三个值: Flat line roc plot and limited function outputs.
关于为什么会发生这种情况,我唯一的理论是因为我的分类器太确定它的预测。许多(如果不是全部)正预测分数是 1.0,或者非常接近于零:
[[9.9999976e-01 2.8635742e-07]
[3.3693312e-11 1.0000000e+00]
[1.0000000e+00 9.8642090e-09]
...
[1.0106111e-15 1.0000000e+00]
[1.0000000e+00 1.0030269e-09]
[8.6156778e-15 1.0000000e+00]]
根据包括this stackoverflow 线程和this stackoverflow 线程在内的一些消息来源,我的预测的极端值可能会为 roc_curve() 造成问题。
我的直觉正确吗?如果是这样,我可以做些什么来绘制我的 roc_curve?
我已尝试包含我认为与此问题相关的所有信息,但如果您想了解有关我的程序的更多信息,请询问。
【问题讨论】:
标签: python-3.x numpy tensorflow scikit-learn roc