]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
refactor(qav3): use scipy logsumexp to compute softmin/max
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Tue, 25 Feb 2025 22:26:13 +0000 (23:26 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Tue, 25 Feb 2025 22:26:13 +0000 (23:26 +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 1760a7ba648bd7953328629c5d8342828ab90449..a2aa3473bf4581c18e47527f184760ade42be0bc 100644 (file)
@@ -12,7 +12,6 @@ import scipy as spy
 import optuna
 import sklearn
 import warnings
-import numpy as np
 
 N_TRIALS = 36
 TEST_SIZE = 0.1
@@ -497,9 +496,8 @@ def log_sum_exp_min_max_pred(
     extrema = pred_df.tail(label_period_candles * label_period_frequency)[
         EXTREMA_COLUMN
     ]
-    beta = 10.0
-    min_pred = smooth_min(extrema, beta=beta)
-    max_pred = smooth_max(extrema, beta=beta)
+    min_pred = real_soft_min(extrema)
+    max_pred = real_soft_max(extrema)
 
     return min_pred, max_pred
 
@@ -640,9 +638,9 @@ def hp_objective(
     return error
 
 
-def smooth_max(series: pd.Series, beta=1.0) -> float:
-    return np.log(np.sum(np.exp(beta * series))) / beta
+def real_soft_max(series: pd.Series) -> float:
+    return spy.special.logsumexp(series)
 
 
-def smooth_min(series: pd.Series, beta=1.0) -> float:
-    return -np.log(np.sum(np.exp(-beta * series))) / beta
+def real_soft_min(series: pd.Series) -> float:
+    return -spy.special.logsumexp(-series)
index 2a5bf96cc5165c6ad8e9cd4aed3931efa1628652..9a4df00f235259adf0069f8dd90db080d940e0f8 100644 (file)
@@ -12,7 +12,6 @@ import scipy as spy
 import optuna
 import sklearn
 import warnings
-import numpy as np
 
 N_TRIALS = 36
 TEST_SIZE = 0.1
@@ -498,9 +497,8 @@ def log_sum_exp_min_max_pred(
     extrema = pred_df.tail(label_period_candles * label_period_frequency)[
         EXTREMA_COLUMN
     ]
-    beta = 10.0
-    min_pred = smooth_min(extrema, beta=beta)
-    max_pred = smooth_max(extrema, beta=beta)
+    min_pred = real_soft_min(extrema)
+    max_pred = real_soft_max(extrema)
 
     return min_pred, max_pred
 
@@ -646,9 +644,9 @@ def hp_objective(
     return error
 
 
-def smooth_max(series: pd.Series, beta=1.0) -> float:
-    return np.log(np.sum(np.exp(beta * series))) / beta
+def real_soft_max(series: pd.Series) -> float:
+    return spy.special.logsumexp(series)
 
 
-def smooth_min(series: pd.Series, beta=1.0) -> float:
-    return -np.log(np.sum(np.exp(-beta * series))) / beta
+def real_soft_min(series: pd.Series) -> float:
+    return -spy.special.logsumexp(-series)