Lars (Least Angle Regression model)#

  • Es numericamente eficiente cuando el número de características es significativamente mayor que el número de muestras.

  • Opera de una forma similar a selección de variables hacia adelante.

  • En cada paso, encuentra la característica más correlacionada con y.

  • Cuando hay varias características con la misma correlación, continua en una dirección equiángular entre características.

  • Es computacionalmente tan rápido como la selección de variables hacia adelante y tiene el mismo orden de complejidad del método de mínimos cuadrados ordinarios.

  • Es facilmente modificable para producir soluciones para otros estimadores, i.e., Lasso.

  • Puede ser muy sensible a la presencia de outliers.

[1]:
from sklearn.datasets import load_diabetes

X, y = load_diabetes(return_X_y=True)
[2]:
from sklearn.linear_model import Lars

lars = Lars(
    # ---------------------------------------------------------------------
    # Whether to fit the intercept for this model.
    fit_intercept=True,
    # ---------------------------------------------------------------------
    # Target number of non-zero coefficients. Use np.inf for no limit.
    n_nonzero_coefs=500,
    # ---------------------------------------------------------------------
    # If True the full path is stored in the coef_path_ attribute. If you
    # compute the solution for a large problem or many targets, setting
    # fit_path to False will lead to a speedup, especially with a small
    # alpha.
    fit_path=True,
    # ---------------------------------------------------------------------
    # Upper bound on a uniform noise parameter to be added to the y values,
    # to satisfy the model’s assumption of one-at-a-time computations.
    # Might help with stability.
    jitter=None,
    # --------------------------------------------------------------------------
    # Determines random number generation for jittering. Pass an int for
    # reproducible output across multiple function calls. Ignored if jitter
    # is None.
    random_state=None,
)

lars.fit(X, y)

lars.score(X, y)
[2]:
0.5177484222203498
[3]:
lars.predict(X)[0:10]
[3]:
array([206.11667725,  68.07103297, 176.88279035, 166.91445843,
       128.46225834, 106.35191443,  73.89134662, 118.85423042,
       158.80889721, 213.58462442])
[4]:
lars.coef_
[4]:
array([ -10.0098663 , -239.81564367,  519.84592005,  324.3846455 ,
       -792.17563855,  476.73902101,  101.04326794,  177.06323767,
        751.27369956,   67.62669218])
[5]:
lars.intercept_
[5]:
152.13348416289597