使用nnet进行预测,我做得对吗?

diz*_*zzy 17 r machine-learning idiomatic neural-network

我对R和AI/ML技术还很陌生.我想用神经网络进行预测,因为我是新手,我只想知道这是不是应该怎么做.

作为测试用例,我sin()基于之前的2个值预测值.对于训练我创建的数据帧与y = sin(x),x1 = sin(x-1),x2 = sin(x-2),然后使用公式y ~ x1 + x2.

它似乎有效,但我只是想知道这是否是正确的方法,或者是否有更惯用的方式.

这是代码:

require(quantmod) #for Lag()
requre(nnet)
x <- seq(0, 20, 0.1)
y <- sin(x)
te <- data.frame(y, Lag(y), Lag(y,2))
names(te) <- c("y", "x1", "x2")
p <- nnet(y ~ x1 + x2, data=te, linout=TRUE, size=10)
ps <- predict(p, x1=y)
plot(y, type="l")
lines(ps, col=2)
Run Code Online (Sandbox Code Playgroud)

谢谢

[编辑]

这对预测电话有好处吗?

t2 <- data.frame(sin(x), Lag(sin(x)))
names(t2) <- c("x1", "x2")
vv <- predict(p, t2)
plot(vv)
Run Code Online (Sandbox Code Playgroud)

我想我想通过查看它的预测(它应该接近一个正弦波)来看到nnet实际上正在工作.

Zac*_*ach 46

我非常喜欢这个caret包,因为它为各种模型提供了一个漂亮的统一界面,例如nnet.此外,它使用交叉验证或引导重新采样自动调整超参数(例如sizedecay).缺点是所有这些重新采样都需要一些时间.

#Load Packages
require(quantmod) #for Lag()
require(nnet)
require(caret)

#Make toy dataset
y <- sin(seq(0, 20, 0.1))
te <- data.frame(y, x1=Lag(y), x2=Lag(y,2))
names(te) <- c("y", "x1", "x2")

#Fit model
model <- train(y ~ x1 + x2, te, method='nnet', linout=TRUE, trace = FALSE,
                #Grid of tuning parameters to try:
                tuneGrid=expand.grid(.size=c(1,5,10),.decay=c(0,0.001,0.1))) 
ps <- predict(model, te)

#Examine results
model
plot(y)
lines(ps, col=2)
Run Code Online (Sandbox Code Playgroud)

它还可以预测适当的比例,因此您可以直接比较结果.如果您对神经网络感兴趣,您还应该看看neuralnetRSNNS包. caret目前可以调整nnetneuralnet模型,但还没有接口RSNNS.

/ edit:caret现在有一个接口RSNNS.事实证明,如果您通过电子邮件发送软件包维护人员并要求添加模型,caret他通常会这样做!

/ edit:caret现在还支持来自brnn包的前馈神经网络的贝叶斯正则化.此外,插入符号现在还可以更轻松地指定您自己的自定义模型,与您喜欢的任何神经网络包进行交互!

  • 非常感谢,看起来很棒.很抱歉因为我错过了回复通知的延迟 (5认同)
  • +很好的例子.您的答案首先会被搜索到'[r] nnet predict'. (4认同)