2013-06-14 23 views
8

Sto allenando svm usando il mio traindata. (pacchetto e1071 in R). Di seguito sono riportate le informazioni sui miei dati.Ottenere un errore "(pedice) indice logico troppo lungo" durante l'allenamento SVM dal pacchetto e1071 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 ... 

Mi alleno come segue.

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

Nessun problema qui. Ma quando Prevedo come:

pred <- predict(model1,test) 

ottengo il seguente errore:

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

Ho anche provato a rimuovere predittore "biglietto" da entrambi i dati dei treni e di test. Ma ancora lo stesso errore. Qual è il problema?

+1

Difficile rispondere senza un esempio riproducibile. L'errore dice che i tuoi nuovi dati (test qui) non contengono abbastanza colonne. – agstudy

risposta

14

Potrebbe esserci una differenza nel numero di livelli in uno dei fattori nel set di dati 'test'.

eseguire str (test) e controllare che le variabili fattore abbiano gli stessi livelli delle variabili corrispondenti nel set di dati 'treno'.

cioè l'esempio seguente mostra my.test $ pippo ha solo 4 livelli .....

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

ha cambiato i livelli con data = factor (dati, livelli = c (livelli std)). E ha funzionato bene –

2

Quello è corretto dati treno contiene 2 spazi vuoti per imbarcato a causa di questo non v'è un valore in più categorica per spazi vuoti e si stanno ottenendo questo errore

$ intrapreso: Fattore w/4 livelli "", "C", "D", "S": 4 2 4 4 4 3 4 4 4 2 ...

Il primo è vuoto

0

Ho giocato anche con quel set di dati. So che questo è stato molto tempo fa, ma una delle cose che puoi fare è esplicitamente includere solo le colonne si sente aggiungerà al modello, come ad esempio:

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

Questo ha eliminato il problema per me, eliminando colonne questo non contribuisce (come il numero del biglietto) che non ha dati rilevanti.

Problemi correlati