k-fold 交叉验证是否总是意味着 k 个大小一致的子集?

机器算法验证 交叉验证
2022-04-02 08:21:18

由于我在工作中遇到的创建 k 折叠但折叠长度不相等的交叉验证策略,我试图辨别的一个小点有点困惑(例如,一些折叠大小为 17,另外 18 个,最多 24 个)。k-folds 交叉验证是否仅限于等长的折叠?训练数据长度和折叠次数的任意选择当然可以产生分数,其中一次折叠会拉短棒,但是说 k 折叠尝试做出大致相等的折叠大小是否准确?

特别是我在这个问题中听到了相互矛盾的信息

马特克劳斯“分为不同的、相互排斥的‘折叠’

数据头“k-fold cross-validation (kFCV) 将 N 个数据点划分为 k 个 大小相等的互斥子集。”

3个回答

只需注意一个警告 - 如果折叠大小不相等,则折叠结果的平均值与整个数据集的平均值不同。您应该按折叠大小对折叠结果进行加权以获得正确的平均值。

假设您有一个数据集并使用 2 折交叉验证。第一个折叠是,第二个折叠是假设您对第一折的预测是,第二折那么第一折的 MSE 是,第二折的简单的交叉验证结果将是但是,如果你在整个数据集上计算相同的东西,你会得到计算交叉验证结果的正确方法是X={1,2,3,4,5}{1,2}{3,4,5}{2,2}{4,4,4}(1+0)/2=1/2(1+0+1)/3=2/3(1/2+2/3)/2=7/12(1+0+1+0+1)/5=3/51/22/5+2/33/5=3/5

我并不是要暗示该答案中的折叠应该是不同的大小(我会更新它以匹配)。

每个折叠应包含相等数量的观察值,或尽可能接近相等个观测值执行 10 折交叉验证,则其中 1 折将包含 11 个而不是 10 个项目。没关系。如果您有 102 个观察值,最好有两个折叠,每个折叠 11 个项目,而不是 12 个中的 1 个和 10 个中的 9 个,尽管我怀疑这在实践中很重要,特别是随着的增加。N=101N/k

没有必要选择整除(你怎么会在素数大小的数据集上运行交叉验证?),或者丢弃示例直到整除(数据很难得到;不要扔掉它)。kNNk

k -fold 交叉验证会将您的数据分成个子集。然后您迭代次:,使用除第个子集之外的子集的并集来训练您的模型。个子集上测试该模型。如果不是您在数据集中拥有的观察量的除数,则不可能获得相同大小的子集。这很容易发生,并且您通常会得到大小大致相同的子集,具体取决于您使用的工具中数据拆分的实现方式。例如,您可以有kki=1,2,...,kiikk1相同大小的子集和一个通过具有与其余部分不同的观察量来补偿的子集。