我非常喜欢caret
包,因为它为各种模型(例如nnet
提供了一个不错的统一接口。此外,它使用交叉验证或自举重新采样自动调整超参数(例如size
和decay
)。缺点是所有这些重新采样都需要一些时间。
#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)
它还可以在适当的规模上进行预测,因此您可以直接比较结果。如果你有兴趣在神经网络中,你也应该看看的neuralnet
和RSNNS
包。 caret
当前可以调整nnet
和neuralnet
模型,但还没有RSNNS
的接口。
/ edit: caret
现在具有RSNNS
的接口。事实证明,如果您向软件包维护者发送电子邮件,并要求将模型添加到caret
他通常会这样做!
/ edit: caret
现在还支持brnn包中的前馈神经网络的贝叶斯正则化。此外,插入符号现在还可以更轻松地指定您自己的自定义模型 ,以与您喜欢的任何神经网络包进行交互!
0
我对R和AI / ML技术还很陌生 。我想使用神经网络进行预测,由于我是新手,所以我只想看看这是应该怎么做的。
作为测试用例,我基于两个先前的值预测
sin()
值。为了进行训练,我创建了一个数据框,其中y = sin(x)
,x1 = sin(x-1)
,x2 = sin(x-2)
,然后使用公式y ~ x1 + x2
。它似乎可行,但是我只是想知道这是否是正确的方法,或者是否有更惯用的方法。
这是代码:
谢谢
[编辑]
这对于预测电话更好吗?
我想我很想看看nnet实际上是通过查看其预测来工作的(它应该近似于正弦波)。