From 13041246b3dc7711a099e504e58843cb4b8b55e3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Tue, 25 Feb 2025 23:26:13 +0100 Subject: [PATCH] refactor(qav3): use scipy logsumexp to compute softmin/max MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .../LightGBMRegressorQuickAdapterV35.py | 14 ++++++-------- .../XGBoostRegressorQuickAdapterV35.py | 14 ++++++-------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py b/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py index 1760a7b..a2aa347 100644 --- a/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py +++ b/quickadapter/user_data/freqaimodels/LightGBMRegressorQuickAdapterV35.py @@ -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) diff --git a/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py b/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py index 2a5bf96..9a4df00 100644 --- a/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py +++ b/quickadapter/user_data/freqaimodels/XGBoostRegressorQuickAdapterV35.py @@ -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) -- 2.43.0