2013-06-14 9 views
8

Szkolę svm przy użyciu mojej traindaty. (Pakiet e1071 w R). Poniżej znajdują się informacje o moich danych.Otrzymanie błędu "(indeks dolny) logiczny indeks dolny zbyt długo" podczas szkolenia SVM z pakietu e1071 w 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 ... 

Szkolę to w następujący sposób.

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

Nie ma problemu. Ale kiedy przewidzieć jak:

pred <- predict(model1,test) 

pojawia się następujący błąd:

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

Próbowałem też usuwając "bilet" predyktorem z obu pociągów i danych testowych. Ale wciąż ten sam błąd. Jaki jest problem?

+1

Trudno odpowiedzieć bez odtwarzalnego przykładu. Błąd mówi, że twoje nowe dane (test tutaj) nie zawierają wystarczającej liczby kolumn. – agstudy

Odpowiedz

14

Może wystąpić różnica w liczbie poziomów jednego z czynników w zestawie danych "test".

uruchom str (test) i sprawdź, czy zmienne czynników mają te same poziomy co odpowiednie zmienne w zestawie danych "pociąg".

czyli poniżej przykład pokazuje my.test $ foo ma tylko 4 poziomy .....

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

zmieniono poziomy za pomocą data = factor (dane, poziomy = c (poziomy standardowe)). I działało dobrze –

2

Ów poprawne dane pociąg zawiera 2 wykroje dla wyruszył z tego powodu istnieje jedna dodatkowa wartość kategoryczny do półfabrykatów i otrzymujesz ten błąd

$ rozpoczął: współczynnik w/4 poziomach "", "C", "Q", "S": 4 4 4 2 4 3 4 4 4 2 ...

Pierwsza jest pusta

0

Gram również z tym zbiorem danych. Wiem, że to było dawno temu, ale jedną z rzeczy, które możesz zrobić, to wyraźnie to tylko kolumny czujesz doda do modelu, jak takie:

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

to wyeliminować problem dla mnie, eliminując kolumn które nic nie przyczyniają się (jak numer biletu), które nie mają odpowiednich danych.