我正在使用neuralnet
包,使用多个输入来预测输出。
最初,我的输出是一个因子变量,我看到了错误:
Error in neurons[[i]] %*% weights[[i]] :
requires numeric/complex matrix/vector arguments
当我将输出转换为numeric
变量时,错误消失了。神经网络是否有通过因子输出的方法?
答案 0 :(得分:6)
我修改了我在this site找到的代码,它使用带有神经网络包的虹膜数据集来预测形态数据中的虹膜种类。
如果没有可重复的示例,我不确定这是否适用于您的情况。这里的关键是将阶乘响应级别转换为自己的二进制变量。预测与R中的其他模型略有不同 - 您选择得分最高的因子级别。
library(neuralnet)
# Make training and validation data
set.seed(1)
train <- sample(nrow(iris), nrow(iris)*0.5)
valid <- seq(nrow(iris))[-train]
iristrain <- iris[train,]
irisvalid <- iris[valid,]
# Binarize the categorical output
iristrain <- cbind(iristrain, iristrain$Species == 'setosa')
iristrain <- cbind(iristrain, iristrain$Species == 'versicolor')
iristrain <- cbind(iristrain, iristrain$Species == 'virginica')
names(iristrain)[6:8] <- c('setosa', 'versicolor', 'virginica')
# Fit model
nn <- neuralnet(
setosa+versicolor+virginica ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
data=iristrain,
hidden=c(3)
)
plot(nn)
# Predict
comp <- compute(nn, irisvalid[-5])
pred.weights <- comp$net.result
idx <- apply(pred.weights, 1, which.max)
pred <- c('setosa', 'versicolor', 'virginica')[idx]
table(pred, irisvalid$Species)
#pred setosa versicolor virginica
# setosa 23 0 0
# versicolor 1 21 7
# virginica 0 1 22
答案 1 :(得分:0)
这可能会引发警告:
nn <- neuralnet(
setosa+versicolor+virginica ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
data=iristrain,
hidden=c(3)
)
所以用以下代替:
nn <- neuralnet(
setosa+versicolor+virginica ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
data=iristrain, hidden = 3,lifesign = "full")
如果这不起作用:
comp <- compute(nn, irisvalid[-5])
然后使用
comp <- neuralnet::compute(nn, irisvalid[,1:4])