web-dev-qa-db-fra.com

Obtention d'un message d'erreur "indice logique (indice) trop long" lors de la formation du package SVM à partir du package e1071 en mode R

Je suis en train de former svm en utilisant mon traindata. (paquet e1071 en R). Voici les informations sur mes données.

> 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 ...

Je l'entraîne comme suit.

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

Pas de problème ici. Mais quand je prédis que:

pred <- predict(model1,test)

Je reçois l'erreur suivante:

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

J'ai également essayé de supprimer le prédicteur "ticket" des données de train et de test. Mais toujours la même erreur. Quel est le problème?

11
Ayush Raj Singh

Il peut y avoir une différence dans le nombre de niveaux dans l'un des facteurs de l'ensemble de données «test».

lancez str (test) et vérifiez que les variables factorielles ont les mêmes niveaux que les variables correspondantes dans le jeu de données 'train'.

c'est-à-dire que l'exemple ci-dessous montre mon.test $ foo n'a que 4 niveaux .....

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 ...
16
Serge Merzliakov

C’est pourquoi les données de train correctes contiennent 2 blancs pour les passagers embarqués à cause de cela, il ya une valeur catégorique supplémentaire pour les blancs et vous obtenez cette erreur

$ Embarqué: Facteur w/4 niveaux "", "C", "Q", "S": 4 2 4 4 4 3 4 4 4 ...

Le premier est vide

2
user2378089

J'ai rencontré le même problème aujourd'hui. Il s'est avéré que le modèle svm du package e1071 ne peut utiliser que des lignes en tant qu'objets, ce qui signifie qu'une ligne correspond à un échantillon plutôt qu'à une colonne. Si vous utilisez column comme exemple et row comme variable, cette erreur se produira. 

1
Xu Haifeng

J'ai également joué avec cet ensemble de données. Je sais que c'était il y a longtemps, mais l'une des choses que vous pouvez faire est d'inclure explicitement uniquement les colonnes que vous penserez ajouter au modèle, comme celles-ci:

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

Cela a éliminé le problème pour moi en éliminant les colonnes qui ne contribuent en rien (comme le numéro de ticket) et ne contiennent aucune donnée pertinente.

0
sconfluentus