0.4 Main Loop
for (dset in names(NNdatasets)) {
##Â =============================================
##Â EXTRACT INFORMATION FROM THE SELECTED DATASET
##Â =============================================
ds <- NNdatasets[[dset]]$ds
Z <- NNdatasets[[dset]]$Z
neur <- NNdatasets[[dset]]$neur
nparNN <- NNdatasets[[dset]]$nparNN
fmlaNN <- NNdatasets[[dset]]$fmlaNN
donotremove <- c("dset", "dsets", "ds", "Z", "neur", "TF", "nrep", "timer",
"donotremove", "donotremove2")
donotremove2 <- c("dset", "dsets")
##Â ===================================================
## SELECT THE FORMAT REQUIRED BY THE PACKAGE/ALGORITHM
## d = data.frame, m = matrix, v = vector/numeric
##Â ATTACH THE OBJECTS CREATED (x, y, Zxy, ... )
## ===================================================
ZZ <- prepareZZ(Z, xdmv = "d", ydmv = "v", zdm = "d", scale = TRUE)
attach(ZZ)
##Â =============================================
##Â SELECT THE PACKAGE USED FOR TRAINING
## nrep => SELECT THE NUMBER OF INDEPENDANT RUNS
##Â iter => SELECT THE MAX NUMBER OF ITERATIONS
##Â TF => PLOT THE RESULTS
##Â =============================================
nrep <- 10
TF <- TRUE
method <- c("sgd", "adam", "rmsprop")
for (m in method) {
descr <- paste(dset, "ANN2::neuralnetwork", m, sep = "_")
##Â AUTO
Ypred <- list()
Rmse <- numeric(length = nrep)
Mae <- numeric(length = nrep)
for(i in 1:nrep){
event <- paste0(descr, sprintf("_%.2d", i))
timer$start(event)
#### ADJUST THE FOLLOWING LINES TO THE PACKAGE::ALGORITHM
hyper_params <- hyperParams(optim_method = m)
NNreg <- tryCatch(
NNtrain(x = x, y = y, hidden_neur = neur, optim_method = m),
error = function(y) {lm(y ~ 0, data = Zxy)}
)
y_pred <- tryCatch(
ym0 + ysd0*predict(NNreg, x)$predictions,
error = ym0
)
####
Ypred[[i]] <- y_pred
Rmse[i] <- funRMSE(y_pred, y0)
Mae[i] <- funMAE(y_pred, y0)
timer$stop(event, RMSE = Rmse[i], MAE = Mae[i], params = hyper_params$params, printmsg = FALSE)
}
best <- which(Rmse == min(Rmse, na.rm = TRUE))[1]
best ; Rmse[[best]]
## ================================================
##Â PLOT ALL MODELS AND THE MODEL WITH THE BEST RMSE
##Â par OPTIONS CAN BE IMPROVED FOR A BETTER DISPLAY
## ================================================
op <- par(mfcol = c(1,2))
plotNN(xory, y0, uni, TF, main = descr)
for (i in 1:nrep) lipoNN(xory, Ypred[[i]], uni, TF, col = i, lwd = 1)
plotNN(xory, y0, uni, TF, main = descr)
lipoNN(xory, Ypred[[best]], uni, TF, col = 4, lwd = 4)
par(op)
}
##Â ===========================
## DETACH ZZ - END OF THE LOOP
##Â ===========================
detach(ZZ)
}