Skip to content

Estimation Methods

Overview

EstimationMethod() classes do the actual hard lifting of fitting coefficients (or weights). They take more technical parameters like the length of the regularization path or upper bounds on certain coefficients. These parameters depend on the individual estimation method. In general, we aim to provide sensible out-of-the-box defaults. This page explains the difference in detail. Estimator classes often take a method parameter, to which either a string or an instance of the EstimationMethod() can be passed, e.g.

from rolch import OnlineLinearModel, LassoPathMethod

fit_intercept = True
scale_inputs = True

model = OnlineLinearModel(
    method="lasso",  # default parameters
    fit_intercept=fit_intercept,
    scale_inputs=scale_inputs,
)
# or equivalent
model = OnlineLinearModel(
    method=LassoPathMethod(),  # default parameters
    fit_intercept=fit_intercept,
    scale_inputs=scale_inputs,
)
# or with user-defined parameters
model = OnlineLinearModel(
    method=LassoPathMethod(
        lambda_n=10
    ),  # only 10 different regularization strengths
    fit_intercept=fit_intercept,
    scale_inputs=scale_inputs,
)

More information on coordinate descent can also be found on this page and in the API Reference below.

API Reference

Note

We don't document the classmethods of the EstimationMethod since these are only used internally.

rolch.OrdinaryLeastSquaresMethod

Bases: EstimationMethod

Simple ordinary least squares respectively recursive least squares. No fancy parameters possible.

rolch.LassoPathMethod

Bases: EstimationMethod

Path-based LASSO estimation.

The LASSO Path method runs coordinate descent along a (geometric) decreasing grid of regularization strengths (lambdas). We automatically calculate the maximum regularization strength for which all (not-regularized) coefficients are 0. The lower end of the lambda grid is defined as \(\(\lambda_\min = \lambda_\max * \varepsilon_\lambda.\)\)

We allow to pass user-defined lower and upper bounds for the coefficients. The coefficient bounds must be an numpy array of the length of X respectively of the number of variables in the equation plus the intercept, if you fit one. This allows to box-constrain the coefficients to a certain range.

Furthermore, we allow to choose the start value, i.e. whether you want an update to be warm-started on the previous fit's path or on the previous reguarlization strength or an average of both. If your data generating process is rather stable, the "previous_fit" should give considerable speed gains, since warm starting on the previous strength is effectively batch-fitting.

Lastly, we have some rather technical parameters like the number of coordinate descent iterations, whether you want to cycle randomly and for which tolerance you want to break. We use active set iterations, i.e. after the first coordinate-wise update for each regularization strength, only non-zero coefficients are updated.

We use numba to speed up the coordinate descent algorithm.

__init__

__init__(lambda_n: int = 100, lambda_eps: float = 0.0001, start_value_initial: Literal['previous_lambda', 'previous_fit', 'average'] = 'previous_lambda', start_value_update: Literal['previous_lambda', 'previous_fit', 'average'] = 'previous_fit', selection: Literal['cyclic', 'random'] = 'cyclic', beta_lower_bound: ndarray | None = None, beta_upper_bound: ndarray | None = None, tolerance: float = 0.0001, max_iterations: int = 1000)

Initializes the LassoPath method with the specified parameters.

Parameters:

Name Type Description Default
lambda_n int

Number of lambda values to use in the path. Default is 100.

100
lambda_eps float

Minimum lambda value as a fraction of the maximum lambda. Default is 1e-4.

0.0001
start_value_initial Literal['previous_lambda', 'previous_fit', 'average']

Method to initialize the start value for the first lambda. Default is "previous_lambda".

'previous_lambda'
start_value_update Literal['previous_lambda', 'previous_fit', 'average']

Method to update the start value for subsequent lambdas. Default is "previous_fit".

'previous_fit'
selection Literal['cyclic', 'random']

Method to select features during the path. Default is "cyclic".

'cyclic'
beta_lower_bound ndarray | None

Lower bound for the coefficients. Default is None.

None
beta_upper_bound ndarray | None

Upper bound for the coefficients. Default is None.

None
tolerance float

Tolerance for the optimization. Default is 1e-4.

0.0001
max_iterations int

Maximum number of iterations for the optimization. Default is 1000.

1000