【发布时间】:2022-01-17 06:49:27
【问题描述】:
我试图清楚地了解标题中术语的计算内容。 https://scikit-learn.org/stable/modules/model_evaluation.html#roc-metrics 的文档说
“接收器操作特征 (ROC),或简称 ROC 曲线,是一个图形图,它说明了二元分类器系统在其区分阈值变化时的性能。它是通过绘制真阳性的分数而创建的在不同的阈值设置下,阳性(TPR = 真阳性率)与阴性中假阳性的比例(FPR = 假阳性率)。”
这是我根据我使用 keras 所做的一些预测创建的一些简单代码。
from sklearn import metrics
test1 = '0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0'
pred1 = '0.04172871 0.01611879 0.01073375 0.03344169 0.04172871 0.04172871\
0.00430162 0.04172871 0.04172871 0.04172871 0.07977659 0.905772\
0.9396076 0.03344169 0.04172871 0.09125287 0.02964183 0.0641269\
0.04172871 0.04172871 0.04172871 0.0641269 0.04172871 0.04172871\
0.9919831 0.04172871 0.01611879 0.04172871 0.37865442 0.00240888'
test = np.array([int(i) for i in test1.split()])
pred =np.array([float(i) for i in pred1.split()])
print(type(test))
print(type(pred))
fpr, tpr, thresholds = metrics.roc_curve(test, pred)
print('false pos rate')
print(fpr)
print()
print('true pos rate')
print(tpr)
print()
print('thresholds')
print(thresholds)
我可以看到它是如何选择阈值的(在本例中为 10 个值 - 最低 pred,最高 pred+1),但为什么在本例中为 10 个阈值 - 为什么不是其他数字? 我还希望能够遵循代数如何使用阈值获取 fpr 和 tpr 值。答案可能在我上面给出的文档句子中,但我还没有弄清楚费率计算的工作原理。
这里分别是阈值、fp 率和 tp 率
[1.9919831 0.9919831 0.37865442 0.07977659 0.0641269 0.04172871 0.03344169 0.02964183 0.01611879 0.00240888]
[0. 0. 0. 0.07692308 0.15384615 0.69230769 0.76923077 0.80769231 0.88461538 1.]
[0. 0.25 1. 1. 1. 1. 1. 1. 1. 1. ]
【问题讨论】:
-
请使用问题编辑器上方的代码格式化按钮 (
{}) 将您的代码格式化为代码,并从中删除所有多余的空行。通常,在 Python 中,包含two; separate; statements的行是不好的风格(它们甚至在 Matlab 中,老实说!)。您发布的代码对于理解毫无用处,因为缩进在 Python 语法中很重要,并且被默认文本格式吃掉了。请修复您的代码!
标签: scikit-learn