Travailler avec neuralnet dans R pour la première fois: get "nécessite des arguments de matrice/vecteur numériques/complexes"

je suis en train d'essayer d'apprendre à travailler avec les réseaux neuronaux en R. Comme problème d'apprentissage, j'ai utilisé le problème suivant Kaggle:

ne vous inquiétez pas, ce problème est spécifiquement conçu pour les gens à apprendre avec, il n'y a pas de récompense liée à elle.

j'ai commencé par une simple régression logistique, ce qui était génial pour me mouiller les pieds. Maintenant, j'aimerais apprendre à travailler avec les réseaux neuronaux. Mes données de formation semblent comme ce (Colonne (Ligne):

- survived: 1
- pclass:   3
- sex:      male
- age:      22.0
- sibsp:    1
- parch:    0
- ticket:   PC 17601
- fare:     7.25
- cabin:    C85
- embarked: S

Mon départ R code ressemble à ceci:

> net <- neuralnet(survived ~ pclass + sex + age + sibsp +
                   parch + ticket + fare + cabin + embarked, 
                   train, hidden=10, threshold=0.01)

Lorsque j'exécute cette ligne de code j'obtiens l'erreur suivante:

Error in neurons[[i]] %*% weights[[i]] : 
  requires numeric/complex matrix/vector arguments

je comprends que le problème est dans la façon dont je vais présenter mes variables d'entrée, mais je suis trop novice pour comprendre ce que je dois faire pour corriger cela. Quelqu'un peut-il aider?

Merci!

25
demandé sur cchamberlain 2013-07-03 23:57:54

2 réponses

Avant de donner aveuglément les données à l'ordinateur, c'est une bonne idée de le regarder:

d <- read.csv("train.csv")
str(d)
# 'data.frame': 891 obs. of  12 variables:
#  $ PassengerId: int  1 2 3 4 5 6 7 8 9 10 ...
#  $ 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/ 891 levels "Abbing, Mr. Anthony",..: 109 191 358 277 16 559 520 629 417 581 ...
#  $ Sex        : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
#  $ Age        : num  22 38 26 35 35 NA 54 2 27 14 ...
#  $ SibSp      : int  1 1 0 1 0 0 0 3 0 1 ...
#  $ Parch      : int  0 0 0 0 0 0 0 1 2 0 ...
#  $ Ticket     : Factor w/ 681 levels "110152","110413",..: 524 597 670 50 473 276 86 396 345 133 ...
#  $ Fare       : num  7.25 71.28 7.92 53.1 8.05 ...
#  $ Cabin      : Factor w/ 148 levels "","A10","A14",..: 1 83 1 57 1 1 131 1 1 1 ...
#  $ Embarked   : Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...
summary(d)

certaines variables ont trop de valeurs pour être utiles (au moins dans votre premier modèle): vous pouvez supprimer le nom, le billet, la cabine et le passagerid. Vous pouvez également vouloir transformer certaines des variables numériques (par exemple, classe), en facteurs, si elle est plus significative.

Depuis model.matrix fonction -- c'est une des situations très rares dans lequel R ne réalise pas la transformation pour vous.

m <- model.matrix( 
  ~ Survived + Pclass + Sex + Age + SibSp + Parch + Fare + Embarked, 
  data = d 
)
head(m)
library(neuralnet)
r <- neuralnet( 
  Survived ~ Pclass + Sexmale + Age + SibSp + Parch + Fare + EmbarkedC + EmbarkedQ + EmbarkedS, 
  data=m, hidden=10, threshold=0.01
)
39
répondu Vincent Zoonekynd 2013-07-03 20:56:31

message D'erreur "requiert des arguments de matrice/vecteur numériques/complexes" se produit lorsque vous avez des variables de facteur ou de caractère dans vos données.

Il y a trois manières de résoudre ce problème:

  1. Supprimer la variable
  2. si la variable est un facteur ordonné, utilisez integer à la place.
  3. si la variable est un caractère,transformez-la en facteur puis en variable fictive.

Vous pouvez utiliser le modèle.matrix() mentionné ci-dessus ou classe.ind () fonction du paquet nnet pour transférer le facteur dans la variable muette.

7
répondu Tara 2014-01-15 13:34:47