机器学习的置换测试:置换整个集合还是只置换训练集?

机器算法验证 机器学习 交叉验证 置换检验
2022-03-24 06:45:08

Ojala 和 Garriga (2010) [Journal of Machine Learning Research 11 (2010) 1833-1863] 提到了机器学习的两个置换测试:测试一个用于评估分类器是否学到了比随机猜测更好的东西。据我了解,这个想法是置换类标签并执行机器学习k次,并与原始模型性能进行比较以得出p值。

问题很简单:如果我使用交叉验证,我应该在潜入训练/测试(每折)之前置换整个数据集还是只置换交叉验证训练数据(在每折内)并离开测试数据不变。(据我了解,可以为整个数据排列类标签,然后执行交叉验证)。

2个回答

这里几乎没有什么可以解压的。置换测试的目标是通过置换标签并多次重复您的过程来为您的测试统计量获取零分布。

例如,您的测试统计数据是平均准确度,而您的程序是 CV。因此,您应该置换标签(所有标签,因为所有标签都进入程序),然后将数据拆分为折叠并运行 CV。

如果您只置换训练集,那么您不会得到有效的空值,因为您的结果标签没有随机性。如果您仅在测试集中置换数据,这将无效,因为它不会考虑 CV 折叠之间的依赖关系,这是进行置换测试而不仅仅是一些二项式测试的全部原因。

有几个警告。

如果你随机执行 CV split,那么你也可以简单地先排列数据,然后继续 CV。

如果您的 CV 拆分已完成,以便每个折叠具有来自每个类别的相同比例的标签,或者折叠基于相同的其他变量进行平衡,那么您必须进行置换,以便您的排列也是如此。通常,一种简单的方法是先置换,然后创建平衡拆分。

如果您没有随机折叠,但它们已经给出,例如,每个折叠是来自不同城市、不同医院或不同测量设备的数据,那么您必须在这些折叠内置换,以便来自同一家医院的标签将不会被其他医院的标签置换。

您可能有其他不基于折叠的所谓“可交换块”,例如,您有不同的医院,但您没有按医院拆分数据,那么您应该在这些块内排列您的数据,但不一定在这些块内折叠。

在预测时,您有实际标签和预测的对。并且如果您置换了预测,结果将是相同的,因为置换它们会破坏配对。因此,这样的置换测试会在预测是随机进行但预测的分布是固定的情况下创建零分布。(yi,y^i)yiy^i

但请注意这篇论文是怎么说的:

测试 1 的重要分类器拒绝特征和标签是独立的零假设,即类之间没有差异。如果原始数据包含数据点和标签之间的依赖关系,那么:(1)一个显着的分类器将使用这些信息来实现良好的分类精度,从而导致值较小;(2) 如果分类器在测试 1 中不显着,无法使用原始数据中数据和标签之间存在的依赖关系。最后,如果原始数据不包含数据点和标签之间的任何真正依赖关系,那么所有分类器的 fpffp-value 和原假设永远不会被拒绝。

因此,对原始数据应用随机化是理解不同分类器如何使用数据中隐含的结构(如果存在这种结构)的有效方法。[...]

它提到了使用数据结构的“不同分类器”。如果您对整个数据进行了置换,则需要回答一个不同的问题。使用置换标签的数据训练的模型学会发现虚假的相关性。在这种情况下有一个小的火车错误告诉你它有多少容易过度拟合。仅排列标签并将它们与预测进行比较时,还有另一个区别。在第一种情况下,您正在查看来自单个模型的预测分布。在第二种情况下,您查看来自不同“空”模型的预测分布。只有第二种情况告诉你分类器是如何学习数据结构的。

最后,如果我错了,请纠正我,但论文似乎没有说任何关于训练和测试数据的内容。他们似乎在描述在数据集上训练分类器并将性能与置换数据集进行比较,但这些都是训练错误。DD