使用 k 折交叉验证来测试所有数据

机器算法验证 机器学习 交叉验证
2022-04-01 18:14:58

是否可以进行 k 折交叉验证来测试所有数据,而不是像通常那样使用 kfcv 来找到最佳假设。

例子:

假设我想在大小为 1000 的数据集上使用 svm。我可以使用 900 个事件来训练 svm 以测试其他 100 个事件。然后使用单独的 900 个事件为单独的 100 个事件训练 svm,重复此过程 10 次,直到所有数据都经过测试。

使用单独训练的 svm 测试的事件是否具有可比性?即通过这种技术,我可以使用我的整个数据集而不是留出一定的一部分进行训练,或者这是在统计上不明智的事情吗?

谢谢你的帮助,

科罗拉多州

PS)非常感谢任何关于为什么会['nt]工作的参考,我正在学术环境中讨论这种技术。

3个回答

据我了解您的问题,可以这样表述:

不是为每个 k 验证折叠计算质量度量然后计算平均值,我可以聚合所有折叠然后计算我的质量度量,因此只得到一个而不是 k 值吗?

这个问题需要两个角度:
从交叉验证本身的角度来看是可以的,因为训练和测试样本仍然有一个空的交集等。由于您只是聚合多个没有替换的样本,因此测试分布不会被破坏。

从模型的角度来看,这取决于模型是否产生可比较的分数。在我看来,SVM 会起作用,但是想象一个模型,它对测试集 (iiek) 中的分数进行最小-最大标准化,因此计算所有测试样本的代表性决策阈值将非常困难。

通常,许多需要估计参数的技术(其本身取决于模型的质量)都使用这种方法。一个具体的例子是计算一个算子来校准一个分类模型的分数,例如 Platt Scaling。

此外(这也不是一个完全令人满意的论点)开源软件 Rapidminer 具有这种方法的运算符。

PS:我想指出,虽然这种方法对于仅对小数据集获得可靠的质量测量很有用,但可能很难执行统计测试来比较两个模型的显着性,因为 cv 不能无休止地重复(例如:如何如果您只有 6 个数据点,估计是否满足经常被误用的 t 检验的假设?)。

PPS:也很感兴趣,我找不到一篇专注于检查这种方法的论文。到目前为止,我看到的使用这种技术的论文并没有费心去参考它。

是的; 虽然这是一种非常可靠的错误报告方式,但我会说它甚至受到鼓励。

我对这个问题不是 100% 清楚,但我有几点要补充:

我假设您试图估计的错误是预测错误。如果是这样,我同意如果您的训练集足够大,10 折交叉验证将是真实预测误差的良好(并且可能是无偏的)近似值。在这种情况下,大意味着训练集提供了足够的信息来构建“好的”SVM(从某种意义上说,它捕获了预测变量和响应之间的大部分潜在关系。)大小为 900 的训练集更有可能足够大。实际上,除非您要拟合的 SVM 非常复杂,否则我建议使用 5 折交叉验证以获得更精确的预测误差估计(是的,您可以平均 5 折的误差估计以获得最终估计。)

关于这个问题:

“使用单独训练的 svm 测试的事件是否具有可比性?即通过这种技术,我可以使用我的整个数据集而不是留出一定的部分进行训练,或者这在统计上是不明智的做法吗?”

我不明白这个问题,但由于短语“整个数据集”出现在关于 CV 的帖子中,我只想警告您,从适合所有可用数据的模型中估计预测误差通常是一个坏主意。为了使交叉验证有意义,每个训练集/测试集对应该没有共同点。否则,可能会低估真正的错误。