问题描述
我从理论上理解了ROC曲线的原理,但是在sklearn中实施它使我感到困惑。我了解到ROC会绘制TPR与FPR的比率,因为特定类型的模型对TP而言具有不同的阈值-这种观点很with this tutorial。在这种理解下,ROC曲线上的每个点都是模型类型在特定阈值处的(FPR,TPR)坐标。因此,可以将逻辑回归(例如)与特定数据集的随机森林分类器进行比较(例如),每个分类器的参数范围都不同。
但是,在sklearn中,ROC曲线的每个点对应一个模型中的观测,即:
import numpy as np
from sklearn import metrics
import seaborn as sns
import matplotlib.pyplot as plt
y = np.array([1,1,1])
scores = np.array([0.47,0.62,0.53,0.49,0.76,0.57,0.97,0.95,0.46,0.69])
fpr,tpr,thresholds = metrics.roc_curve(y,scores)
sns.lineplot(x = fpr,y = tpr,ci = False)
plt.plot(fpr,tpr)
plt.plot([0,1],[0,'--')
就好像每个分类本身都被视为一种微型模型一样。如果是这样,我不了解如何合理地将TPR / FPR称为费率,因为只有一个值,无法使用以下公式来计算FPR和TPR:
TPR = TP / TP + FN
FPR = FN / FN + TP
按照相同的逻辑,当仅对单个观察有效时,我看不到预测的模型概率(分数)如何用作阈值。
我可能在这里遗漏了一些基本知识,如果对有关它的直觉有所感激,将不胜感激?
解决方法
没关系;我现在看到了我的错误。对于来此帖子同样困惑的任何人,我的错误是这样。实际上,sklearn roc_curve
确实为特定模型类型绘制了不同范围的阈值。提供给它的概率(即分数)为它提供了需要覆盖的阈值范围; roc_curve
输出的阈值是模型为进行肯定分类可采用的不同阈值。因此,ROC曲线的一个点将是针对特定阈值计算的TPR和FPR。另一点将是一个不同的值,等等。一旦您考虑了它就很有意义。