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:
- Carga un conjunto de datos con al menos 15 características.
- Aplica la regresión Lasso y experimenta con diferentes valores de
alpha
. - 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 aumentaalpha
.
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:
- Cargar un conjunto de datos y dividirlo en conjuntos de entrenamiento y prueba.
- Usar GridSearchCV para identificar el mejor
alpha
de un rango predefinido de valores. - 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:
- Cargar un conjunto de datos con características multicolineales (por ejemplo, un conjunto de datos con variables correlacionadas).
- Usar la regresión Ridge con validación cruzada para determinar el mejor valor de alpha.
- 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:
- Cargar un conjunto de datos de alta dimensión.
- Definir un rango logarítmico de valores de alpha y aplicar RandomizedSearchCV.
- 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:
- Carga un conjunto de datos con al menos 15 características.
- Aplica la regresión Lasso y experimenta con diferentes valores de
alpha
. - 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 aumentaalpha
.
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:
- Cargar un conjunto de datos y dividirlo en conjuntos de entrenamiento y prueba.
- Usar GridSearchCV para identificar el mejor
alpha
de un rango predefinido de valores. - 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:
- Cargar un conjunto de datos con características multicolineales (por ejemplo, un conjunto de datos con variables correlacionadas).
- Usar la regresión Ridge con validación cruzada para determinar el mejor valor de alpha.
- 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:
- Cargar un conjunto de datos de alta dimensión.
- Definir un rango logarítmico de valores de alpha y aplicar RandomizedSearchCV.
- 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:
- Carga un conjunto de datos con al menos 15 características.
- Aplica la regresión Lasso y experimenta con diferentes valores de
alpha
. - 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 aumentaalpha
.
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:
- Cargar un conjunto de datos y dividirlo en conjuntos de entrenamiento y prueba.
- Usar GridSearchCV para identificar el mejor
alpha
de un rango predefinido de valores. - 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:
- Cargar un conjunto de datos con características multicolineales (por ejemplo, un conjunto de datos con variables correlacionadas).
- Usar la regresión Ridge con validación cruzada para determinar el mejor valor de alpha.
- 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:
- Cargar un conjunto de datos de alta dimensión.
- Definir un rango logarítmico de valores de alpha y aplicar RandomizedSearchCV.
- 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:
- Carga un conjunto de datos con al menos 15 características.
- Aplica la regresión Lasso y experimenta con diferentes valores de
alpha
. - 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 aumentaalpha
.
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:
- Cargar un conjunto de datos y dividirlo en conjuntos de entrenamiento y prueba.
- Usar GridSearchCV para identificar el mejor
alpha
de un rango predefinido de valores. - 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:
- Cargar un conjunto de datos con características multicolineales (por ejemplo, un conjunto de datos con variables correlacionadas).
- Usar la regresión Ridge con validación cruzada para determinar el mejor valor de alpha.
- 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:
- Cargar un conjunto de datos de alta dimensión.
- Definir un rango logarítmico de valores de alpha y aplicar RandomizedSearchCV.
- 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.