# R Project for Neural Networks: Rattling Around

One benefit of `Rattle`

is that it allows you to easily experiment with whatever it helps you create with R. Here’s a little project for you to try. You’ll learn more about neural networks if you can see how the network error rate decreases with the number of iterations through the training set.

So the objective is to plot the error rate for the `banknote.uci`

network as a function of the number of iterations through the training data. You should expect to see a decline as the number of iterations increases.

The measure of error for this little project is *root mean square error* (RMSE), which is the standard deviation of the residuals. Each residual is the difference between the network’s decision and the correct answer. You’ll create a vector that holds the RMSE for each number of iterations and then plot the vector against the number of iterations.

So the first line of code is

`rmse <- NULL`

Next, click the `rattle`

Log tab and scroll down to find the R code that creates the neural network:

crs$nnet <- nnet(as.factor(Class) ~ ., data=crs$dataset[crs$sample,c(crs$input, crs$target)], size=3, skip=TRUE, MaxNWts=10000, trace=FALSE, maxit=100)

The values in the `data`

argument are based on Data tab selections. The `skip`

argument allows for the possibility of creating *skip layers* (layers whose connections skip over the succeeding layer). The argument of most interest here is `maxit`

, which specifies the maximum number of iterations.

Copy this code into RStudio.

Set `maxit`

to `i`

, and put this code into a `for`

-loop in which `i`

goes from 2 to 90.

The residuals are stored in `crs$nnet$residuals`

. The RMSE is `sd(crs$nnet$residuals)`

. Use that to update `rmse`

:

`rmse <- append(rmse,sd(crs$nnet$residuals))`

So the general outline for the `for`

-loop is

for (i in 2:90){crs$nnet <- create the neural net with maxit=i) update the rmse vector }

(This `for`

-loop might take a few more seconds to run than you’re accustomed to.)

Finally, use the `plot()`

function to plot RMSE on the *y-*axis and to plot iterations on the *x-*axis:

`plot(x=2:90, y=rmse, type="b", xlab="Iterations", ylab= "Root Mean Square")`

Your plot should look like this one.

Here’s one more suggested project: Take another look at the code for creating `crs$nnet`

. Does anything suggest itself as something of interest that relates to RMSE? Something you could vary in a `for`

-loop while holding `maxit`

constant? And then plot RMSE against that thing? Go for it!