第一次在R中与neuralnet合作:get";需要数字/复数矩阵/向量参数”;

第一次在R中与neuralnet合作:get";需要数字/复数矩阵/向量参数”;,r,regression,prediction,kaggle,R,Regression,Prediction,Kaggle,我正在尝试学习在R中使用神经网络。作为一个学习问题,我一直在使用over at: 别担心,这个问题是专门为人们学习而设计的,没有任何回报 我从一个简单的逻辑回归开始,这对我的脚湿透很有帮助。现在我想学习使用神经网络。我的培训数据如下所示(列:行): 我的起始R代码如下所示: > net <- neuralnet(survived ~ pclass + sex + age + sibsp + parch + ticket + fare + cabi

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

别担心,这个问题是专门为人们学习而设计的,没有任何回报

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

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

> net <- neuralnet(survived ~ pclass + sex + age + sibsp +
                   parch + ticket + fare + cabin + embarked, 
                   train, hidden=10, threshold=0.01)
我知道问题出在我展示输入变量的方式上,但我是个新手,不知道我需要做什么来纠正这个问题。有人能帮忙吗


谢谢

在盲目地将数据提供给计算机之前, 看看它是个好主意:

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)
当数据中有因子或字符变量时,会出现错误消息“需要数字/复杂矩阵/向量参数”

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

  • 删除变量
  • 如果变量是有序因子,请改用整数
  • 如果变量是字符,则将其转换为因子,然后再转换为伪变量

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

    首先看看你的数据,我相信你已经把所有的数据转换成了数值。例如CAB=c85,这是什么意思?如果您将此类型的值转换为数值,您的问题将得到解决。谢谢!这正是我希望得到的回应。感谢您花时间回复如此详细的信息。谢谢您!我有一个问题@VincentZoonekynd,对于哪些变量适用于
    模型是否有明确的规则。矩阵
    转换?@llorgge:所有定性变量,即
    因子
    (或
    字符
    )类型的变量,都将转换为虚拟变量。但是由于数字变量是保留的,未经转换的,所以实际上您可以放置所有变量。谢谢!最后一个问题,在
    model.matrix
    之后,您建议可以在
    neuralnet
    中使用的因子值的限制数量是多少?我担心会丢失一些因子变量,这些变量的值从2到200不等。@llorgge:你可能应该继续问。令我惊讶的是,SPSS需要你将因子变量分别放在指定的框中。
    Error in neurons[[i]] %*% weights[[i]] : 
      requires numeric/complex matrix/vector arguments
    
    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)
    
    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
    )