From 54cb9c0f47b17c57e30c9b8e2b0feb9f11623a09 Mon Sep 17 00:00:00 2001 From: Birte Kristina Friesel Date: Thu, 12 Dec 2024 18:21:08 +0100 Subject: Support lower regression bounds other than -∞ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DFATOOL_ULS_MIN_BOUND=0 is especially useful in many cases --- lib/functions.py | 15 ++++++++++++--- lib/paramfit.py | 3 ++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/functions.py b/lib/functions.py index ae8283a..187e6ff 100644 --- a/lib/functions.py +++ b/lib/functions.py @@ -27,6 +27,8 @@ dfatool_rmt_relevance_threshold = float( os.getenv("DFATOOL_RMT_RELEVANCE_THRESHOLD", "0.5") ) +dfatool_uls_min_bound = float(os.getenv("DFATOOL_ULS_MIN_BOUND", -np.inf)) + if dfatool_preproc_relevance_method == "mi": import sklearn.feature_selection @@ -97,7 +99,7 @@ class ParamFunction: num_vars, repr_str=None, ini=None, - bounds=((-np.inf, -np.inf), (np.inf, np.inf)), + bounds=((dfatool_uls_min_bound, dfatool_uls_min_bound), (np.inf, np.inf)), ): """ Create function object suitable for regression analysis. @@ -1927,7 +1929,7 @@ class AnalyticFunction(ModelFunction): upper_bounds.append(np.max(X[param_index])) self.model_args[i] = np.mean(X[param_index]) else: - lower_bounds.append(-np.inf) + lower_bounds.append(dfatool_uls_min_bound) upper_bounds.append(np.inf) error_function = lambda P, X, y: self._function(P, X) - y try: @@ -2144,7 +2146,14 @@ class analytic: lambda model_param: True, 3, repr_str="β₀ + β₁ * roofline(x, β₂)", - bounds=((-np.inf, -np.inf, -np.inf), (np.inf, np.inf, np.inf)), + bounds=( + ( + dfatool_uls_min_bound, + dfatool_uls_min_bound, + dfatool_uls_min_bound, + ), + (np.inf, np.inf, np.inf), + ), ), # "num0_8": ParamFunction( # lambda reg_param, model_param: reg_param[0] diff --git a/lib/paramfit.py b/lib/paramfit.py index 05ffb86..000aa9c 100644 --- a/lib/paramfit.py +++ b/lib/paramfit.py @@ -17,6 +17,7 @@ from .utils import ( logger = logging.getLogger(__name__) best_fit_metric = os.getenv("DFATOOL_ULS_ERROR_METRIC", "ssr") +dfatool_uls_min_bound = float(os.getenv("DFATOOL_ULS_MIN_BOUND", -np.inf)) class ParamFit: @@ -211,7 +212,7 @@ def _try_fits( ini = [0] + [1 for i in range(1, param_function._num_variables)] if function_name == "roofline": param_function.bounds = ( - (-np.inf, -np.inf, np.min(X)), + (dfatool_uls_min_bound, dfatool_uls_min_bound, np.min(X)), (np.inf, np.inf, np.max(X)), ) ini[2] = np.mean(X) -- cgit v1.2.3