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余额作为验证集。
我正在使用 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余额作为验证集。