随机拆分交叉验证,有什么限制?

Shuffle split cross validation, what are the limitations?

在 sklearn.cross_validation.ShuffleSplit 的 sklearn 文档中,它指出:

注意:与其他交叉验证策略相反,随机拆分并不能保证所有折叠都不同,尽管对于大型数据集来说这仍然很有可能。

这是个问题吗?如果是,为什么?

与最常用的 KFold 交叉验证策略相反,Shuffle Split 在每次迭代中使用随机元素样本。作为一个工作示例,让我们考虑一个包含 10 个观察值的简单训练数据集;

训练数据 = [1,2,3,4,5,6,7,8,9,10]

KFold (k=5)

  1. 打乱数据,假设现在是[6,9,1,4,10,5,7,2,3,8]
  2. 创建折叠; 折叠 1 = [6,9], 折叠 2 = [1,4], 折叠 3 = [10,5], 折4 = [7,2] 和 折叠 5 = [3,8]
  3. 训练每次迭代保留一个折叠以进行评估并使用所有其他折叠

Shuffle split (n_iter=3, test_size=0.2)

它以迭代方式工作,您可以指定迭代次数(sklearn 中默认 n_iter=10)

  1. 每次迭代打乱数据; [6,9,1,4,10,3,8,2,5,7], [6,2,1,4,10,7,5,9,3,8] 和 [2,6,1 ,4,10,5,7,9,3,8]
  2. 根据超参数 (test_size) 选择指定的训练和评估数据集;训练数据为 [6,9,1,4,10,3,8,2]、[6,2,1,4,10,7,5,9] 和 [2,6,1,4,10, 5,7,9]分别。测试数据分别为[5,7]、[3,8]和[3,8]。

如您所见,虽然洗牌不同(技术上可以相同),但最后两次迭代的训练和测试数据完全相同。随着迭代次数的增加,你拟合相同数据集的机会增加,这与交叉验证的想法是违反直觉的,在交叉验证中,我们希望用有限的数据来估计我们模型的普遍性。另一方面,数据集通常包含大量观察结果,因此具有相同(或非常相似)的训练和测试数据集不是问题。保持足够高的迭代次数可以提高结果的普遍性。