]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
perf(qav3): optuna warm start
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Sat, 15 Feb 2025 20:11:41 +0000 (21:11 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Sat, 15 Feb 2025 20:11:41 +0000 (21:11 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py
quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py

index 7c1644b05965e91456c473fb2bbb097746643161..6a849bb9599c26e2d3bfbb00e78a8d3c45246adf 100644 (file)
@@ -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
index 301c469ed10738c2be8dd401dfec31cb8ed79e10..79666e25fcc211503695f752e0a8a58a6a47fafe 100644 (file)
@@ -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