Ich versuche ein K-fache CV-Regressionsmodell mit K = 5 zu erstellen. Ich habe versucht, die "cv.glm" -Funktion des "Boot" -Pakets zu verwenden, aber mein PC hatte nicht genug Arbeitsspeicher, weil das Boot-Paket immer einen LOOCV MSE daneben berechnet. Also entschied ich, es manuell zu machen, aber ich lief auf das folgende Problem ein. Ich versuche, meinen Datenrahmen in 5 Vektoren gleicher Länge zu teilen, die eine Probe von 1/5 der Anzahl meiner df enthalten, aber ich bekomme unerklärliche Längen von der 3. Falte.Falten manuell für K-fache Kreuzvalidierung erstellen 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 ...
Die Vektorlänge scheint von K = 3 zuzunehmen. Kann mir jemand erklären, was ich falsch mache ?! Mein Code (und Argumentation) scheint logisch, aber das Ergebnis sagt anders .. Mein Vielen Dank im Voraus!
Es ist, weil K1row und K2row einige Elemente gemeinsam haben. Sie sind effektiv Proben mit Ersatz. – ddunn801