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

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 

18 

19 

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 """ 

30 

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) 

39 

40 # Initialize logging 

41 ExperimentLogger.start_experiment(config=config_exp) 

42 

43 # Create the model tuner 

44 model_tuner = ModelTuner(config=config_tuner) 

45 

46 # Load the system_data 

47 xy_tuned = load_data(config_exp.abs_path_to_data) 

48 

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) 

55 

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

58 

59 # Tune the models 

60 model_dict = model_tuner.tune_all_models(x_train_val, y_train_val) 

61 

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

78 

79 

80 print("Finished") 

81 

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) 

90 

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)