了解 ROC 曲线

机器算法验证 r
2022-01-22 00:39:30

我无法理解 ROC 曲线。

如果我从训练集的每个唯一子集构建不同的模型并使用它来产生概率,ROC 曲线下的面积是否有任何优势/改进?例如,如果的值为,我使用第 1-4 个值和的第 8-9并使用剩余的训练数据构建模型最后,生成概率。任何想法/意见将不胜感激。y{a,a,a,a,b,b,b,b}AayyB

这是 r 代码,可以更好地解释我的问题:

Y    = factor(0,0,0,0,1,1,1,1)
X    = matirx(rnorm(16,8,2))
ind  = c(1,4,8,9)
ind2 = -ind

mod_A    = rpart(Y[ind]~X[ind,])
mod_B    = rpart(Y[-ind]~X[-ind,])
mod_full = rpart(Y~X)

pred = numeric(8)
pred_combine[ind]  = predict(mod_A,type='prob')
pred_combine[-ind] = predict(mod_B,type='prob')
pred_full          = predict(mod_full, type='prob')

所以我的问题是,pred_combinevs的 ROC 曲线下的面积pred_full

1个回答

我不确定我得到了这个问题,但由于标题要求解释 ROC 曲线,我会尝试。

ROC 曲线用于查看您的分类器在分离正面和负面示例方面的能力,并确定分离它们的最佳阈值。

为了能够使用 ROC 曲线,您的分类器必须是排名的——也就是说,它应该能够对示例进行排名,使得排名较高的样本更有可能是正面的。例如,逻辑回归输出概率,这是您可以用于排名的分数。

绘制 ROC 曲线

给定一个数据集和一个排名分类器:

  • 按分数从高到低对测试示例进行排序
  • (0,0)
  • 对于排序顺序中的 每个示例x
    • 如果为正,则向上移动1x1/pos
    • 如果是负数,向右x1/neg

其中分别是正例和负例的分数。posneg

这张漂亮的 gif 动画图片应该更清楚地说明这个过程

构建曲线

在此图上,轴是真阳性率,轴是假阳性率。注意对角线 - 这是基线,可以通过随机分类器获得。我们的 ROC 曲线越高于这条线越好。yx

中华民国地区

大鹏地区

ROC 曲线下的区域(阴影)自然地显示了曲线与基线的距离。对于基线,它是 0.5,对于完美分类器,它是 1。

您可以在此问题中阅读有关 AUC ROC 的更多信息:AUC 代表什么,它是什么?

选择最佳阈值

我将简要概述选择最佳阈值的过程,更多细节可以在参考资料中找到。

要选择最佳阈值,您可以将 ROC 曲线的每个点视为一个单独的分类器。这个迷你分类器使用分数作为 + 和 - 之间的边界(即它分类为 + 当前点之上的所有点)

根据我们数据集中的 pos/neg 分数(在 50%/50% 的情况下与基线平行),您可以构建 ISO 精度线并采用精度最高的线。

这是一张说明这一点的图片,有关详细信息,我再次邀请您参考

选择最佳阈值

参考