k 折中的每一折都有超过 n/k 行?

Each fold in k fold has substantially more than n/k rows?

我正在使用 rsample 生成折叠以进行交叉验证。我的理解是交叉验证将训练数据分成 k 份。但是,在我的代码块下方,每个折叠的行数与训练数据相同:

library(rsample)
diamonds %>% dim # diamonds has ~54K rows
set.seed(123)
diamonds_split <- initial_split(diamonds, 0.9)
training_data <- training(diamonds_split)
testing_data <- testing(diamonds_split)

# 5 fold split
train_cv <- vfold_cv(training_data, 5)
train_cv # each fold has ~39K, expected roughly (0.9 * 54K) / 5 each fold ~ 9.7K
#  5-fold cross-validation 
# A tibble: 5 x 2
  splits               id   
  <named list>         <chr>
1 <split [38.8K/9.7K]> Fold1
2 <split [38.8K/9.7K]> Fold2
3 <split [38.8K/9.7K]> Fold3
4 <split [38.8K/9.7K]> Fold4
5 <split [38.8K/9.7K]> Fold5

每一折有 38.8K 行。 Diamonds 数据集一开始只有 54K。如果 0.9 的钻石是我的训练集,我预计 ((0.9 * 54K) / 5) 每次折叠 ~ 9.7K,而不是 38.8K。

我对交叉验证的理解有缺陷还是我的代码块有误?

您对 k 折验证的理解存在缺陷。每次迭代遗漏一个折叠。 0.9 * 54k = 48.6k 训练行。对于 5 折,每次迭代使用这些行的 4/5(最后 1/5 用作该迭代的验证集)。 48.6 * 4/5 = 38.88,以9.7k余额作为验证集。