Menu iconMenu icon
Ingeniería de Características para el Aprendizaje Automático Moderno con Scikit-Learn

Capítulo 6: Introducción a la Selección de Características con Lasso y Ridge

6.3 Ejercicios Prácticos: Capítulo 6

En esta sección de ejercicios, aplicaremos técnicas de regularización para la selección de características utilizando Lasso y Ridge. Estos ejercicios ayudarán a consolidar tu comprensión de la regularización L1 y L2 y el ajuste de hiperparámetros.

Ejercicio 1: Aplicando Lasso para la Selección de Características

Objetivo: Usar la regresión Lasso para identificar las características más importantes de un conjunto de datos y observar cómo el cambio en el parámetro alpha afecta la selección de características.

Instrucciones:

  1. Carga un conjunto de datos con al menos 15 características.
  2. Aplica la regresión Lasso y experimenta con diferentes valores de alpha.
  3. Lista los coeficientes no nulos (características seleccionadas) para cada valor de alpha y represéntalos gráficamente para visualizar qué características siguen siendo relevantes a medida que aumenta alpha.

Solución:

from sklearn.datasets import make_regression
from sklearn.linear_model import Lasso
import matplotlib.pyplot as plt

# Generate synthetic data with 15 features
X, y = make_regression(n_samples=100, n_features=15, noise=0.1, random_state=42)

# Define different alpha values to test
alpha_values = [0.01, 0.1, 1, 5, 10]
selected_features = {}

# Apply Lasso for each alpha value
for alpha in alpha_values:
    lasso = Lasso(alpha=alpha, max_iter=10000)
    lasso.fit(X, y)
    selected_features[alpha] = lasso.coef_

# Plot non-zero coefficients for each alpha
plt.figure(figsize=(10, 6))
for alpha, coefs in selected_features.items():
    plt.plot(range(len(coefs)), coefs, marker='o', label=f'alpha={alpha}')
plt.axhline(0, color='gray', linestyle='--')
plt.xlabel("Feature Index")
plt.ylabel("Coefficient Value")
plt.legend()
plt.title("Lasso Coefficients for Different Alpha Values")
plt.show()

Este código muestra cómo el modelo selecciona características ajustando alpha. A medida que alpha aumenta, más coeficientes se reducen a cero, eliminando características con relaciones más débiles con la variable objetivo.

Ejercicio 2: Ajuste de Lasso con Grid Search

Objetivo: Utilizar GridSearchCV para encontrar el alpha óptimo para la regresión Lasso basado en el rendimiento del modelo.

Instrucciones:

  1. Cargar un conjunto de datos y dividirlo en conjuntos de entrenamiento y prueba.
  2. Usar GridSearchCV para identificar el mejor alpha de un rango predefinido de valores.
  3. Evaluar el modelo con el mejor alpha en el conjunto de prueba.

Solución:

from sklearn.linear_model import Lasso
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.datasets import make_regression

# Generate synthetic data
X, y = make_regression(n_samples=100, n_features=20, noise=0.1, random_state=42)

# Split into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Define range of alpha values for GridSearch
alpha_values = {'alpha': [0.001, 0.01, 0.1, 1, 10]}

# Initialize Lasso and GridSearchCV
lasso = Lasso(max_iter=10000)
grid_search = GridSearchCV(lasso, alpha_values, cv=5, scoring='neg_mean_squared_error')
grid_search.fit(X_train, y_train)

# Best alpha value
best_alpha = grid_search.best_params_['alpha']
print("Optimal alpha for Lasso:", best_alpha)

# Evaluate model with best alpha
best_lasso = Lasso(alpha=best_alpha)
best_lasso.fit(X_train, y_train)
y_pred = best_lasso.predict(X_test)
print("Test MSE with optimal alpha:", mean_squared_error(y_test, y_pred))

Este ejercicio demuestra cómo usar GridSearchCV para ajustar alpha en Lasso, mejorando la selección de características y minimizando el error.

Ejercicio 3: Aplicación de la Regresión Ridge con Validación Cruzada

Objetivo: Explorar la regresión Ridge y determinar la fuerza de regularización óptima para un conjunto de datos con características multicolineales.

Instrucciones:

  1. Cargar un conjunto de datos con características multicolineales (por ejemplo, un conjunto de datos con variables correlacionadas).
  2. Usar la regresión Ridge con validación cruzada para determinar el mejor valor de alpha.
  3. Comparar el rendimiento del modelo en los conjuntos de entrenamiento y prueba.

