I\'m still pretty new to R and AI / ML techniques. I would like to use a neural net for prediction, and since I\'m new I would just like to see if this is how it should be done.
I really like the caret
package, as it provides a nice, unified interface to a variety of models, such as nnet
. Furthermore, it automatically tunes hyperparameters (such as size
and decay
) using cross-validation or bootstrap re-sampling. The downside is that all this re-sampling takes some time.
#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)
It also predicts on the proper scale, so you can directly compare results. If you are interested in neural networks, you should also take a look at the neuralnet
and RSNNS
packages. caret
can currently tune nnet
and neuralnet
models, but does not yet have an interface for RSNNS
.
/edit: caret
now has an interface for RSNNS
. It turns out if you email the package maintainer and ask that a model be added to caret
he'll usually do it!
/edit: caret
also now supports Bayesian regularization for feed-forward neural networks from the brnn package. Furthermore, caret now also makes it much easier to specify your own custom models, to interface with any neural network package you like!