Coverage for addmo_examples/executables/exe_model_tuning.py: 83%
54 statements
« prev ^ index » next coverage.py v7.4.4, created at 2025-08-31 13:05 +0000
« prev ^ index » next coverage.py v7.4.4, created at 2025-08-31 13:05 +0000
1# # Model tuning tutorial
2import os
3import pandas as pd
4from addmo.util.definitions import results_dir_model_tuning, results_dir_data_tuning_auto, results_dir_data_tuning_fixed
5from addmo.util.load_save_utils import root_dir
6from addmo.util.experiment_logger import LocalLogger
7from addmo.util.experiment_logger import WandbLogger
8from addmo.util.experiment_logger import ExperimentLogger
9from addmo.s3_model_tuning.models.keras_models import SciKerasSequential
10from addmo.s3_model_tuning.config.model_tuning_config import ModelTuningExperimentConfig
11from addmo.s3_model_tuning.config.model_tuning_config import ModelTunerConfig
12from addmo.s3_model_tuning.model_tuner import ModelTuner
13from addmo.util.load_save import load_data
14from addmo.util.load_save import load_config_from_json
15from addmo.util.data_handling import split_target_features
16from addmo.s5_insights.model_plots.scatter_plot import scatter
17from addmo.util.plotting_utils import save_pdf
20def exe_model_tuning(user_input='y', config_exp=None, config_tuner=None):
21 """
22 Executes model tuning process and returns the best model.
23 Parameters:
24 user_input : str, optional
25 If 'y', the contents of the target results directory will be overwritten.
26 If 'd', the directory contents will be deleted. Default is 'y'.
27 config_exp : DataTuningExperimentConfig
28 config_tuner : ModelTunerConfig
29 """
31 # Configure the logger
32 LocalLogger.active = True
33 if LocalLogger.active:
34 LocalLogger.directory = results_dir_model_tuning( config_exp,user_input)
35 WandbLogger.project = "addmo-test_model_tuning"
36 WandbLogger.active = False
37 if WandbLogger.active:
38 WandbLogger.directory = results_dir_model_tuning(config_exp,user_input)
40 # Initialize logging
41 ExperimentLogger.start_experiment(config=config_exp)
43 # Create the model tuner
44 model_tuner = ModelTuner(config=config_tuner)
46 # Load the system_data
47 xy_tuned = load_data(config_exp.abs_path_to_data)
49 # Select training and validation period
50 if config_exp.start_train_val and config_exp.stop_train_val:
51 xy_tuned_train_val = xy_tuned.loc[config_exp.start_train_val:config_exp.stop_train_val]
52 else:
53 xy_tuned_train_val = xy_tuned
54 x_train_val, y_train_val = split_target_features(config_exp.name_of_target, xy_tuned_train_val)
56 # log start and end of the system_data
57 ExperimentLogger.log({"xy_tuned_train_val": pd.concat([xy_tuned_train_val.head(5), xy_tuned_train_val.tail(5)])})
59 # Tune the models
60 model_dict = model_tuner.tune_all_models(x_train_val, y_train_val)
62 # Get the best model
63 best_model_name = model_tuner.get_best_model_name(model_dict)
64 best_model = model_tuner.get_model(model_dict, best_model_name)
65 y_pred = best_model.predict(x_train_val)
66 # Log the best model
67 if isinstance(best_model, SciKerasSequential):
68 art_type = 'keras'
69 else:
70 art_type = 'joblib'
71 name = 'best_model'
72 ExperimentLogger.log_artifact(best_model, name, art_type)
73 saved_data_name = config_exp.abs_path_to_data.split(".")[0]
74 ExperimentLogger.log_artifact(xy_tuned,saved_data_name , "system_data")
75 plt = scatter(y_train_val, y_pred, config_exp.name_of_target, best_model.fit_error)
76 save_pdf(plt, os.path.join(LocalLogger.directory, 'model_fit_scatter'))
77 plt.show()
80 print("Finished")
82if __name__ == "__main__":
83 # Read config from existing json file
84 path_to_config_exp = os.path.join(root_dir(), 'addmo', 's3_model_tuning', 'config',
85 'model_tuner_experiment_config.json')
86 path_to_config_tuner= os.path.join(root_dir(), 'addmo', 's3_model_tuning', 'config',
87 'model_tuner_config.json')
88 config_exp = load_config_from_json(path_to_config_exp, ModelTuningExperimentConfig)
89 config_tuner = load_config_from_json(path_to_config_tuner, ModelTunerConfig)
91 user_input = input(
92 "To overwrite the existing content type in 'addmo_examples/results/test_raw_data/test_data_tuning/test_model_tuning' results directory <y>, for deleting the current contents type <d>: ")
93 # run
94 exe_model_tuning(user_input, config_exp, config_tuner)