Solución:

from sklearn.linear_model import Ridge
from sklearn.model_selection import cross_val_score
import numpy as np

# Generate synthetic data with correlated features
np.random.seed(42)
X = np.random.rand(100, 5)
y = X @ np.array([2, 4, -3, 1, 5]) + np.random.normal(0, 0.1, 100)

# Initialize Ridge model and range of alpha values
alpha_values = [0.01, 0.1, 1, 10, 100]
ridge_scores = []

# Evaluate each alpha with cross-validation
for alpha in alpha_values:
    ridge = Ridge(alpha=alpha)
    scores = cross_val_score(ridge, X, y, cv=5, scoring='neg_mean_squared_error')
    ridge_scores.append((alpha, np.mean(scores)))

# Find best alpha
best_alpha, best_score = max(ridge_scores, key=lambda x: x[1])
print("Optimal alpha for Ridge:", best_alpha)
print("Cross-validated MSE:", -best_score)

En este ejercicio:

  • Validación Cruzada: Aplicamos validación cruzada para evaluar el rendimiento de la regresión Ridge con diferentes valores de alpha.
  • Comparación: El alpha óptimo reduce los efectos de la multicolinealidad, estabilizando las estimaciones de los coeficientes y mejorando la generalización.

Ejercicio 4: Uso de Randomized Search para un Ajuste Eficiente de Lasso

Objetivo: Utilizar RandomizedSearchCV para ajustar de manera eficiente alpha en Lasso con un conjunto de datos de alta dimensión.

Instrucciones:

  1. Cargar un conjunto de datos de alta dimensión.
  2. Definir un rango logarítmico de valores de alpha y aplicar RandomizedSearchCV.
  3. Comparar el mejor modelo con el modelo base de Lasso usando datos de prueba.

Solución:

from sklearn.model_selection import RandomizedSearchCV
import numpy as np

# Generate synthetic data with high dimensionality
X, y = make_regression(n_samples=100, n_features=50, noise=0.1, random_state=42)

# Define alpha search space for RandomizedSearchCV
alpha_values = {'alpha': np.logspace(-4, 1, 100)}

# Initialize Lasso and RandomizedSearchCV
lasso = Lasso(max_iter=10000)
random_search = RandomizedSearchCV(lasso, alpha_values, cv=5, scoring='neg_mean_squared_error', n_iter=10, random_state=42)
random_search.fit(X, y)

# Display best alpha and score
best_alpha = random_search.best_params_['alpha']
print("Optimal alpha for Lasso (Randomized Search):", best_alpha)
print("Best cross-validated score (negative MSE):", random_search.best_score_)

 

En este ejemplo:

  • Datos de Alta Dimensión: Creamos un conjunto de datos con muchas características y utilizamos Randomized Search para identificar rápidamente un valor adecuado de alpha para Lasso.
  • Rango Logarítmico: Al definir un rango amplio y logarítmico para alpha, exploramos eficientemente el espacio de búsqueda sin realizar un ajuste exhaustivo.

Estos ejercicios proporcionan experiencia práctica con técnicas de regularización y ajuste de hiperparámetros para la selección de características utilizando Lasso y Ridge. Comprender cómo seleccionar y ajustar estos parámetros permite mejorar el rendimiento del modelo, reducir el sobreajuste y obtener resultados más interpretables.

6.3 Ejercicios Prácticos: Capítulo 6

En esta sección de ejercicios, aplicaremos técnicas de regularización para la selección de características utilizando Lasso y Ridge. Estos ejercicios ayudarán a consolidar tu comprensión de la regularización L1 y L2 y el ajuste de hiperparámetros.

Ejercicio 1: Aplicando Lasso para la Selección de Características

Objetivo: Usar la regresión Lasso para identificar las características más importantes de un conjunto de datos y observar cómo el cambio en el parámetro alpha afecta la selección de características.

Instrucciones:

  1. Carga un conjunto de datos con al menos 15 características.
  2. Aplica la regresión Lasso y experimenta con diferentes valores de alpha.
  3. Lista los coeficientes no nulos (características seleccionadas) para cada valor de alpha y represéntalos gráficamente para visualizar qué características siguen siendo relevantes a medida que aumenta alpha.

Solución:

