From: Jérôme Benoit Date: Tue, 25 Feb 2025 22:26:13 +0000 (+0100) Subject: refactor(qav3): use scipy logsumexp to compute softmin/max X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=13041246b3dc7711a099e504e58843cb4b8b55e3;p=freqai-strategies.git refactor(qav3): use scipy logsumexp to compute softmin/max Signed-off-by: Jérôme Benoit --- 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)