我试图找出如何使神经网络包工作。我对我创建的数据及其结果进行了一些测试(大约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
对此有什么好的建议吗?
答案 0 :(得分:8)
我猜这是一个比例问题,你可以将其标准化或缩放。
scaling
和normalizing
之间存在差异,它会影响您的搜索结果并值得单独提问:
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')