from sklearn.datasets import make_regression
from sklearn.linear_model import Lasso
import matplotlib.pyplot as plt

# Generate synthetic data with 15 features
X, y = make_regression(n_samples=100, n_features=15, noise=0.1, random_state=42)

# Define different alpha values to test
alpha_values = [0.01, 0.1, 1, 5, 10]
selected_features = {}

# Apply Lasso for each alpha value
for alpha in alpha_values:
    lasso = Lasso(alpha=alpha, max_iter=10000)
    lasso.fit(X, y)
    selected_features[alpha] = lasso.coef_

# Plot non-zero coefficients for each alpha
plt.figure(figsize=(10, 6))
for alpha, coefs in selected_features.items():
    plt.plot(range(len(coefs)), coefs, marker='o', label=f'alpha={alpha}')
plt.axhline(0, color='gray', linestyle='--')
plt.xlabel("Feature Index")
plt.ylabel("Coefficient Value")
plt.legend()
plt.title("Lasso Coefficients for Different Alpha Values")
plt.show()

Este código muestra cómo el modelo selecciona características ajustando alpha. A medida que alpha aumenta, más coeficientes se reducen a cero, eliminando características con relaciones más débiles con la variable objetivo.

Ejercicio 2: Ajuste de Lasso con Grid Search

Objetivo: Utilizar GridSearchCV para encontrar el alpha óptimo para la regresión Lasso basado en el rendimiento del modelo.

Instrucciones:

  1. Cargar un conjunto de datos y dividirlo en conjuntos de entrenamiento y prueba.
  2. Usar GridSearchCV para identificar el mejor alpha de un rango predefinido de valores.
  3. Evaluar el modelo con el mejor alpha en el conjunto de prueba.

Solución:

from sklearn.linear_model import Lasso
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.datasets import make_regression

# Generate synthetic data
X, y = make_regression(n_samples=100, n_features=20, noise=0.1, random_state=42)

# Split into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Define range of alpha values for GridSearch
alpha_values = {'alpha': [0.001, 0.01, 0.1, 1, 10]}

# Initialize Lasso and GridSearchCV
lasso = Lasso(max_iter=10000)
grid_search = GridSearchCV(lasso, alpha_values, cv=5, scoring='neg_mean_squared_error')
grid_search.fit(X_train, y_train)

# Best alpha value
best_alpha = grid_search.best_params_['alpha']
print("Optimal alpha for Lasso:", best_alpha)

# Evaluate model with best alpha
best_lasso = Lasso(alpha=best_alpha)
best_lasso.fit(X_train, y_train)
y_pred = best_lasso.predict(X_test)
print("Test MSE with optimal alpha:", mean_squared_error(y_test, y_pred))

Este ejercicio demuestra cómo usar GridSearchCV para ajustar alpha en Lasso, mejorando la selección de características y minimizando el error.

Ejercicio 3: Aplicación de la Regresión Ridge con Validación Cruzada

Objetivo: Explorar la regresión Ridge y determinar la fuerza de regularización óptima para un conjunto de datos con características multicolineales.

Instrucciones:

  1. Cargar un conjunto de datos con características multicolineales (por ejemplo, un conjunto de datos con variables correlacionadas).
  2. Usar la regresión Ridge con validación cruzada para determinar el mejor valor de alpha.
  3. Comparar el rendimiento del modelo en los conjuntos de entrenamiento y prueba.

Solución:

from sklearn.linear_model import Ridge
from sklearn.model_selection import cross_val_score
import numpy as np

# Generate synthetic data with correlated features
np.random.seed(42)
X = np.random.rand(100, 5)
y = X @ np.array([2, 4, -3, 1, 5]) + np.random.normal(0, 0.1, 100)

# Initialize Ridge model and range of alpha values
alpha_values = [0.01, 0.1, 1, 10, 100]
ridge_scores = []

# Evaluate each alpha with cross-validation
for alpha in alpha_values:
    ridge = Ridge(alpha=alpha)
    scores = cross_val_score(ridge, X, y, cv=5, scoring='neg_mean_squared_error')
    ridge_scores.append((alpha, np.mean(scores)))

# Find best alpha
best_alpha, best_score = max(ridge_scores, key=lambda x: x[1])
print("Optimal alpha for Ridge:", best_alpha)
print("Cross-validated MSE:", -best_score)

