2013-06-14 5 views
8

Ich trainiere SVM mit meinen Traindata. (e1071 Paket in R). Im Folgenden finden Sie Informationen zu meinen Daten.Fehler erhalten "(tiefgestellt) logischer Index zu lang" beim Training von SVM aus E1071 Paket in R

> str(train) 
'data.frame': 891 obs. of 10 variables: 
$ survived: int 0 1 1 1 0 0 0 0 1 1 ... 
$ pclass : int 3 1 3 1 3 3 1 3 3 2 ... 
$ name : Factor w/ 15 levels "capt","col","countess",..: 12 13 9 13 12 12 12 8 13 13 
$ sex  : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ... 
$ age  : num 22 38 26 35 35 ... 
$ ticket : Factor w/ 533 levels "110152","110413",..: 516 522 531 50 473 276 86 396 
$ fare : num 7.25 71.28 7.92 53.1 8.05 ... 
$ cabin : Factor w/ 9 levels "a","b","c","d",..: 9 3 9 3 9 9 5 9 9 9 ... 
$ embarked: Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ... 
$ family : int 1 1 0 1 0 0 0 4 2 1 ... 

Ich trainiere es wie folgt.

library(e1071) 
model1 <- svm(survived~.,data=train, type="C-classification") 

Kein Problem hier. Aber wenn ich sage voraus, wie:

pred <- predict(model1,test) 

bekomme ich folgende Fehlermeldung:

Error in newdata[, object$scaled, drop = FALSE] : 
(subscript) logical subscript too long 

Ich habe auch versucht, „Ticket“ Prädiktor von beiden Bahnen und Testdaten zu entfernen. Aber immer noch der selbe Fehler. Was ist das Problem?

+1

Schwer zu beantworten ohne ein reproduzierbares Beispiel. Der Fehler besagt, dass Ihre neuen Daten (Test hier) nicht genügend Spalten enthalten. – agstudy

Antwort

14

Möglicherweise gibt es einen Unterschied in der Anzahl der Ebenen in einem der Faktoren in "Test" -Datensatz.

Führen Sie str (test) aus und überprüfen Sie, ob die Faktorvariablen die gleichen Werte wie die entsprechenden Variablen im Zugdatensatz haben.

dh das folgende Beispiel zeigt my.test $ foo hat nur 4 Ebenen .....

str(my.train) 
'data.frame': 554 obs. of 7 variables: 
.... 
$ foo: Factor w/ 5 levels "C","Q","S","X","Z": 2 2 4 3 4 4 4 4 4 4 ... 

str(my.test) 
'data.frame': 200 obs. of 7 variables: 
... 
$ foo: Factor w/ 4 levels "C","Q","S","X": 3 3 3 3 1 3 3 3 3 3 ... 
+0

änderte die Ebenen mit Daten = Faktor (Daten, Ebenen = c (Std Ebenen)). Und es hat gut funktioniert –

2

Das ist richtig Zugdaten 2 Rohlingen für eingeschifft enthält aus diesem Grund gibt es einen zusätzlichen kategorischen Wert für Zuschnitte und Sie bekommen diesen Fehler

$ eingeschifft: Faktor w/4 Ebenen "", "C", "Q", "S": 4 2 4 4 4 3 4 4 4 2 ...

Die erste ist leer

0

Ich habe auch mit diesem Datensatz gespielt. Ich weiß, das vor langer Zeit war, aber eines der Dinge, die Sie tun können, ist explizit enthält nur die Spalten, die Sie zum Modell fügen fühlen, wie solche:

fit <- svm(Survived~Pclass + Sex + Age + SibSp + Parch + Fare + Embarked, data=train) 

Dies das Problem für mich beseitigt durch Spalten beseitigen die nichts beitragen (wie Ticketnummer), die keine relevanten Daten haben.

Verwandte Themen