From 5b5f5dfd372964f9fd9fbff5ecc2235ae3da5850 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Sat, 15 Feb 2025 21:11:41 +0100 Subject: [PATCH] perf(qav3): optuna warm start MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .../LightGBMRegressorQuickAdapterV35.py | 28 +++++++++++++------ .../XGBoostRegressorQuickAdapterV35.py | 28 +++++++++++++------ 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py b/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py index 7c1644b..6a849bb 100644 --- a/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py +++ b/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py @@ -274,10 +274,7 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel): study_name = f"hp-{dk.pair}" storage = self.optuna_storage(dk) pruner = optuna.pruners.HyperbandPruner() - try: - optuna.delete_study(study_name=study_name, storage=storage) - except Exception: - pass + previous_study = self.optuna_previous_study(study_name, storage) study = optuna.create_study( study_name=study_name, sampler=optuna.samplers.TPESampler( @@ -288,6 +285,8 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel): direction=optuna.study.StudyDirection.MINIMIZE, storage=storage, ) + if previous_study: + study.enqueue_trial(previous_study.best_params) start = time.time() try: study.optimize( @@ -332,10 +331,7 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel): study_name = f"period-{dk.pair}" storage = self.optuna_storage(dk) pruner = optuna.pruners.HyperbandPruner() - try: - optuna.delete_study(study_name=study_name, storage=storage) - except Exception: - pass + previous_study = self.optuna_previous_study(study_name, storage) study = optuna.create_study( study_name=study_name, sampler=optuna.samplers.TPESampler( @@ -346,6 +342,8 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel): direction=optuna.study.StudyDirection.MINIMIZE, storage=storage, ) + if previous_study: + study.enqueue_trial(previous_study.best_params) start = time.time() try: study.optimize( @@ -379,6 +377,20 @@ class LightGBMRegressorQuickAdapterV35(BaseRegressionModel): logger.info(f"Optuna period hyperopt | {key:>20s} : {value}") return params + def optuna_previous_study( + self, study_name: str, storage + ) -> optuna.study.Study | None: + try: + previous_study = optuna.load_study(study_name=study_name, storage=storage) + previous_study.best_params + except Exception: + previous_study = None + try: + optuna.delete_study(study_name=study_name, storage=storage) + except Exception: + pass + return previous_study + def log_sum_exp_min_max_pred( pred_df: pd.DataFrame, fit_live_predictions_candles: int, label_period_candles: int diff --git a/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py b/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py index 301c469..79666e2 100644 --- a/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py +++ b/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py @@ -275,10 +275,7 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel): study_name = f"hp-{dk.pair}" storage = self.optuna_storage(dk) pruner = optuna.pruners.HyperbandPruner() - try: - optuna.delete_study(study_name=study_name, storage=storage) - except Exception: - pass + previous_study = self.optuna_previous_study(study_name, storage) study = optuna.create_study( study_name=study_name, sampler=optuna.samplers.TPESampler( @@ -289,6 +286,8 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel): direction=optuna.study.StudyDirection.MINIMIZE, storage=storage, ) + if previous_study: + study.enqueue_trial(previous_study.best_params) start = time.time() try: study.optimize( @@ -333,10 +332,7 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel): study_name = f"period-{dk.pair}" storage = self.optuna_storage(dk) pruner = optuna.pruners.HyperbandPruner() - try: - optuna.delete_study(study_name=study_name, storage=storage) - except Exception: - pass + previous_study = self.optuna_previous_study(study_name, storage) study = optuna.create_study( study_name=study_name, sampler=optuna.samplers.TPESampler( @@ -347,6 +343,8 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel): direction=optuna.study.StudyDirection.MINIMIZE, storage=storage, ) + if previous_study: + study.enqueue_trial(previous_study.best_params) start = time.time() try: study.optimize( @@ -380,6 +378,20 @@ class XGBoostRegressorQuickAdapterV35(BaseRegressionModel): logger.info(f"Optuna period hyperopt | {key:>20s} : {value}") return params + def optuna_previous_study( + self, study_name: str, storage + ) -> optuna.study.Study | None: + try: + previous_study = optuna.load_study(study_name=study_name, storage=storage) + previous_study.best_params + except Exception: + previous_study = None + try: + optuna.delete_study(study_name=study_name, storage=storage) + except Exception: + pass + return previous_study + def log_sum_exp_min_max_pred( pred_df: pd.DataFrame, fit_live_predictions_candles: int, label_period_candles: int -- 2.43.0