En este ejercicio:

  • Validación Cruzada: Aplicamos validación cruzada para evaluar el rendimiento de la regresión Ridge con diferentes valores de alpha.
  • Comparación: El alpha óptimo reduce los efectos de la multicolinealidad, estabilizando las estimaciones de los coeficientes y mejorando la generalización.

Ejercicio 4: Uso de Randomized Search para un Ajuste Eficiente de Lasso

Objetivo: Utilizar RandomizedSearchCV para ajustar de manera eficiente alpha en Lasso con un conjunto de datos de alta dimensión.

Instrucciones:

  1. Cargar un conjunto de datos de alta dimensión.
  2. Definir un rango logarítmico de valores de alpha y aplicar RandomizedSearchCV.
  3. Comparar el mejor modelo con el modelo base de Lasso usando datos de prueba.

Solución:

from sklearn.model_selection import RandomizedSearchCV
import numpy as np

# Generate synthetic data with high dimensionality
X, y = make_regression(n_samples=100, n_features=50, noise=0.1, random_state=42)

# Define alpha search space for RandomizedSearchCV
alpha_values = {'alpha': np.logspace(-4, 1, 100)}

# Initialize Lasso and RandomizedSearchCV
lasso = Lasso(max_iter=10000)
random_search = RandomizedSearchCV(lasso, alpha_values, cv=5, scoring='neg_mean_squared_error', n_iter=10, random_state=42)
random_search.fit(X, y)

# Display best alpha and score
best_alpha = random_search.best_params_['alpha']
print("Optimal alpha for Lasso (Randomized Search):", best_alpha)
print("Best cross-validated score (negative MSE):", random_search.best_score_)

 

En este ejemplo:

  • Datos de Alta Dimensión: Creamos un conjunto de datos con muchas características y utilizamos Randomized Search para identificar rápidamente un valor adecuado de alpha para Lasso.
  • Rango Logarítmico: Al definir un rango amplio y logarítmico para alpha, exploramos eficientemente el espacio de búsqueda sin realizar un ajuste exhaustivo.

Estos ejercicios proporcionan experiencia práctica con técnicas de regularización y ajuste de hiperparámetros para la selección de características utilizando Lasso y Ridge. Comprender cómo seleccionar y ajustar estos parámetros permite mejorar el rendimiento del modelo, reducir el sobreajuste y obtener resultados más interpretables.

6.3 Ejercicios Prácticos: Capítulo 6

En esta sección de ejercicios, aplicaremos técnicas de regularización para la selección de características utilizando Lasso y Ridge. Estos ejercicios ayudarán a consolidar tu comprensión de la regularización L1 y L2 y el ajuste de hiperparámetros.

Ejercicio 1: Aplicando Lasso para la Selección de Características

Objetivo: Usar la regresión Lasso para identificar las características más importantes de un conjunto de datos y observar cómo el cambio en el parámetro alpha afecta la selección de características.

Instrucciones:

  1. Carga un conjunto de datos con al menos 15 características.
  2. Aplica la regresión Lasso y experimenta con diferentes valores de alpha.
  3. Lista los coeficientes no nulos (características seleccionadas) para cada valor de alpha y represéntalos gráficamente para visualizar qué características siguen siendo relevantes a medida que aumenta alpha.

Solución:

from sklearn.datasets import make_regression
from sklearn.linear_model import Lasso
import matplotlib.pyplot as plt

# Generate synthetic data with 15 features
X, y = make_regression(n_samples=100, n_features=15, noise=0.1, random_state=42)

# Define different alpha values to test
alpha_values = [0.01, 0.1, 1, 5, 10]
selected_features = {}

# Apply Lasso for each alpha value
for alpha in alpha_values:
    lasso = Lasso(alpha=alpha, max_iter=10000)
    lasso.fit(X, y)
    selected_features[alpha] = lasso.coef_

# Plot non-zero coefficients for each alpha
plt.figure(figsize=(10, 6))
for alpha, coefs in selected_features.items():
    plt.plot(range(len(coefs)), coefs, marker='o', label=f'alpha={alpha}')
plt.axhline(0, color='gray', linestyle='--')
plt.xlabel("Feature Index")
plt.ylabel("Coefficient Value")
plt.legend()
plt.title("Lasso Coefficients for Different Alpha Values")
plt.show()

Este código muestra cómo el modelo selecciona características ajustando alpha. A medida que alpha aumenta, más coeficientes se reducen a cero, eliminando características con relaciones más débiles con la variable objetivo.

