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