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

R 使用nnet进行预测,我做得对吗?,r,machine-learning,neural-network,idioms,R,Machine Learning,Neural Network,Idioms,我对R和AI/技术还是相当陌生的。我想用神经网络来预测,因为我是新来的,我只想看看这是不是应该这样做 作为一个测试用例,我根据前面的两个值预测sin()。对于训练,我用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 <-

我对R和AI/技术还是相当陌生的。我想用神经网络来预测,因为我是新来的,我只想看看这是不是应该这样做

作为一个测试用例,我根据前面的两个值预测
sin()
。对于训练,我用
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)
require(quantmod)#用于滞后()
需求(nnet)

x我非常喜欢
caret
软件包,因为它为各种型号提供了一个很好的统一接口,例如
nnet
。此外,它使用交叉验证或引导重新采样自动调整超参数(例如
大小
衰减
)。缺点是所有这些重新采样都需要一些时间

#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)
#加载包
需要(quantmod)#用于滞后()
要求(nnet)
需要(插入符号)
#制作玩具数据集

y
predict()
调用看起来可疑。你不是在用“y”预测“y”吗?另一方面,它可能无法实际提供新数据,因为它不是数据帧。所以你们可以用“te”中的滞后值来“预测”。您可以查看
expand
以避免需要“pkg:quantmod”,我添加了一个更好的预测示例,您认为实际使用的是nnet模型吗?当绘制时,它似乎给出了一个sin。您可以通过以与预测相同的比例绘制原始图像进行检查:
plot(x,vv);行(x,y)
并且您看到有一个滞后(这似乎是您所期望的)。为了更好地理解,在关于R+DNN中有一个示例。非常感谢,看起来很棒。很抱歉,由于某种原因,我错过了回复的通知+很好的示例。您的答案是在[r]nnet predict上搜索到的第一个答案。@DWin谢谢!听到这个我很高兴!
#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)