Ejercicio 2: Ajuste de Lasso con Grid Search

Objetivo: Utilizar GridSearchCV para encontrar el alpha óptimo para la regresión Lasso basado en el rendimiento del modelo.

Instrucciones:

  1. Cargar un conjunto de datos y dividirlo en conjuntos de entrenamiento y prueba.
  2. Usar GridSearchCV para identificar el mejor alpha de un rango predefinido de valores.
  3. Evaluar el modelo con el mejor alpha en el conjunto de prueba.

Solución:

from sklearn.linear_model import Lasso
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.datasets import make_regression

# Generate synthetic data
X, y = make_regression(n_samples=100, n_features=20, noise=0.1, random_state=42)

# Split into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Define range of alpha values for GridSearch
alpha_values = {'alpha': [0.001, 0.01, 0.1, 1, 10]}

# Initialize Lasso and GridSearchCV
lasso = Lasso(max_iter=10000)
grid_search = GridSearchCV(lasso, alpha_values, cv=5, scoring='neg_mean_squared_error')
grid_search.fit(X_train, y_train)

# Best alpha value
best_alpha = grid_search.best_params_['alpha']
print("Optimal alpha for Lasso:", best_alpha)

# Evaluate model with best alpha
best_lasso = Lasso(alpha=best_alpha)
best_lasso.fit(X_train, y_train)
y_pred = best_lasso.predict(X_test)
print("Test MSE with optimal alpha:", mean_squared_error(y_test, y_pred))

Este ejercicio demuestra cómo usar GridSearchCV para ajustar alpha en Lasso, mejorando la selección de características y minimizando el error.

Ejercicio 3: Aplicación de la Regresión Ridge con Validación Cruzada

Objetivo: Explorar la regresión Ridge y determinar la fuerza de regularización óptima para un conjunto de datos con características multicolineales.

Instrucciones:

  1. Cargar un conjunto de datos con características multicolineales (por ejemplo, un conjunto de datos con variables correlacionadas).
  2. Usar la regresión Ridge con validación cruzada para determinar el mejor valor de alpha.
  3. Comparar el rendimiento del modelo en los conjuntos de entrenamiento y prueba.

Solución:

from sklearn.linear_model import Ridge
from sklearn.model_selection import cross_val_score
import numpy as np

# Generate synthetic data with correlated features
np.random.seed(42)
X = np.random.rand(100, 5)
y = X @ np.array([2, 4, -3, 1, 5]) + np.random.normal(0, 0.1, 100)

# Initialize Ridge model and range of alpha values
alpha_values = [0.01, 0.1, 1, 10, 100]
ridge_scores = []

# Evaluate each alpha with cross-validation
for alpha in alpha_values:
    ridge = Ridge(alpha=alpha)
    scores = cross_val_score(ridge, X, y, cv=5, scoring='neg_mean_squared_error')
    ridge_scores.append((alpha, np.mean(scores)))

# Find best alpha
best_alpha, best_score = max(ridge_scores, key=lambda x: x[1])
print("Optimal alpha for Ridge:", best_alpha)
print("Cross-validated MSE:", -best_score)

En este ejercicio:

  • Validación Cruzada: Aplicamos validación cruzada para evaluar el rendimiento de la regresión Ridge con diferentes valores de alpha.
  • Comparación: El alpha óptimo reduce los efectos de la multicolinealidad, estabilizando las estimaciones de los coeficientes y mejorando la generalización.

Ejercicio 4: Uso de Randomized Search para un Ajuste Eficiente de Lasso

Objetivo: Utilizar RandomizedSearchCV para ajustar de manera eficiente alpha en Lasso con un conjunto de datos de alta dimensión.

Instrucciones:

  1. Cargar un conjunto de datos de alta dimensión.
  2. Definir un rango logarítmico de valores de alpha y aplicar RandomizedSearchCV.
  3. Comparar el mejor modelo con el modelo base de Lasso usando datos de prueba.

Solución:

from sklearn.model_selection import RandomizedSearchCV
import numpy as np

# Generate synthetic data with high dimensionality
X, y = make_regression(n_samples=100, n_features=50, noise=0.1, random_state=42)

# Define alpha search space for RandomizedSearchCV
alpha_values = {'alpha': np.logspace(-4, 1, 100)}

