在R中使用神经网络神经网络来预测因子值

时间:2015-11-25 08:11:51

标签: r neural-network

我正在使用neuralnet包,使用多个输入来预测输出。

最初,我的输出是一个因子变量,我看到了错误:

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

当我将输出转换为numeric变量时,错误消失了。神经网络是否有通过因子输出的方法?

2 个答案:

答案 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)

enter image description here

# 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])