Voor het eerst werken met neuralnet in R: get vereist numerieke/complexe matrix/vectorargumenten

Ik ben bezig om te leren werken met neurale netwerken in R. Als leerprobleem heb ik de volgend probleem via Kaggle:

Maak je geen zorgen, dit probleem is speciaal ontworpen voor mensen om mee te leren, er is geen beloning aan verbonden.

Ik begon met een eenvoudige logistische regressie, wat geweldig was om mijn voeten nat te maken. Nu wil ik graag leren werken met neurale netwerken. Mijn trainingsgegevens zien er als volgt uit (Kolom:Rij):

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

Mijn start-R-code ziet er als volgt uit:

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

Als ik deze regel code uitvoer, krijg ik de volgende foutmelding:

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

Ik begrijp dat het probleem zit in de manier waarop ik mijn invoervariabelen presenteer, maar ik ben te veel een beginner om te begrijpen wat ik moet doen om dit te corrigeren. Kan iemand helpen?

Bedankt!


Antwoord 1, autoriteit 100%

Voordat u de gegevens blindelings aan de computer geeft,
het is een goed idee om ernaar te kijken:

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)

Sommige variabelen hebben te veel waarden om bruikbaar te zijn
(tenminste in je eerste model):
u kunt de naam, het ticket, de cabine en de passagiers-ID verwijderen.
Misschien wilt u ook enkele van de numerieke variabelen (bijvoorbeeld klasse) omzetten in factoren,
als het zinvoller is.

Aangezien neuralnet zich alleen bezighoudt met kwantitatieve variabelen,
je kunt alle kwalitatieve variabelen (factoren) omzetten
naar binaire (“dummy”) variabelen, met de functie model.matrix
het is een van de zeer zeldzame situaties
waarin R de transformatie niet voor je uitvoert.

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
)

Antwoord 2, autoriteit 14%

Foutmelding “vereist numerieke/complexe matrix/vector-argumenten” treedt op wanneer u factor- of tekenvariabelen in uw gegevens heeft.

Er zijn drie manieren om dit probleem op te lossen:

  1. Verwijder de variabele
  2. Als de variabele een geordende factor is, gebruik dan integer.
  3. Als de variabele een karakter is, transformeer deze dan in factor en vervolgens in dummy variabele.

U kunt het hierboven genoemde model.matrix() of de class.ind()-functie van het nnet-pakket gebruiken om de factor om te zetten in een dummyvariabele.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

nine − 2 =

Other episodes