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