Cross-Validierung für das glm() Modelle
Ich versuche zu tun, eine 10-fold-cross-validation für einige glm-Modelle, die ich gebaut habe früher in R. ich bin ein wenig verwirrt über die cv.glm()
Funktion in der boot
Paket, obwohl ich gelesen habe, viel Hilfe-Dateien. Wenn ich die folgende Formel:
library(boot)
cv.glm(data, glmfit, K=10)
Nicht die "Daten" - argument bezieht sich hier auf den ganzen Datensatz oder nur zum test so eingestellt?
Die Beispiele, die ich bisher gesehen habe, bieten die "Daten" - argument als test gesetzt, aber das hat nicht wirklich Sinn machen, wie z.B. warum haben 10-folds auf die gleiche test-set? Sie sind alles zu geben, genau das gleiche Ergebnis (ich gehe davon aus!).
Leider ?cv.glm
erklärt es in einer nebligen Weg:
Daten: Eine matrix oder ein data frame mit den Daten. Die Zeilen sollten
Fälle und die Spalten entsprechen den Variablen, von denen die
Antwort
Meine andere Frage wäre über die $delta[1]
Ergebnis. Ist dies der Durchschnittliche vorhersagefehler über die 10 versuche? Was ist, wenn ich will, um den Fehler für jedes Fach?
Hier ist, was mein Skript sieht wie folgt aus:
##data partitioning
sub <- sample(nrow(data), floor(nrow(x) * 0.9))
training <- data[sub, ]
testing <- data[-sub, ]
##model building
model <- glm(formula = groupcol ~ var1 + var2 + var3,
family = "binomial", data = training)
##cross-validation
cv.glm(testing, model, K=10)
boot:::cv.glm
. Sie sollten die Eingabe der gesamten Daten, das Modell und die Falten der Lebenslauf.Danke für deine Antwort @RomanLuštrik. Hört sich toll an. Ich Frage mich heute noch, über ein paar Dinge obwohl. Macht diese Funktion verwenden, werden alle übermittelten Daten in der cross-Validierung? nehmen wir an, ich lieferte ein dataframe von einer 1000 Zeilen für die
cv.glm(data, glm, K=10)
macht es 10 Partitionen der Daten, die jeweils eine 100 und stellen Sie die Kreuz-Validierung? Sorry ich habe durch die ?cv.glm hatte ich aber nicht finden, die gibt es.Wenn Sie tun würde, eine 2-fold CV, würde die Funktion übernehmen 50% der Daten und das Modell passt. Würde es die anderen 50% der Daten, um zu sehen, wie gut das Modell die Daten beschreibt, die. Oder, im leave-one-out CV, würde es passen das Modell auf alle Daten "Punkt", und sehen, wie gut die ausgesondert "Punkt" haben. N-mal wiederholen und Sie bekommen Ihr Ergebnis.
Hi @RomanLuštrik. Sie sagte, dass wenn ich einen 2-Fach CV mit der Funktion passen Sie das Modell entsprechend 50% der Daten und die Verwendung der anderen 50% als test-set. Wenn die Funktion das tut, warum dann erfordert es ein argument "glmfit", die eine bisher eingebauten Modell?
Wenn Sie eine Frage haben, die auf crossvalidation, ich schlage vor, Sie öffnen einen thread auf crossvalidated.com.
InformationsquelleAutor Error404 | 2014-01-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin immer ein wenig vorsichtig über die Verwendung von verschiedenen Paketen 10-fold cross validation Methoden. Ich habe mein eigenes einfaches script zum erstellen der test-und Trainings-Partitionen manuell für jede Maschine learning-Paket:
Froh zu helfen!
InformationsquelleAutor Jake Drew
@Roman einige Antworten in seinen Kommentaren, allerdings ist die Antwort auf Ihre Fragen erfolgt durch Inspektion des Codes mit
cv.glm
:Ich glaube, dass dieses Stück code trennt die Daten nach dem Zufallsprinzip in die K-Falten, anordnen Rundung notwendig, wenn K nicht unterteilt n:
Dieses bit zeigt hier, dass der delta-Wert ist NICHT der root-mean-square-error. Es ist, wie der Hilfedatei sagt
The default is the average squared error function.
Was bedeutet das? Wir können sehen, dass dieser durch Einsicht in die Deklaration der Funktion:was zeigt, dass innerhalb der einzelnen Falten, berechnen wir den Durchschnitt der Fehler quadriert, wo Irrtum ist im üblichen Sinne zwischen vorhergesagten Antwort-vs tatsächliche Antwort.
delta[1]
ist einfach die gewichteter Durchschnitt der SUMME all dieser Bedingungen für jedes Fach finden Sie unter " meine inline-Kommentare im codecv.glm
:InformationsquelleAutor Alex