# Initialize Lasso and RandomizedSearchCV
lasso = Lasso(max_iter=10000)
random_search = RandomizedSearchCV(lasso, alpha_values, cv=5, scoring='neg_mean_squared_error', n_iter=10, random_state=42)
random_search.fit(X, y)

# Display best alpha and score
best_alpha = random_search.best_params_['alpha']
print("Optimal alpha for Lasso (Randomized Search):", best_alpha)
print("Best cross-validated score (negative MSE):", random_search.best_score_)

 

En este ejemplo:

  • Datos de Alta Dimensión: Creamos un conjunto de datos con muchas características y utilizamos Randomized Search para identificar rápidamente un valor adecuado de alpha para Lasso.
  • Rango Logarítmico: Al definir un rango amplio y logarítmico para alpha, exploramos eficientemente el espacio de búsqueda sin realizar un ajuste exhaustivo.

Estos ejercicios proporcionan experiencia práctica con técnicas de regularización y ajuste de hiperparámetros para la selección de características utilizando Lasso y Ridge. Comprender cómo seleccionar y ajustar estos parámetros permite mejorar el rendimiento del modelo, reducir el sobreajuste y obtener resultados más interpretables.

6.3 Ejercicios Prácticos: Capítulo 6

En esta sección de ejercicios, aplicaremos técnicas de regularización para la selección de características utilizando Lasso y Ridge. Estos ejercicios ayudarán a consolidar tu comprensión de la regularización L1 y L2 y el ajuste de hiperparámetros.

Ejercicio 1: Aplicando Lasso para la Selección de Características

Objetivo: Usar la regresión Lasso para identificar las características más importantes de un conjunto de datos y observar cómo el cambio en el parámetro alpha afecta la selección de características.

Instrucciones:

  1. Carga un conjunto de datos con al menos 15 características.
  2. Aplica la regresión Lasso y experimenta con diferentes valores de alpha.
  3. Lista los coeficientes no nulos (características seleccionadas) para cada valor de alpha y represéntalos gráficamente para visualizar qué características siguen siendo relevantes a medida que aumenta alpha.

Solución:

from sklearn.datasets import make_regression
from sklearn.linear_model import Lasso
import matplotlib.pyplot as plt

# Generate synthetic data with 15 features
X, y = make_regression(n_samples=100, n_features=15, noise=0.1, random_state=42)

# Define different alpha values to test
alpha_values = [0.01, 0.1, 1, 5, 10]
selected_features = {}

# Apply Lasso for each alpha value
for alpha in alpha_values:
    lasso = Lasso(alpha=alpha, max_iter=10000)
    lasso.fit(X, y)
    selected_features[alpha] = lasso.coef_

# Plot non-zero coefficients for each alpha
plt.figure(figsize=(10, 6))
for alpha, coefs in selected_features.items():
    plt.plot(range(len(coefs)), coefs, marker='o', label=f'alpha={alpha}')
plt.axhline(0, color='gray', linestyle='--')
plt.xlabel("Feature Index")
plt.ylabel("Coefficient Value")
plt.legend()
plt.title("Lasso Coefficients for Different Alpha Values")
plt.show()

Este código muestra cómo el modelo selecciona características ajustando alpha. A medida que alpha aumenta, más coeficientes se reducen a cero, eliminando características con relaciones más débiles con la variable objetivo.

Ejercicio 2: Ajuste de Lasso con Grid Search

Objetivo: Utilizar GridSearchCV para encontrar el alpha óptimo para la regresión Lasso basado en el rendimiento del modelo.

Instrucciones:

  1. Cargar un conjunto de datos y dividirlo en conjuntos de entrenamiento y prueba.
  2. Usar GridSearchCV para identificar el mejor alpha de un rango predefinido de valores.
  3. Evaluar el modelo con el mejor alpha en el conjunto de prueba.

Solución:

from sklearn.linear_model import Lasso
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.datasets import make_regression

# Generate synthetic data
X, y = make_regression(n_samples=100, n_features=20, noise=0.1, random_state=42)

# Split into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Define range of alpha values for GridSearch
alpha_values = {'alpha': [0.001, 0.01, 0.1, 1, 10]}

# Initialize Lasso and GridSearchCV
lasso = Lasso(max_iter=10000)
grid_search = GridSearchCV(lasso, alpha_values, cv=5, scoring='neg_mean_squared_error')
grid_search.fit(X_train, y_train)

