0.2 Datasets to Test

0.3 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 = "m", ydmv = "m", scale = T)
    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
    iter   <- 150

    descr  <- paste(dset, "radiant.model::nn", 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
        NNreg   <- tryCatch(
                            radiant.model::nn(Zxy, rvar = "y", evar = colnames(Z)[-ncol(Z)],
                                              type = "regression", size = neur, decay = 0),
                            error = function(y) {lm(y ~ 0, data = Zxy)}
                          )     
        y_pred  <- tryCatch(
                            ym0 + ysd0*predict(NNreg, Zxy)$Prediction,
                            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 = iter, 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.4 Results

0.5 Best Results

dataset method minRMSE meanRMSE meanTime
mDette NA 0.0672 0.34563 1.477
mFriedman NA 0.0039 0.03627 1.529
mIshigami NA 0.4092 0.71544 3.276
mRef153 NA 3.1734 3.23216 0.094
uDmod1 NA 0.0433 0.06117 0.115
uDmod2 NA 0.0406 0.05088 0.100
uDreyfus1 NA 0.0044 0.01563 0.045
uDreyfus2 NA 0.0906 0.10233 0.055
uGauss1 NA 2.2331 4.13340 0.220
uGauss2 NA 2.3393 3.27554 0.152
uGauss3 NA 2.2784 2.87565 0.231
uNeuroOne NA 0.2830 0.28300 0.022