1+ #!/usr/bin/env python
2+ # ------------------------------------------------------------------------------------------------------%
3+ # Created by "Thieu Nguyen" at 18:10, 06/04/2020 %
4+ # %
5+ 6+ # Homepage: https://www.researchgate.net/profile/Thieu_Nguyen6 %
7+ # Github: https://github.com/thieunguyen5991 %
8+ # -------------------------------------------------------------------------------------------------------%
9+
110from sklearn .preprocessing import MinMaxScaler
211from utils .PreprocessingUtil import TimeSeries
312from utils .MeasureUtil import MeasureTimeSeries
413from utils .IOUtil import save_all_models_to_csv , save_prediction_to_csv , save_loss_train_to_csv
514from utils .GraphUtil import draw_predict_with_error
615
7- class RootBase (object ):
16+
17+ class RootBase :
818 """
919 This is root of all networks.
1020 """
21+
1122 def __init__ (self , root_base_paras = None ):
1223 self .dataset = root_base_paras ["dataset" ]
1324 self .data_idx = root_base_paras ["data_idx" ]
@@ -16,10 +27,10 @@ def __init__(self, root_base_paras=None):
1627 self .method_statistic = root_base_paras ["method_statistic" ]
1728 self .scaler = MinMaxScaler ()
1829
30+ self .n_runs = root_base_paras ["n_runs" ]
1931 self .path_save_result = root_base_paras ["path_save_result" ]
2032 self .log_filename = root_base_paras ["log_filename" ]
2133 self .multi_output = root_base_paras ["multi_output" ]
22- self .test_type = root_base_paras ["test_type" ]
2334 self .draw = root_base_paras ["draw" ]
2435 self .print_train = root_base_paras ["print_train" ]
2536
@@ -35,57 +46,62 @@ def _preprocessing_3d__(self):
3546 ts = TimeSeries (self .dataset , self .data_idx , self .sliding , self .output_idx , self .method_statistic , self .scaler )
3647 self .X_train , self .y_train , self .X_valid , self .y_valid , self .X_test , self .y_test , self .scaler = ts ._preprocessing_3d__ ()
3748
38- def _save_results__ (self , y_actual = None , y_predict = None , y_actual_normalized = None , y_predict_normalized = None , loss_train = None ):
49+ def _save_results__ (self , y_true = None , y_pred = None , y_true_scaled = None , y_pred_scaled = None , loss_train = None , n_runs = 1 ):
3950 if self .multi_output :
40- measure = MeasureTimeSeries (y_actual_normalized , y_predict_normalized , "raw_values" , number_rounding = 4 )
41- measure .fit ()
42- item = [self .filename , self .time_total_train , self .time_epoch , self .time_predict , self .time_system ,
43- measure .score_ev [0 ], measure .score_mae [0 ], measure .score_mse [0 ], measure .score_msle [0 ],
44- measure .score_r2 [0 ], measure .score_rmse [0 ], measure .score_mape [0 ], measure .score_smape [0 ],
45- measure .score_ev [1 ], measure .score_mae [1 ], measure .score_mse [1 ], measure .score_msle [1 ],
46- measure .score_r2 [1 ], measure .score_rmse [1 ], measure .score_mape [1 ], measure .score_smape [1 ],
47- ]
51+ measure_scaled = MeasureTimeSeries (y_true_scaled , y_pred_scaled , "raw_values" , number_rounding = 4 )
52+ measure_scaled ._fit__ ()
53+ data1 = "CPU_"
54+ data2 = "RAM_"
55+ item = {'model_name' : self .filename , 'total_time_train' : self .time_total_train , 'time_epoch' : self .time_epoch ,
56+ 'time_predict' : self .time_predict , 'time_system' : self .time_system ,
57+ data1 + 'scaled_EV' : measure_scaled .score_ev [0 ], data1 + 'scaled_MSLE' : measure_scaled .score_msle [0 ],
58+ data1 + 'scaled_R2' : measure_scaled .score_r2 [0 ], data1 + 'scaled_MAE' : measure_scaled .score_mae [0 ],
59+ data1 + 'scaled_MSE' : measure_scaled .score_mse [0 ], data1 + 'scaled_RMSE' : measure_scaled .score_rmse [0 ],
60+ data1 + 'scaled_MAPE' : measure_scaled .score_mape [0 ], data1 + 'scaled_SMAPE' : measure_scaled .score_smape [0 ],
61+
62+ data2 + 'scaled_EV' : measure_scaled .score_ev [1 ], data2 + 'scaled_MSLE' : measure_scaled .score_msle [1 ],
63+ data2 + 'scaled_R2' : measure_scaled .score_r2 [1 ], data2 + 'scaled_MAE' : measure_scaled .score_mae [1 ],
64+ data2 + 'scaled_MSE' : measure_scaled .score_mse [1 ], data2 + 'scaled_RMSE' : measure_scaled .score_rmse [1 ],
65+ data2 + 'scaled_MAPE' : measure_scaled .score_mape [1 ], data2 + 'scaled_SMAPE' : measure_scaled .score_smape [1 ]}
66+
67+ if n_runs == 1 :
68+ save_prediction_to_csv (y_true [:, 0 :1 ], y_pred [:, 0 :1 ], self .filename , self .path_save_result + data1 )
69+ save_prediction_to_csv (y_true [:, 1 :2 ], y_pred [:, 1 :2 ], self .filename , self .path_save_result + data2 )
70+ save_loss_train_to_csv (loss_train , self .filename , self .path_save_result + "Error-" )
71+
72+ if self .draw :
73+ draw_predict_with_error (1 , [y_true [:, 0 :1 ], y_pred [:, 0 :1 ]], [measure_scaled .score_rmse [0 ], measure_scaled .score_mae [0 ]], self .filename ,
74+ self .path_save_result + data1 )
75+ draw_predict_with_error (2 , [y_true [:, 1 :2 ], y_pred [:, 1 :2 ]], [measure_scaled .score_rmse [1 ], measure_scaled .score_mae [1 ]], self .filename ,
76+ self .path_save_result + data2 )
77+ if self .print_train :
78+ print ('Predict DONE - CPU - RMSE: %f, RAM - RMSE: %f' % (measure_scaled .score_rmse [0 ], measure_scaled .score_rmse [1 ]))
4879 save_all_models_to_csv (item , self .log_filename , self .path_save_result )
49- save_prediction_to_csv (y_actual [:,0 :1 ], y_predict [:,0 :1 ], self .filename , self .path_save_result + "CPU-" )
50- save_prediction_to_csv (y_actual [:,1 :2 ], y_predict [:,1 :2 ], self .filename , self .path_save_result + "RAM-" )
51- save_loss_train_to_csv (loss_train , self .filename , self .path_save_result + "Error-" )
52- if self .draw :
53- draw_predict_with_error (1 , [y_actual [:,0 :1 ], y_predict [:,0 :1 ]], [measure .score_rmse [0 ], measure .score_mae [0 ]], self .filename , self .path_save_result + "CPU-" )
54- draw_predict_with_error (2 , [y_actual [:,1 :2 ], y_predict [:,1 :2 ]], [measure .score_rmse [1 ], measure .score_mae [1 ]], self .filename , self .path_save_result + "RAM-" )
55- if self .print_train :
56- print ('Predict DONE - CPU - RMSE: %f, RAM - RMSE: %f' % (measure .score_rmse [0 ], measure .score_rmse [1 ]))
80+
5781 else :
58- measure_nor = MeasureTimeSeries (y_actual_normalized , y_predict_normalized , None , number_rounding = 4 )
59- measure_nor .fit ()
60- measure_denor = MeasureTimeSeries (y_actual , y_predict , None , number_rounding = 4 )
61- measure_denor .fit ()
62-
63- item = [self .filename , self .time_total_train , self .time_epoch , self .time_predict , self .time_system ,
64- measure_nor .score_ev , measure_nor .score_mae , measure_nor .score_mse , measure_nor .score_msle ,
65- measure_nor .score_r2 , measure_nor .score_rmse , measure_nor .score_mape [0 ], measure_nor .score_smape [0 ],
66- measure_denor .score_ev , measure_denor .score_mae , measure_denor .score_mse , measure_denor .score_msle ,
67- measure_denor .score_r2 , measure_denor .score_rmse , measure_denor .score_mape [0 ], measure_denor .score_smape [0 ]
68- ]
82+ measure_scaled = MeasureTimeSeries (y_true_scaled , y_pred_scaled , None , number_rounding = 4 )
83+ measure_scaled ._fit__ ()
84+ measure_unscaled = MeasureTimeSeries (y_true , y_pred , None , number_rounding = 4 )
85+ measure_unscaled ._fit__ ()
86+
87+ item = {'model_name' : self .filename , 'total_time_train' : self .time_total_train , 'time_epoch' : self .time_epoch ,
88+ 'time_predict' : self .time_predict , 'time_system' : self .time_system ,
89+ 'scaled_EV' : measure_scaled .score_ev , 'scaled_MSLE' : measure_scaled .score_msle , 'scaled_R2' : measure_scaled .score_r2 ,
90+ 'scaled_MAE' : measure_scaled .score_mae , 'scaled_MSE' : measure_scaled .score_mse , 'scaled_RMSE' : measure_scaled .score_rmse ,
91+ 'scaled_MAPE' : measure_scaled .score_mape , 'scaled_SMAPE' : measure_scaled .score_smape ,
92+ 'unscaled_EV' : measure_unscaled .score_ev , 'unscaled_MSLE' : measure_unscaled .score_msle , 'unscaled_R2' : measure_unscaled .score_r2 ,
93+ 'unscaled_MAE' : measure_unscaled .score_mae , 'unscaled_MSE' : measure_unscaled .score_mse , 'unscaled_RMSE' : measure_unscaled .score_rmse ,
94+ 'unscaled_MAPE' : measure_unscaled .score_mape , 'unscaled_SMAPE' : measure_unscaled .score_smape }
95+
96+ if n_runs == 1 :
97+ save_prediction_to_csv (y_true , y_pred , self .filename , self .path_save_result )
98+ save_loss_train_to_csv (loss_train , self .filename , self .path_save_result + "Error-" )
99+ if self .draw :
100+ draw_predict_with_error ([y_true , y_pred ], [measure_unscaled .score_rmse , measure_unscaled .score_mae ], self .filename , self .path_save_result )
101+ if self .print_train :
102+ print ('Predict DONE - RMSE: %f, MAE: %f' % (measure_unscaled .score_rmse , measure_unscaled .score_mae ))
103+
69104 save_all_models_to_csv (item , self .log_filename , self .path_save_result )
70- save_prediction_to_csv (y_actual , y_predict , self .filename , self .path_save_result )
71- save_loss_train_to_csv (loss_train , self .filename , self .path_save_result + "Error-" )
72- if self .draw :
73- draw_predict_with_error (1 , [y_actual , y_predict ], [measure_denor .score_rmse , measure_denor .score_mae ], self .filename , self .path_save_result )
74- if self .print_train :
75- print ('Predict DONE - RMSE: %f, MAE: %f' % (measure_denor .score_rmse , measure_denor .score_mae ))
76-
77- def _save_results_ntimes_run__ (self , y_actual = None , y_predict = None , y_actual_normalized = None , y_predict_normalized = None ):
78- measure_nor = MeasureTimeSeries (y_actual_normalized , y_predict_normalized , None , number_rounding = 4 )
79- measure_nor .fit ()
80- measure_denor = MeasureTimeSeries (y_actual , y_predict , None , number_rounding = 4 )
81- measure_denor .fit ()
82- item = [self .filename , self .time_total_train , self .time_epoch , self .time_predict , self .time_system ,
83- measure_nor .score_ev , measure_nor .score_mae , measure_nor .score_mse , measure_nor .score_msle ,
84- measure_nor .score_r2 , measure_nor .score_rmse , measure_nor .score_mape [0 ], measure_nor .score_smape [0 ],
85- measure_denor .score_ev , measure_denor .score_mae , measure_denor .score_mse , measure_denor .score_msle ,
86- measure_denor .score_r2 , measure_denor .score_rmse , measure_denor .score_mape [0 ], measure_denor .score_smape [0 ]
87- ]
88- save_all_models_to_csv (item , self .log_filename , self .path_save_result )
89105
90106 def _forecasting__ (self ):
91107 pass
0 commit comments