我正在使用neuralnet包,使用几个输入来预测输出.
最初,我的输出是一个因子变量,我看到了错误:
Error in neurons[[i]] %*% weights[[i]] :
requires numeric/complex matrix/vector arguments
Run Code Online (Sandbox Code Playgroud)
当我将输出转换为numeric变量时,错误消失了.有没有办法使用因子输出神经网络?
我修改了我在这个站点找到的代码,它使用带有神经网络包的虹膜数据集来预测形态数据中的虹膜种类.
没有可重复的例子,我不确定这是否适用于您的情况.这里的关键是将阶乘响应级别转换为自己的二进制变量.预测与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)
| 归档时间: |
|
| 查看次数: |
6297 次 |
| 最近记录: |