0.2 Datasets to Test

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)
}

0.5 Results

0.6 Best Results

dataset method minRMSE meanRMSE meanTime
mDette adam 0.9403 1.63690 0.779
rmsprop 0.4974 1.56535 0.733
sgd 0.7987 1.46233 0.971
mFriedman adam 0.0149 0.02278 0.875
rmsprop 0.0181 0.03413 0.837
sgd 0.0168 0.02672 1.087
mIshigami adam 0.6756 0.88736 1.794
rmsprop 0.6577 0.89718 1.687
sgd 0.6848 1.97207 2.868
mRef153 adam 3.2289 3.39483 0.171
rmsprop 3.1391 3.34378 0.165
sgd 3.5656 3.82933 0.209
uDmod1 adam 0.2024 0.28336 0.055
rmsprop 0.2073 0.25237 0.049
sgd 0.3294 0.33925 0.066
uDmod2 adam 0.1492 0.19013 0.051
rmsprop 0.1539 0.16440 0.048
sgd 0.2746 0.27892 0.064
uDreyfus1 adam 0.0989 0.27239 0.037
rmsprop 0.1173 0.21234 0.036
sgd 0.3561 0.36190 0.045
uDreyfus2 adam 0.1122 0.24163 0.035
rmsprop 0.1521 0.25291 0.034
sgd 0.3740 0.38388 0.045
uGauss1 adam 2.4605 2.82419 0.350
rmsprop 2.4518 4.43376 0.319
sgd 12.6453 13.08496 0.410
uGauss2 adam 2.5576 3.17807 0.301
rmsprop 3.0228 3.67480 0.285
sgd 9.3177 9.78718 0.365
uGauss3 adam 2.4815 3.22706 0.301
rmsprop 2.3995 3.07776 0.283
sgd 5.4947 5.96468 0.373
uNeuroOne adam 0.2851 0.30863 0.031
rmsprop 0.2839 0.28914 0.031
sgd 0.3609 0.38359 0.038