Je suis en train d'essayer d'apprendre à travailler avec des réseaux de neurones dans R. En tant que problème d'apprentissage, j'ai utilisé le problème suivant sur Kaggle :
Ne vous inquiétez pas, ce problème est spécialement conçu pour que les gens apprennent, il n'y a aucune récompense qui y soit liée.
J'ai commencé par une simple régression logistique, ce qui était parfait pour me mouiller les pieds. Maintenant, j'aimerais apprendre à travailler avec les réseaux de neurones. Mes données d'entraînement ressemblent à ceci (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 code R de départ 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 réside dans la façon dont je présente 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!
Avant de donner aveuglément les données à l'ordinateur, c'est une bonne idée de les 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 ticket, la cabine et l'ID passager. Vous pouvez également vouloir transformer certaines des variables numériques (par exemple, la classe), en facteurs, si cela est plus significatif.
Puisque neuralnet
ne traite que des variables quantitatives, vous pouvez convertir toutes les variables qualitatives (facteurs) en variables binaires ("factices"), avec les model.matrix
fonction - c'est l'une des très rares situations où R n'effectue 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
)
Le message d'erreur "nécessite des arguments matriciels/vectoriels numériques/complexes" se produit lorsque vous avez des variables de facteur ou de caractère dans vos données.
Il existe trois façons de résoudre ce problème:
Vous pouvez utiliser la fonction model.matrix () mentionnée ci-dessus ou la fonction class.ind () du package nnet pour transférer le facteur dans une variable fictive.