]> Piment Noir Git Repositories - freqai-strategies.git/commitdiff
fix(normalization): use eps-based threshold for minmax numerical stability
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 19 Feb 2026 00:15:08 +0000 (01:15 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 19 Feb 2026 00:15:08 +0000 (01:15 +0100)
quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py
quickadapter/user_data/strategies/Utils.py

index da2f4c38a9a2790ea36a928e11d1bc42abebbefa..dc1386f5ed5cbccce5fc479a36069beb8ad518fe 100644 (file)
@@ -2851,7 +2851,7 @@ class QuickAdapterRegressorV3(BaseRegressionModel):
                 finite_max_val = np.max(finite_col)
                 finite_range_val = finite_max_val - finite_min_val
 
-                if np.isclose(finite_range_val, 0.0):
+                if finite_range_val < 10 * np.finfo(float).eps:
                     if np.any(is_pos_inf_mask) and np.any(is_neg_inf_mask):
                         normalized_matrix[is_finite_mask, i] = 0.5
                     elif np.any(is_pos_inf_mask):
index 8351eb1cdce4811ea4e1f4caf5e09c87ef940f03..70327d188d713efdf319c5ab79967ae025f7ae6a 100644 (file)
@@ -1743,10 +1743,11 @@ def zigzag(
 
         min_val = np.nanmin(arr)
         max_val = np.nanmax(arr)
-        if np.isclose(min_val, max_val):
+        range_val = max_val - min_val
+        if range_val < 10 * np.finfo(float).eps:
             return [0.5 if np.isfinite(v) else np.nan for v in values]
 
-        scaled_arr = (arr - min_val) / (max_val - min_val)
+        scaled_arr = (arr - min_val) / range_val
         return scaled_arr.tolist()
 
     def calculate_pivot_metrics(