Ridge y lasso
En simple: lee esto primero
Regularizar = ponerle una «multa» al modelo cuando usa números muy grandes, para que no se vuelva exagerado ni memorice.
Es como darle a alguien un presupuesto limitado: si cada peso «cuesta», el modelo solo invierte en las variables que realmente valen la pena.
- Ridge encoge todos los pesos un poco (ninguno llega a cero).
- Lasso puede dejar pesos exactamente en cero: elimina variables inútiles (sirve para elegir variables).
- λ (lambda) es el tamaño de la multa: 0 = sin multa; muy grande = todo se aplasta hacia cero.
- regularización
- agregar una penalización para que el modelo sea más simple.
- ℓ2 / ℓ1
- dos formas de medir «qué tan grandes» son los pesos (suma de cuadrados vs. suma de valores absolutos).
- λ (lambda)
- la perilla que decide cuánto pesa la multa.
- camino de coeficientes
- un gráfico de cómo cambia cada peso a medida que subes λ.
Más abajo viene la versión completa, con fórmulas. Si una palabra aparece subrayada con puntos, pasa el mouse (o tócala) para ver qué significa.
¿Por qué los pesos grandes son un problema?
Sección titulada «¿Por qué los pesos grandes son un problema?»El lado derecho de la U es alta varianza: el ajuste oscila violentamente con los datos, y esa violencia viene de pesos enormes. Para pasar por cada punto ruidoso, la curva se dobla bruscamente, lo que requiere coeficientes gigantes ( en grado 12) que casi se cancelan entre sí.
Pesos grandes = huella del overfitting. Mantenerlos pequeños ⇒ la curva no puede ondular tanto ⇒ menos varianza.
La idea: cobrar por pesos grandes
Sección titulada «La idea: cobrar por pesos grandes»En vez de restringir la familia de modelos, agregamos una penalización:
- es la tasa de cambio: cuánto ajuste pagamos por pesos más chicos. es OLS; aplasta todo a 0.
- Los dos términos tiran en direcciones opuestas: una cuerda. Cambiamos un poco de sesgo por una gran caída de varianza.
- es un hiperparámetro: se elige, no se aprende (con validación cruzada).
Ridge () y lasso ()
Sección titulada «Ridge (ℓ2\ell_2ℓ2) y lasso (ℓ1\ell_1ℓ1)»Ridge es suave ⇒ forma cerrada (solo sumar λ a la diagonal):
es definida positiva para todo : ridge es único aun con features colineales o , justo donde OLS se rompe. Vía SVD, ridge escala el ajuste en la dirección por : direcciones fuertes pasan casi intactas; las débiles y ruidosas se encogen fuerte.
| Ridge (ℓ2): solo encoge | Lasso (ℓ1): encoge y selecciona | |
|---|---|---|
| Pesos | todos bajan suave, ninguno llega a 0 | muchos quedan exactamente en 0 (esparcidad) |
| Features correlacionadas | reparte el peso entre ellas (estable) | tiende a quedarse con una (elección inestable) |
| Optimización | suave ⇒ forma cerrada | convexo pero no derivable en 0 ⇒ sin forma cerrada |
| Cuándo | muchos efectos pequeños | pocas features hacen el trabajo |
- Costo: .
- El primer término tiene gradiente (igual que OLS); el segundo, .
- Igualando a cero: .
- es semidefinida positiva (autovalores ); sumarle sube todos los autovalores en , así que con son : la matriz siempre es invertible.
- . Con (features ortonormales) queda : el encogimiento proporcional del gráfico de abajo.
- Lasso en 1-D: . Para la derivada es , válido solo si ; simétrico para ; si el mínimo está en el pico . Eso es el soft-threshold con .
¿Por qué el ℓ1 da ceros? La geometría
Sección titulada «¿Por qué el ℓ1 da ceros? La geometría»Penalizar equivale a imponer un presupuesto (λ grande ⇔ t chico). Las curvas de nivel de la pérdida son elipses alrededor del óptimo OLS; encogemos hasta que la elipse toca por primera vez la región permitida:
- Disco ℓ2: el contacto cae en un punto genérico, ambas coordenadas ≠ 0.
- Rombo ℓ1: tiene esquinas puntiagudas sobre los ejes; muy a menudo la elipse toca primero una esquina ⇒ una coordenada = 0.
¿Por qué el lasso produce ceros? La geometría
Arrastra β̂ (el óptimo sin penalización, en naranja). La solución penalizada es el punto donde la elipse de costo más pequeña toca por primera vez la región del presupuesto: el disco ℓ2 (ridge) o el rombo ℓ1 (lasso).
El mecanismo en 1-D: encoger vs umbralizar
Con features no correlacionados cada peso resuelve min (w − a)² + λΩ(w), donde a = w_OLS.
El mecanismo: soft-threshold
Sección titulada «El mecanismo: soft-threshold»Con features no correlacionadas cada peso resuelve un problema 1-D, , con :
Ridge escala proporcionalmente (nunca 0). Lasso resta una cantidad fija y tiene una zona muerta que manda pesos pequeños a 0: cerca de 0 la pendiente de es constante y le gana a los pesos chicos. Esa torcedura es la esquina del rombo.
Cómo se optimiza cada uno
Sección titulada «Cómo se optimiza cada uno»- Ridge: suave y convexo ⇒ gradiente = 0 ⇒ forma cerrada (o descenso de gradiente para datos grandes).
- Lasso: convexo pero con una torcedura en 0 ⇒ se usa el subgradiente (cualquier pendiente en en ). El caballo de batalla es el descenso por coordenadas: actualizar un peso a la vez con el soft-threshold (fórmula cerrada por coordenada); los ceros exactos salen solos. LARS traza todo el camino (lineal a trozos en λ) de una pasada.
Caminos de coeficientes
Sección titulada «Caminos de coeficientes»Graficando cada peso contra λ (escala log): en ridge todos se encogen suavemente, ninguno toca 0; en lasso van cayendo a 0 uno por uno: la firma de la selección de features.
Ridge en acción
Sección titulada «Ridge en acción»Grado alto fijo; mueve λ: muy poco sigue sobreajustando, demasiado sobre-suaviza (sesgo), en medio sigue la señal. Mira cómo las barras de los pesos se encogen.
Sube el grado… y mira la validación
Datos de sin(2πx) + ruido. El modelo sigue siendo lineal en los pesos: solo añadimos columnas x², x³… a la matriz de diseño. Los puntos llenos entrenan; los huecos validan.
Ejercicio
Sección titulada «Ejercicio»Con features no correlacionadas, y . Calcula ridge y lasso.
Ver solución
- Ridge: . Nada es cero.
- Lasso con : . El segundo peso () cae en la zona muerta: feature eliminada.
Autoevaluación
0/5 correctas · 0 respondidasEn código
Sección titulada «En código»from sklearn.pipeline import make_pipelinefrom sklearn.preprocessing import StandardScalerfrom sklearn.linear_model import RidgeCV, LassoCVimport numpy as np
alphas = np.logspace(-4, 3, 50) # en scikit-learn, λ se llama alpharidge = make_pipeline(StandardScaler(), RidgeCV(alphas=alphas, cv=5)).fit(X_tr, y_tr)lasso = make_pipeline(StandardScaler(), LassoCV(alphas=alphas, cv=5)).fit(X_tr, y_tr)
coef = lasso[-1].coef_print('λ elegido:', lasso[-1].alpha_, '· features con peso ≠ 0:', np.sum(coef != 0))# el intercepto no se penaliza (fit_intercept=True)Para profundizar
Sección titulada «Para profundizar»Fuente ·ML_Course_regularization_and_model_selection.pdf (slides 19–26, 33) · ML_Course_Linear_Regression.pdf (slides 40–44) · ML_Course/session-03b-ridge-lasso.ipynb