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, "rminer::fit", 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(
                            rminer::fit(fmla, data = Zxy, 
                                        model = "mlp", task = "reg", 
                                        size = neur, maxit = iter),
                            error = function(y) {lm(y ~ 0, data = Zxy)}
                          )     
        y_pred  <- tryCatch(
                            ym0 + ysd0*as.numeric(predict(NNreg, newdata = x)),
                            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.3116 0.41874 0.336
mFriedman NA 0.0134 0.02043 0.365
mIshigami NA 0.6852 0.85254 0.779
mRef153 NA 3.0948 3.21471 0.096
uDmod1 NA 0.0453 0.05333 0.055
uDmod2 NA 0.0405 0.05161 0.049
uDreyfus1 NA 0.0021 0.00417 0.034
uDreyfus2 NA 0.0906 0.09061 0.034
uGauss1 NA 2.2392 2.35725 0.207
uGauss2 NA 2.3879 2.87874 0.171
uGauss3 NA 2.2865 2.62387 0.166
uNeuroOne NA 0.2830 0.28300 0.016