Python Data Science Program
📓 Abrir notebook en GitHub

Clase 073 — Regularización: Ridge, Lasso, Elastic Net

Parte: 1 — Machine Learning Clásico · Fuente: Géron, cap. 4. ⏱️ Duración estimada: 70 min.

🎯 Objetivo

Aprender a controlar el overfitting en modelos lineales mediante regularización L2 (Ridge), L1 (Lasso) y su combinación (Elastic Net), entendiendo el rol del hiperparámetro alpha, la importancia del scaling, y cuándo conviene cada variante.

📚 Resultados de aprendizaje

Al finalizar, el estudiante podrá:

🗺️ Temas

📖 Definiciones y características

📂 Dataset / recursos

🧪 Ejercicios

  1. OLS baseline: entrená LinearRegression sobre California Housing escalado. Reportá RMSE en train y test. Anotá los coeficientes.
  2. Ridge: entrená Ridge(alpha=1.0) sobre los mismos datos. Compará RMSE y la magnitud de los coeficientes vs OLS.
  3. Lasso: entrená Lasso(alpha=0.1). Contá cuántos coeficientes quedaron exactamente en 0. Subí alpha a 1.0 y a 10.0; observá la sparsity creciente.
  4. Elastic Net: entrená ElasticNet(alpha=0.1, l1_ratio=0.5). Compará con Ridge y Lasso puros.
  5. Tuning con CV: usá RidgeCV(alphas=np.logspace(-3, 3, 50)) y LassoCV(cv=5) para encontrar el mejor alpha. Graficá el path de coeficientes vs alpha (Lasso path).

📝 Homework verificable

Sobre make_regression(n_samples=200, n_features=50, n_informative=10, noise=10, random_state=42):

  1. Entrená OLS, Ridge, Lasso y Elastic Net (todos con StandardScaler en Pipeline).
  2. Tuneá alpha con la variante *CV correspondiente.
  3. Reportá: RMSE en test (split 80/20, random_state=42), número de coeficientes ≠ 0, y top-5 features por |coef| en Lasso.

Criterio de verificación: Lasso debe identificar al menos 8 de las 10 features informativas (coef ≠ 0) y dejar en 0 al menos 30 de las 40 ruidosas. RMSE de Ridge y Elastic Net dentro de ±10% del de Lasso.

⚠️ Errores comunes

  1. No escalar features antes de Ridge/Lasso/Elastic Net: la penalización castiga a las features de mayor escala. Siempre StandardScaler (o equivalente) en un Pipeline.
  2. Usar alpha=0: equivale a OLS y además dispara warnings/inestabilidad numérica en Lasso. Si querés OLS, usá LinearRegression.
  3. Confundir alpha de sklearn con λ de la teoría: en sklearn alpha ya incluye el factor 1/(2n) o 1/n según el modelo. No es directamente comparable entre Ridge y Lasso.
  4. Tunear alpha sobre el test set: usá CV (RidgeCV, LassoCV) o GridSearchCV sobre train. El test se toca una sola vez al final.
  5. Esperar que Ridge haga selección de features: no las anula, solo las encoge. Si querés sparsity, usá Lasso o Elastic Net.

❓ Preguntas frecuentes

  1. ¿Ridge, Lasso o Elastic Net? - Ridge: pocas features, todas potencialmente relevantes, posible multicolinealidad. - Lasso: muchas features, sospechás que muchas son irrelevantes, querés un modelo interpretable. - Elastic Net: muchas features correlacionadas entre sí, o p > n (más features que muestras).
  2. ¿Por qué Lasso anula coeficientes y Ridge no? Geométricamente, la "bola" de la restricción L1 (rombo) tiene esquinas sobre los ejes; el óptimo bajo restricción cae en una esquina → coeficientes en 0. La bola L2 (círculo) es suave, el óptimo casi nunca cae sobre un eje.
  3. ¿Qué pasa si alpha es muy grande? Todos los coeficientes se acercan a 0 (Ridge) o se anulan (Lasso) y el modelo predice ~la media de y. Underfitting.
  4. ¿Cómo elijo el rango de alpha para buscar? Una grilla log-espaciada amplia, ej. np.logspace(-4, 4, 100), y luego refinar alrededor del óptimo.
  5. ¿Sirve regularización con árboles o solo con modelos lineales? Ridge/Lasso/Elastic Net son específicos de modelos lineales. Los árboles tienen sus propios mecanismos de regularización (max_depth, min_samples_leaf, ccp_alpha).

🔗 Referencias

📥 Material descargable

➡️ Siguiente clase

Clase 074 — Early stopping