【发布时间】:2019-03-10 20:46:27
【问题描述】:
使用此代码:
from sklearn import metrics
import numpy as np
import matplotlib.pyplot as plt
y_true = [1,0,0]
y_predict = [.6,.1,.1]
fpr, tpr, thresholds = metrics.roc_curve(y_true, y_predict , pos_label=1)
print(fpr)
print(tpr)
print(thresholds)
# Print ROC curve
plt.plot(fpr,tpr)
plt.show()
y_true = [1,0,0]
y_predict = [.6,.1,.6]
fpr, tpr, thresholds = metrics.roc_curve(y_true, y_predict , pos_label=1)
print(fpr)
print(tpr)
print(thresholds)
# Print ROC curve
plt.plot(fpr,tpr)
plt.show()
绘制了以下 roc 曲线:
scikit learn 设置了阈值,但我想设置自定义阈值。
例如,对于值:
y_true = [1,0,0]
y_predict = [.6,.1,.6]
返回以下阈值:
[1.6 0.6 0.1]
为什么 ROC 曲线中不存在值 1.6?在这种情况下,阈值 1.6 是否多余,因为概率范围为 0-1 ?是否可以设置自定义阈值:.3,.5,.7 以检查分类器在这种情况下的表现如何?
更新:
来自https://sachinkalsi.github.io/blog/category/ml/2018/08/20/top-8-performance-metrics-one-should-know.html#receiver-operating-characteristic-curve-roc 我使用了相同的 x 和预测值:
from sklearn import metrics
import numpy as np
import matplotlib.pyplot as plt
y_true = [1,1,1,0]
y_predict = [.94,.87,.83,.80]
fpr, tpr, thresholds = metrics.roc_curve(y_true, y_predict , pos_label=1)
print('false positive rate:', fpr)
print('true positive rate:', tpr)
print('thresholds:', thresholds)
# Print ROC curve
plt.plot(fpr,tpr)
plt.show()
产生这个情节:
情节与博客中引用的情节不同,阈值也不同:
此外,使用 scikit metrics.roc_curve 实现返回的阈值是:thresholds: [0.94 0.83 0.8 ]。 scikit 是否应该返回与使用相同点相似的 roc 曲线?我应该自己实现 roc 曲线,而不是依赖 scikit 实现,因为结果不同?
【问题讨论】:
标签: python machine-learning data-science roc