为什么在测试集上使用 ROC 曲线?

机器算法验证 机器学习
2022-04-01 11:08:42

我是机器学习和统计学的新手,如果我说什么荒谬的话,请原谅我。

“测试集”是指我们评估最终假设然后报告最终结果(例如测试误差)的集合,它是对相应样本外结果(例如样本外误差)的无偏估计。

“验证集”是指我们用来进行模型选择或参数调整以选择最终假设的集合。根据定义,在验证集上找到的最佳结果是有偏差的(如果您只评估验证集上的一个假设,那么验证集就是测试集)。

对于上面两个冗长的段落,我很抱歉,因为我想确定我们在谈论同一件事。现在主要问题来了:

为什么要在测试集上计算 ROC 曲线?

在我阅读的许多其他资源中,他们在没有明确定义“测试集”的情况下计算了训练集或测试集的 ROC 曲线,所以如果我读错了,请原谅我。但是,我仍然很好奇,在我上面定义的测试集的情况下,计算 ROC 曲线的意义何在?不是在训练集(可能严重偏向乐观)或验证集(可能不太乐观)上选择阈值吗?如果我们对其进行阈值选择,测试集是否会成为验证集?

对我来说听起来很合理的过程是我们在验证集上计算 ROC 曲线,以根据 ROC 曲线进行模型选择/参数调整阈值选择。

1个回答

为什么要在测试集上计算 ROC 曲线?在我阅读的许多其他资源中,他们在没有明确定义“测试集”的情况下计算了训练集或测试集的 ROC 曲线,所以如果我读错了,请原谅我。

您想在测试集上计算 ROC,因为这实际上是可以帮助您估计泛化性能的数据集,因为它不用于以任何方式训练模型。这就是测试集的定义,它在保持或嵌套交叉验证中是相同的:一组数据没有以任何方式用于优化正在测试的模型。

但是,我仍然很好奇,在我上面定义的测试集的情况下,计算 ROC 曲线的意义何在?不是在训练集(可能严重偏向乐观)或验证集(可能不太乐观)上选择阈值吗?如果我们对其进行阈值选择,测试集是否会成为验证集?

您可以在训练期间优化阈值(实际上,如果您想这样做,则应该在训练/验证数据中进行)。然而,通常会完全跳过这种二分法,让模型输出概率或类似的连续值分数。然后,计算 ROC 可以让您很好地了解模型的预测潜力,而无需建立阈值。