我想弄清楚如何使神经网络包工作。我用我创建的数据和它们的结果做了一些测试(大约 50 行数据和三列,第四个是我想要的结果,它是通过简单的数学执行得出的,比如对其他三列求和),到目前为止一切顺利。然后我决定将该包应用于真实数据。我从这里下载了 mpg 数据集 http://vincentarelbundock.github.io/Rdatasets/datasets.html

我正在运行以下代码:

net<- neuralnet(cty~displ+year+cyl+hwy,
                datain, hidden=3)

即使我有 3 个隐藏层,或者 8 个或 18 个,错误也是一样的,并且包处理数据的时间相对于这个数据量(234 行)来说相对较小:
        Error Reached Threshold Steps
1 2110.173077    0.006277805853    54

对此有什么好的建议吗?

最佳答案

我猜这是一个规模问题,您可以对其进行标准化或规模化。scalingnormalizing 之间存在差异,它会影响您的结果,因此值得单独提出一个问题:

标准化输入

norm.fun = function(x){
  (x - min(x))/(max(x) - min(x))
}

require(ggplot2) # load mpg dataset
require(neuralnet)

data = mpg[, c('cty', 'displ', 'year', 'cyl', 'hwy')]
data.norm = apply(data, 2, norm.fun)

net = neuralnet(cty ~ displ + year + cyl + hwy, data.norm, hidden = 2)

然后你可以对数据进行非规范化
# restore data
y.net = min(data[, 'cty']) + net$net.result[[1]] * range(data[, 'cty'])
plot(data[, 'cty'], col = 'red')
points(y.net)

规模输入
data.scaled = scale(data)
net = neuralnet(cty ~ displ + year + cyl + hwy, data.scaled, hidden = 2)

# restore data
y.sd = sd(data[, 'cty'])
y.mean = mean(data[, 'cty'])

y.net = net$net.result[[1]] * y.sd + y.mean
plot(data[, 'cty'], col = 'red')
points(y.net)

你也可以试试nnet包,它非常快:
require(nnet)

data2 = mpg
data2$year = scale(data2$year)
fit = nnet(cty ~ displ + year + cyl + hwy, size = 10, data = data2, linout = TRUE)
plot(mpg$cty)
points(fit$fitted.values, col = 'red')

关于r - R中的Neuralnet包大错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20665830/

10-12 17:41