Ich habe einige Daten, für die ich ein paar verschiedene lineare Modelle vergleichen möchte. Ich kann caTools::sample.split()
verwenden, um ein Training/Test-Set zu bekommen.Verschiedene Test- und Trainingssätze aus der gleichen Probe
Ich würde gerne sehen, wie sich das Modell ändern würde, wenn ich ein anderes Training/Test-Set aus der gleichen Probe verwendet hätte. Wenn ich set.seed()
nicht verwende, sollte ich jedes Mal einen anderen Satz bekommen, wenn ich sample.split
rufe.
ich lapply
verwende jetzt die Funktion, um eine bestimmte Anzahl von Malen zu nennen:
library(data.table)
library(caTools)
dat <- as.data.table(iris)
dat_list <- lapply(1:20, function(z) {
sample_indices <- sample.split(dat$Sepal.Length, SplitRatio = 3/4)
inter <- dat
inter$typ <- "test"
inter$typ[sample_indices] <- "train"
inter$set_no <- z
return(as.data.table(inter))})
Und zum Vergleich der Koeffizienten:
coefs <- sapply(1:20, function(z){
m <- lm(Sepal.Length ~ Sepal.Width, data = dat_list[[z]][typ == "train"])
return(unname(m$coefficients))
})
Die letzten Zeilen bearbeitet werden könnte zurückkehren RMS-Fehler bei der Vorhersage von Werten im Testset (typ=="test"
).
Ich frage mich, ob es eine bessere Möglichkeit gibt, dies zu tun?
Eine bessere Art, was zu tun? Die Daten mehrfach teilen? Vergleichen von Koeffizienten? Annäherung an das Problem? Ich würde sagen, es geht dir gut, und wenn du mit dem Ergebnis zufrieden bist, geh weiter! Sie könnten stattdessen an k-facher Kreuzvalidierung interessiert sein - es ist häufiger und teilt ein ähnliches Ziel. Sie könnten es ziemlich automatisch mit 'caret' machen. – Gregor
Danke! Ich bin daran interessiert, die Daten effizient zu teilen (mein tatsächlicher Datensatz ist ziemlich groß). Ich bin auch scharf darauf, zu wissen, ob es einen Standard Weg gibt, um Modelle auf diese Weise zu vergleichen - ich werde die k-fache Methode nachschlagen, die Sie erwähnt haben. Mein Wissen über Statistiken ist leider schlecht. – Gautam