29

我正在尝试学习在 R 中使用神经网络。作为一个学习问题,我一直在Kaggle使用以下问题

不用担心,这个问题是专门为人们设计的,没有任何奖励。

我从一个简单的逻辑回归开始,这对弄湿我的脚非常有用。现在我想学习使用神经网络。我的训练数据如下所示(列:行):

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

我的起始 R 代码如下所示:

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

当我运行这行代码时,出现以下错误:

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

我知道问题出在我呈现输入变量的方式上,但我太新手了,无法理解我需要做些什么来纠正这个问题。任何人都可以帮忙吗?

谢谢!

4

2 回答 2

52

在盲目地将数据交给计算机之前,最好先看一下:

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)

一些变量的值太多而无用(至少在您的第一个模型中):您可以删除姓名、机票、客舱和乘客 ID。如果更有意义,您可能还希望将一些数值变量(例如类)转换为因子。

由于neuralnet只处理定量变量,您可以使用函数将所有定性变量(因子)转换为二进制(“虚拟”)变量model.matrix- 这是 R 不为您执行转换的非常罕见的情况之一。

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
)
于 2013-07-03T20:56:31.127 回答
7

当您的数据中有因子或字符变量时,会出现错误消息“需要数字/复数矩阵/向量参数”。

有三种方法可以解决这个问题:

  1. 删除变量
  2. 如果变量是有序因子,请改用整数。
  3. 如果变量是字符,则将其转换为因子,然后转换为虚拟变量。

您可以使用上面提到的 model.matrix() 或 nnet 包中的 class.ind() 函数将因子转换为虚拟变量。

于 2014-01-15T09:52:01.753 回答