The content discusses the process of model evaluation and parameter selection. Parameter selection involves selecting the best hyper-parameters for a model by training and evaluating it with different parameter values. For the elastic-net model, users typically need prior knowledge to set the configuration parameters `ENET_LAMBDA` and `ENET_ALPHA`. However, if users lack this knowledge, they can use the model evaluation and parameter selection function provided by the current implementation.

Instead of providing a single value for `ENET_LAMBDA` and `ENET_ALPHA`, users can provide a set of candidate values. The function will then automate the process of training and validating the model with each candidate value and select the best one. This eliminates the need for users to manually test various values, saving time and effort.

The parameter selection process can be time-consuming, especially if the candidate space is large. To speed up the process, the function supports an early-stop technique called successive-halving and hyperband algorithm. However, these greedy algorithms may not always find the best candidates.
------

SET SCHEMA DM_PAL;

DROP TABLE PAL_MCLR_DATA_TBL;
CREATE COLUMN TABLE PAL_MCLR_DATA_TBL (
    "V1" VARCHAR (50),
    "V2" DOUBLE,
    "V3" INTEGER,
    "CATEGORY" INTEGER
);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',2.62,0,1);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',2.875,0,1);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('A',2.32,1,1);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('A',3.215,2,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',3.44,3,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',3.46,0,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('A',3.57,1,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',3.19,2,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('A',3.15,3,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',3.44,0,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',3.44,1,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('A',4.07,3,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('A',3.73,1,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',3.78,2,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',5.25,2,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('A',5.424,3,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('A',5.345,0,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',2.2,1,1);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',1.615,2,1);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('A',1.835,0,1);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',2.465,3,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('A',3.52,1,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('A',3.435,0,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',3.84,2,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',3.845,3,0);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('A',1.935,1,1);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',2.14,0,1);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',1.513,1,1);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('A',3.17,3,1);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',2.77,0,1);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('B',3.57,0,1);
INSERT INTO PAL_MCLR_DATA_TBL VALUES ('A',2.78,3,1);

DROP TABLE PAL_PARAMETER_TBL;
CREATE COLUMN TABLE PAL_PARAMETER_TBL ( 
    "PARAM_NAME" NVARCHAR (256),
    "INT_VALUE" INTEGER,
    "DOUBLE_VALUE" DOUBLE,
    "STRING_VALUE" NVARCHAR (1000)
);
INSERT INTO PAL_PARAMETER_TBL VALUES ('MAX_ITERATION',500,NULL,NULL); 
INSERT INTO PAL_PARAMETER_TBL VALUES ('PMML_EXPORT',1,NULL,NULL);
INSERT INTO PAL_PARAMETER_TBL VALUES ('HAS_ID',0,NULL,NULL);  
INSERT INTO PAL_PARAMETER_TBL VALUES ('STANDARDIZE',1,NULL,NULL); 
--parameters to be selected
INSERT INTO PAL_PARAMETER_TBL VALUES ('ENET_LAMBDA_VALUES', NULL, NULL, '{0.01,0.02,0.03167}'); 
INSERT INTO PAL_PARAMETER_TBL VALUES ('ENET_ALPHA_VALUES', NULL, NULL, '{0.15,0.2,0.7}'); 

--Successive-Halving related parameters
INSERT INTO PAL_PARAMETER_TBL VALUES ('RESAMPLING_METHOD', NULL, NULL, 'cv_sha'); 
INSERT INTO PAL_PARAMETER_TBL VALUES ('RESOURCE', NULL, NULL, 'MAX_ITERATION'); 
INSERT INTO PAL_PARAMETER_TBL VALUES ('MAX_RESOURCE', 100, NULL, NULL); 
INSERT INTO PAL_PARAMETER_TBL VALUES ('MIN_RESOURCE_RATE', NULL, 0.2, NULL); 

--parameter selection parameters
INSERT INTO PAL_PARAMETER_TBL VALUES ('EVALUATION_METRIC', NULL, NULL, 'F1_SCORE');
INSERT INTO PAL_PARAMETER_TBL VALUES ('FOLD_NUM', 2, NULL, NULL);
INSERT INTO PAL_PARAMETER_TBL VALUES ('REPEAT_TIMES', 2, NULL, NULL);
INSERT INTO PAL_PARAMETER_TBL VALUES ('SEED', 2022, NULL, NULL);
INSERT INTO PAL_PARAMETER_TBL VALUES ('PARAM_SEARCH_STRATEGY', NULL, NULL, 'grid');

INSERT INTO PAL_PARAMETER_TBL VALUES ('PROGRESS_INDICATOR_ID', NULL, NULL, 'TEST');

DROP TABLE PAL_MCLR_STATISTIC_TBL;
CREATE COLUMN TABLE PAL_MCLR_STATISTIC_TBL ("STAT_NAME" NVARCHAR(256),"STAT_VALUE" NVARCHAR(1000));

DROP TABLE PAL_MCLR_OPT_PARAM_TBL;
CREATE COLUMN TABLE PAL_MCLR_OPT_PARAM_TBL ("PARAM_NAME" NVARCHAR(256),"INT_VALUE" INTEGER, "DOUBLE_VALUE" DOUBLE, "STRING_VALUE" NVARCHAR(1000));

DO BEGIN
lt_data = SELECT * FROM PAL_MCLR_DATA_TBL;
lt_para = SELECT * FROM PAL_PARAMETER_TBL;
CALL _SYS_AFL.PAL_MULTICLASS_LOGISTIC_REGRESSION (:lt_data,:lt_para,lt_result,lt_pmml_model,lt_stat,lt_opt_para);
INSERT INTO PAL_MCLR_STATISTIC_TBL
SELECT * FROM :lt_stat;
INSERT INTO PAL_MCLR_OPT_PARAM_TBL
SELECT * FROM :lt_opt_para;
END;

SELECT * FROM PAL_MCLR_STATISTIC_TBL;
SELECT * FROM PAL_MCLR_OPT_PARAM_TBL;
