2017-05-19 17 views
0

Ich versuche, das zufällige Waldmodell zu verwenden, um Geschlecht basierend auf Höhe, Gewicht und Anzahl der Geschwister vorherzusagen. Ich habe die Daten von einem viel größeren Datensatz, der Dutzende von Variablen enthält, aber ich habe es in diesem "sauberen" data.frame mit weggelassenen NA-Werten und nur die 4 Variablen, die ich interessiere, die letzte Spalte Geschlecht .Index außerhalb der Grenzen Fehler, zufälliges Waldmodell

Ich habe versucht, mit dem Code zu fummeln und überall zu suchen, aber ich kann keine konkrete Lösung finden.

Hier ist der Code:

ind <- sample(nrow(clean),0.8*nrow(clean)) 
train <- clean[ind,] 
test <- clean[-ind,] 


rf <- randomForest(Gender ~ ., data = train[,1:4], ntree = 20) 

pred <- predict(rf, newdata = test[,-c(length(test))]) 
cm <- table(test$Gender, pred) 
cm 

und hier ist die Ausgabe:

Error in `[.default`(table(observed = y, predicted = out.class), levels(y), : subscript out of bounds 
Traceback: 

1. randomForest(Gender ~ ., data = train[, 1:4], ntree = 20) 
2. randomForest.formula(Gender ~ ., data = train[, 1:4], ntree = 20) 
3. randomForest.default(m, y, ...) 
4. table(observed = y, predicted = out.class)[levels(y), levels(y)] 
5. `[.table`(table(observed = y, predicted = out.class), levels(y), 
.  levels(y)) 
6. NextMethod() 
+0

Können Sie uns eine Idee geben, was in 'clean' ist? – G5W

+0

sauber hat 4 Spalten von jeweils etwa tausend Zeilen: Höhe (in Zentimetern), Gewicht (in Kilogramm), Anzahl der Geschwister (Integer) und Geschlecht ("männlich" oder "weiblich"). –

Antwort

0

Das Problem ist wahrscheinlich, dass Sie irgendeine Art von einem variablen Niveau in Ihren Testdaten, die nicht in Ihrem widerspiegelte Trainingsdaten. Wenn es darum geht, das Ergebnis zuzuordnen, hat es keine Grundlage dafür.

Es ist unmöglich, ohne Beispieldaten sicher zu sagen, aber es ist das wahrscheinlichste Szenario. Versuchen Sie, einen Seed set.seed=3 und dann ändern Sie die Seed-Nummer set.seed=28 und so weiter, ein paar Mal, um zu sehen, wenn Sie am Ende eine Kombination finden, wo Sie den Fehler nicht erhalten.

Vergleichen Sie den konfliktbehafteten Datenrahmen mit dem nicht konfliktbehafteten, um zu sehen, was fehlt.

EDIT:

Versuchen Sie auch, str(train) und str(test) laufen, um sicherzustellen, die Felder die gleichen geblieben sind. Sie können das teilen, wenn Sie möchten, indem Sie Ihren Beitrag bearbeiten.

Wenn eine der Spalten Faktoren mit fehlenden Ebenen sind (dh es hat 10 Ebenen, aber nur 8 sind im Zug mit 9 oder 10 im Test dargestellt), könnte dies ein Problem sein. Sie sollten ausgeglichen sein, wenn Sie versuchen, einen Prädiktor für alle möglichen Ergebnisse zu erstellen.

Wenn nichts anderes funktioniert, können Sie einen Seed setzen und Prädiktoren nacheinander entfernen, bis er korrekt läuft. Dann sehen Sie, wie sich Zug und Testsätze in dieser entfernten Spalte unterscheiden.

+0

Wie kann ich den widersprüchlichen Datenrahmen sehen? Meinst du die Unterschiede zwischen Zug und Sauberkeit, um zu überprüfen, ob einige Werte fehlen? Ich habe mehrere verschiedene Seed-Werte ausprobiert und keiner von ihnen hat es bisher geschafft. Glauben Sie, dass es etwas mit der Tatsache zu tun hat, dass es verschiedene Höhen und Gewichte gibt und einige nicht sowohl im Zugset als auch im Testset erscheinen? –

+0

Legen Sie für jeden gesetzten Test- und Zugsatz das Suffix 'train_22',' test_22' fest, das den Seed angibt. Auf diese Weise haben Sie das Set im Speicher gespeichert. Wenn Sie R Studio verwenden, klicken Sie im rechten Bereich der Umgebung auf den Namen des Datenrahmens und er öffnet sich in einem Fenster mit Registerkarten, in dem sich Ihr Skript befindet. Wenn Sie möchten, können Sie 'write.csv (test_22," failed.csv ")' und 'write.csv (test_3," passed.csv ")' dann können Sie sie in Excel öffnen und auf die Spalten schauen sehen Sie, ob Sie ein Ergebnis im Zug verpassen, so dass Sie es im Test nicht vorhersagen können. – sconfluentus

Verwandte Themen