神经网络:神经元[[i]]%*%权重[[i]]:需要数字/复杂矩阵/向量参数

时间:2017-03-13 19:49:07

标签: r neural-network

我正在尝试对我的数据进行神经网络方法而且我被卡住了。 我总是收到消息:

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

事实是:

  1. 我正在使用read.csv阅读我的数据 我正在添加一个包含我的一些数据的文件的链接,我希望它有所帮助 https://www.dropbox.com/s/b1btx0cnhmj229p/collineardata0.4%287.2.2017%29.csv?dl=0
  2. 我的数据中没有NA(我检查了两次)
  3. str(data)的结果是:

    'data.frame':20个obs。 457个变量:  $ X300.5_alinine.sulphate:num 0.351 0.542 0.902 0.656 1 ...  $ X300.5_bromocresol.green:num 0.435 0.603 0.749 0.314 0.922 ...  $ X300.5_bromophenol.blue:num 0.415 0.662 0.863 0.345 0.784 ...  $ X300.5_bromothymol.blue:num 0.2365 0.0343 0.4106 0.3867 0.8037 ...  $ X300.5_chlorophenol.red:num 0.465 0.1998 0.7786 0.0699 1 ...  $ X300.5_cresol.red:num 0.534 0.311 0.678 0.213 0.821 ... 继续

  4. 我尝试过使用model.matrix

  5. 我在不同的数据集(即虹膜)上尝试了代码,这很好。
  6. 任何人都可以尝试建议我的数据/数据读取有什么问题吗?

    代码是

    require(neuralnet)
    require(MASS) 
    require(grid)
    
    require(nnet)
    
    #READ IN DATA
    data<-read.table("data.csv", sep=",", dec=".", head=TRUE)
    dim(data)
    
    # Create Vector of Column Max and Min Values
    maxs <- apply(data[,3:459], 2, max)
    mins <- apply(data[,3:459], 2, min)
    
    # Use scale() and convert the resulting matrix to a data frame
    scaled.data <- as.data.frame(scale(data[,3:459],center = mins, scale =   maxs - mins))
    
    # Check out results
    print(head(scaled.data,2))
    
    #create formula
    feats <- names(scaled.data)
    
    # Concatenate strings
    f <- paste(feats,collapse=' + ')
    f <- paste('data$Type ~',f)
    
    # Convert to formula
    f <- as.formula(f)
    
    f
    
    #creating neural net
    nn <- neuralnet(f,model,hidden=c(21,15),linear.output=FALSE)
    str(scaled.data)
    
    apply(scaled.data,2,function(x) sum(is.na(x)))
    

1 个答案:

答案 0 :(得分:0)

您的代码存在多处问题。

1.因变量Type中有多个因素。 neuralnet只接受数字输入,因此您必须将其转换为model.matrix的二进制矩阵。

y <- model.matrix(~ Type + 0, data = data[,1,drop=FALSE])

# fix up names for as.formula
y_feats <- gsub(" |\\+", "", colnames(y))
colnames(y) <- y_feats

scaled.data <- cbind(y, scaled.data)

# Concatenate strings
f <- paste(feats,collapse=' + ')
y_f <- paste(y_feats,collapse=' + ')
f <- paste(y_f, '~',f)

# Convert to formula
f <- as.formula(f)

2.无论如何,你甚至都没有将scaled.data传递给neuralnet电话。

nn <- neuralnet(f,scaled.data,hidden=c(21,15),linear.output=FALSE)

该函数现在将运行,但您需要查看多类问题(超出了本问题的范围)。此程序包不会输出直接概率,因此您必须谨慎。