我正在尝试对我的数据进行神经网络方法而且我被卡住了。 我总是收到消息:
in neurons[[i]] %*% weights[[i]] : requires numeric/complex matrix/vector arguments
事实是:
read.csv
阅读我的数据
我正在添加一个包含我的一些数据的文件的链接,我希望它有所帮助
https://www.dropbox.com/s/b1btx0cnhmj229p/collineardata0.4%287.2.2017%29.csv?dl=0 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 ... 继续
我尝试过使用model.matrix
任何人都可以尝试建议我的数据/数据读取有什么问题吗?
代码是
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)))
答案 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)
该函数现在将运行,但您需要查看多类问题(超出了本问题的范围)。此程序包不会输出直接概率,因此您必须谨慎。