Entrenamiento de varios modelos
Introducción
En el entorno real, no es raro que los datos estén contaminados por ruido o pertenezcan a diferentes distribuciones. Por lo tanto, antes de aplicar un modelo predictivo en una tarea específica, es crucial probar y comparar varios algoritmos para seleccionar el mejor ajuste a nuestros datos. En esta unidad, nos enfocaremos en entrenar y evaluar diversos modelos de regresión con el objetivo de encontrar el que mejor se adapte a nuestro conjunto de datos.
Explicación principal
El proceso de entrenamiento de múltiples modelos implica varias etapas: exploración inicial de los datos, selección de algoritmos, implementación y entrenamiento de estos modelos, y finalmente la evaluación comparativa. Vamos a ilustrar este proceso con un ejemplo práctico.
Exploración inicial
Primero, analicemos el conjunto de datos. Supongamos que estamos trabajando en un problema de previsión del precio de viviendas basado en características como el tamaño del terreno, la ubicación, y otros factores relevantes.
import pandas as pd
from sklearn.model_selection import train_test_split
# Cargar los datos
data = pd.read_csv('housing_data.csv')
# Separar las variables independientes (X) y la variable dependiente (y)
X = data.drop('price', axis=1)
y = data['price']
# Dividir el conjunto de datos en entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Selección y entrenamiento de modelos
Ahora, entrenaremos varios modelos de regresión: lineal simple, múltiple, polinómica, árbol de regresión, Random Forest y Gradient Boosting.
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
# Modelo lineal simple
linear_reg = LinearRegression()
linear_reg.fit(X_train, y_train)
# Modelo polinómico de grado 2
poly_features = PolynomialFeatures(degree=2)
X_train_poly = poly_features.fit_transform(X_train)
X_test_poly = poly_features.transform(X_test)
poly_reg = LinearRegression()
poly_reg.fit(X_train_poly, y_train)
# Árbol de regresión
tree_reg = DecisionTreeRegressor(random_state=42)
tree_reg.fit(X_train, y_train)
# Random Forest
forest_reg = RandomForestRegressor(n_estimators=100, random_state=42)
forest_reg.fit(X_train, y_train)
# Gradient Boosting
gb_reg = GradientBoostingRegressor()
gb_reg.fit(X_train, y_train)
Evaluación comparativa
Una vez entrenados los modelos, procedemos a evaluarlos utilizando métricas apropiadas.
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
def evaluate_models(models, X_test, y_test):
for name, model in models.items():
y_pred = model.predict(X_test)
print(f'Model: {name}')
print(f' MAE: {mean_absolute_error(y_test, y_pred)}')
print(f' MSE: {mean_squared_error(y_test, y_pred)}')
print(f' RMSE: {mean_squared_error(y_test, y_pred, squared=False)}')
print(f' R²: {r2_score(y_test, y_pred)}')
models = {
'Linear Regression': linear_reg,
'Polynomial Regression (deg=2)': poly_reg,
'Decision Tree': tree_reg,
'Random Forest': forest_reg,
'Gradient Boosting': gb_reg
}
evaluate_models(models, X_test, y_test)
Errores típicos / trampas
- Sobreajuste: Algunos modelos, como los árboles de regresión o el Gradient Boosting, pueden sobreajustarse fácilmente a la data de entrenamiento. Es importante utilizar técnicas como validación cruzada para prevenir este problema.
- Subestimación del ruido: Ignorar el ruido en la data puede llevar a modelos que subestiman la incertidumbre y, por lo tanto, a predicciones inexactas. Asegúrate de incluir métricas que muestren la variabilidad en tus datos.
- Supuestos no satisfechos: Algunos modelos asumen supuestos como linealidad o homocedasticidad. No entrenar y evaluar estos supuestos puede llevar a resultados erróneos. Usa técnicas de diagnóstico como el análisis de residuos para verificar los supuestos.
Checklist accionable
- Exploración y preparación de datos: Asegúrate de que tus datos estén limpios y sin valores faltantes.
- Selección de modelos: Prueba varios algoritmos y no te detengas en el primero que funcione.
- Tuning: Optimiza los hiperparámetros de cada modelo para mejorar su rendimiento.
- Validación cruzada: Utiliza validación cruzada para evaluar la generalización de tus modelos.
- Evaluación comparativa: Compara los modelos utilizando múltiples métricas y considera el contexto del problema al seleccionar el mejor.
Cierre con "Siguientes pasos"
- Reentrenamiento regular: Los modelos deben reentrenarse periódicamente para adaptarse a cambios en la data.
- Monitoreo del error: Mantén un registro de los errores y las métricas de rendimiento para detectar posibles problemas.
- Documentación: Documenta todos los pasos del proceso para facilitar el mantenimiento y el entendimiento.
Siguiendo estos pasos, podrás entrenar modelos robustos y eficientes que se adapten a una amplia gama de problemas de regresión en machine learning.