Я пытаюсь создать модель регрессии CV-кратности с использованием K = 5. Я попытался использовать функцию «boot» cv.glm, но у моего компьютера закончилась нехватка памяти, потому что загрузочный пакет всегда вычисляет рядом с ним LOOCV MSE. Поэтому я решил сделать это вручную, но я столкнулся со следующей проблемой. Я пытаюсь разделить свой dataframe на 5 векторов равной длины, содержащий образец 1/5 рядов моего df, но я получаю необъяснимые длины из 3-го сложения.Создание сгибов вручную для кросс-валидации K-fold R
a <- sample((d<-1:1000), size = 100, replace = FALSE)
b <- sample((d<-1:1000), size = 100, replace = FALSE)
c <- sample((d<-1:1000), size = 100, replace = FALSE)
df <- data.frame(a,b,c)
head(df)
# create first fold (correct: n=20)
set.seed(5)
K1row <- sample(x = nrow(df), size = (nrow(df)/5), replace = FALSE, prob = NULL)
str(K1row) # int [1:20] 21 68 90 28 11 67 50 76 88 96 ...
# create second fold (still going strong: n=20)
set.seed(5)
K2row <- sample(x = nrow(df[-K1row,]), size = ((nrow(df[-K1row,]))/4), replace = FALSE, prob = NULL)
str(K2row) # int [1:20] 17 55 72 22 8 53 40 59 69 76 ...
# create third fold (this is where it goes wrong: n=21)
set.seed(5)
K3row <- sample(x = nrow(df[-c(K1row,K2row),]), size = ((nrow(df[-c(K1row,K2row),]))/3), replace = FALSE, prob = NULL)
str(K3row) # int [1:21] 13 44 57 18 7 42 31 47 54 60 ...
# create fourth fold (and it gets worse: n=26)
set.seed(5)
K4row <- sample(x = nrow(df[-c(K1row,K2row,K3row),]), size = ((nrow(df[-c(K1row,K2row,K3row),]))/2), replace = FALSE, prob = NULL)
str(K4row) # int [1:26] 11 35 46 14 6 33 25 37 43 5 ...
Длина вектора, по-видимому, увеличивается от K = 3. Может ли кто-нибудь объяснить мне, что я делаю неправильно? Мой код (и рассуждения) кажется логичным, но результат говорит иначе .. Мое большое спасибо заранее!
Это потому, что у K1row и K2row есть некоторые общие элементы. Вы эффективно отбираете образцы с заменой. – ddunn801