【问题标题】:Shuffle split cross validation, what are the limitations?随机拆分交叉验证,有什么限制?
【发布时间】:2022-01-05 17:16:27
【问题描述】:
在 sklearn.cross_validation.ShuffleSplit 的 sklearn 文档中,它指出:
注意:与其他交叉验证策略相反,随机拆分并不能保证所有折叠都不同,尽管这对于相当大的数据集仍然很有可能。
这是一个问题吗?如果有,为什么?
【问题讨论】:
标签:
python
scikit-learn
cross-validation
shuffle
【解决方案1】:
与最常用的KFold 交叉验证策略相反,Shuffle Split 在每次迭代中使用元素的随机样本。作为一个工作示例,让我们考虑一个包含 10 个观察值的简单训练数据集;
训练数据 = [1,2,3,4,5,6,7,8,9,10]
KFold (k=5)
- 打乱数据,想象现在是 [6,9,1,4,10,5,7,2,3,8]
- 创建折叠; 折叠 1 = [6,9], 折叠 2 = [1,4], 折叠 3 = [10,5], 折叠 4 =
[7,2] 和 5 折 = [3,8]
- 训练在每次迭代中保留一个折叠以进行评估并使用所有其他折叠
随机拆分(n_iter=3,test_size=0.2)
它以迭代方式工作,您可以指定迭代次数(sklearn 中默认 n_iter=10)
-
每次迭代 打乱数据; [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]
- 使用超参数 (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]。
您可以注意到,尽管 shuffle 不同(技术上可以相同),但最后两次迭代的训练和测试数据完全相同。随着迭代次数的增加,您拟合相同数据集的机会也会增加,这与交叉验证的想法背道而驰,在交叉验证的想法中,我们希望用有限的数据来估计我们的模型的泛化性。另一方面,数据集通常包含大量观察结果,因此拥有相同(或非常相似)的训练和测试数据集不是问题。保持足够高的迭代次数可以提高结果的普遍性。