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

mam*_*atv 1 r neural-network

我正在使用neuralnet包,使用几个输入来预测输出.

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

Error in neurons[[i]] %*% weights[[i]] : 
  requires numeric/complex matrix/vector arguments
Run Code Online (Sandbox Code Playgroud)

当我将输出转换为numeric变量时,错误消失了.有没有办法使用因子输出神经网络?

Mar*_*box 6

我修改了我在这个站点找到的代码,它使用带有神经网络包的虹膜数据集来预测形态数据中的虹膜种类.

没有可重复的例子,我不确定这是否适用于您的情况.这里的关键是将阶乘响应级别转换为自己的二进制变量.预测与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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

# 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
Run Code Online (Sandbox Code Playgroud)