Trabajar con neuralnet en R por primera vez: get " requiere argumentos numéricos / complejos de matriz / vector"


Estoy en el proceso de intentar aprender a trabajar con redes neuronales en R. Como un problema de aprendizaje, he estado usando el siguiente problema en Kaggle :

No te preocupes, este problema está diseñado específicamente para que la gente aprenda, no hay recompensa vinculada a él.

Comencé con una simple regresión logística, que fue genial para mojarme los pies. Ahora me gustaría aprender a trabajar con redes neuronales. Mis datos de entrenamiento se ven así (Columna:Fila):

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

Mi código R inicial se ve así:

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

Cuando corro esta línea de código obtengo el siguiente error:

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

Entiendo que el problema está en la forma en que estoy presentando mis variables de entrada, pero soy demasiado novato para entender lo que tengo que hacer para corregir esto. Alguien puede ayudar?

Gracias!

Author: cchamberlain, 2013-07-03

2 answers

Antes de dar ciegamente los datos a la computadora, es una buena idea mirarlo:

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)

Algunas de las variables tienen demasiados valores para ser útiles (al menos en tu primer modelo): puede eliminar el nombre, boleto, cabina y passengerId. También es posible que desee transformar algunas de las variables numéricas (por ejemplo, clase), a factores, si es más significativo.

Ya que neuralnet solo trata de variables cuantitativas, puede convertir todas las variables cualitativas (factores) a binario variables ("dummy"), con la función model.matrix -- es una de las situaciones muy raras en el que R no realiza la transformación para usted.

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
Author: Vincent Zoonekynd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-03 20:56:31

El mensaje de error "requiere argumentos de matriz/vector numéricos/complejos" ocurre cuando tiene variables de factor o carácter en sus datos.

Hay tres maneras de resolver este problema:

  1. Suprímase la variable
  2. Si la variable es un factor ordenado, use integer en su lugar.
  3. Si la variable es carácter,transformarla en factor y luego en variable ficticia.

Puede usar el modelo.matrix() mencionado anteriormente o class.función ind () del paquete nnet a factor de transferencia en variable ficticia.

 7
Author: Tara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-15 13:34:47