# Best alpha value
best_alpha = grid_search.best_params_['alpha']
print("Optimal alpha for Lasso:", best_alpha)

# Evaluate model with best alpha
best_lasso = Lasso(alpha=best_alpha)
best_lasso.fit(X_train, y_train)
y_pred = best_lasso.predict(X_test)
print("Test MSE with optimal alpha:", mean_squared_error(y_test, y_pred))

Este ejercicio demuestra cómo usar GridSearchCV para ajustar alpha en Lasso, mejorando la selección de características y minimizando el error.

Ejercicio 3: Aplicación de la Regresión Ridge con Validación Cruzada

Objetivo: Explorar la regresión Ridge y determinar la fuerza de regularización óptima para un conjunto de datos con características multicolineales.

Instrucciones:

  1. Cargar un conjunto de datos con características multicolineales (por ejemplo, un conjunto de datos con variables correlacionadas).
  2. Usar la regresión Ridge con validación cruzada para determinar el mejor valor de alpha.
  3. Comparar el rendimiento del modelo en los conjuntos de entrenamiento y prueba.

Solución:

from sklearn.linear_model import Ridge
from sklearn.model_selection import cross_val_score
import numpy as np

# Generate synthetic data with correlated features
np.random.seed(42)
X = np.random.rand(100, 5)
y = X @ np.array([2, 4, -3, 1, 5]) + np.random.normal(0, 0.1, 100)

# Initialize Ridge model and range of alpha values
alpha_values = [0.01, 0.1, 1, 10, 100]
ridge_scores = []

# Evaluate each alpha with cross-validation
for alpha in alpha_values:
    ridge = Ridge(alpha=alpha)
    scores = cross_val_score(ridge, X, y, cv=5, scoring='neg_mean_squared_error')
    ridge_scores.append((alpha, np.mean(scores)))

# Find best alpha
best_alpha, best_score = max(ridge_scores, key=lambda x: x[1])
print("Optimal alpha for Ridge:", best_alpha)
print("Cross-validated MSE:", -best_score)

En este ejercicio:

  • Validación Cruzada: Aplicamos validación cruzada para evaluar el rendimiento de la regresión Ridge con diferentes valores de alpha.
  • Comparación: El alpha óptimo reduce los efectos de la multicolinealidad, estabilizando las estimaciones de los coeficientes y mejorando la generalización.

Ejercicio 4: Uso de Randomized Search para un Ajuste Eficiente de Lasso

Objetivo: Utilizar RandomizedSearchCV para ajustar de manera eficiente alpha en Lasso con un conjunto de datos de alta dimensión.

Instrucciones:

  1. Cargar un conjunto de datos de alta dimensión.
  2. Definir un rango logarítmico de valores de alpha y aplicar RandomizedSearchCV.
  3. Comparar el mejor modelo con el modelo base de Lasso usando datos de prueba.

Solución:

from sklearn.model_selection import RandomizedSearchCV
import numpy as np

# Generate synthetic data with high dimensionality
X, y = make_regression(n_samples=100, n_features=50, noise=0.1, random_state=42)

# Define alpha search space for RandomizedSearchCV
alpha_values = {'alpha': np.logspace(-4, 1, 100)}

# Initialize Lasso and RandomizedSearchCV
lasso = Lasso(max_iter=10000)
random_search = RandomizedSearchCV(lasso, alpha_values, cv=5, scoring='neg_mean_squared_error', n_iter=10, random_state=42)
random_search.fit(X, y)

# Display best alpha and score
best_alpha = random_search.best_params_['alpha']
print("Optimal alpha for Lasso (Randomized Search):", best_alpha)
print("Best cross-validated score (negative MSE):", random_search.best_score_)

 

En este ejemplo:

  • Datos de Alta Dimensión: Creamos un conjunto de datos con muchas características y utilizamos Randomized Search para identificar rápidamente un valor adecuado de alpha para Lasso.
  • Rango Logarítmico: Al definir un rango amplio y logarítmico para alpha, exploramos eficientemente el espacio de búsqueda sin realizar un ajuste exhaustivo.

Estos ejercicios proporcionan experiencia práctica con técnicas de regularización y ajuste de hiperparámetros para la selección de características utilizando Lasso y Ridge. Comprender cómo seleccionar y ajustar estos parámetros permite mejorar el rendimiento del modelo, reducir el sobreajuste y obtener resultados más interpretables.