如何解决为什么scikit-learn会基于每个观察而不是整个模型来实现ROC?
我从理论上理解了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。另一点将是一个不同的值,等等。一旦您考虑了它就很有意义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。