Extensión del modelo lineal
Introducción
En la regresión lineal, el modelo se basa en una relación lineal directa entre las variables independientes y la variable dependiente. Sin embargo, en muchos casos reales, las relaciones no son tan simples. Por lo tanto, es importante aprender a extender el modelo lineal para adaptarlo a diferentes tipos de datos y relaciones no lineales. En esta unidad, exploraremos cómo extendemos el modelo lineal a modelos polinómicos, que pueden capturar relaciones más complejas en los datos.
Explicación principal con ejemplos
La regresión polinómica es una técnica que permite al modelo adaptarse a curvas no lineales. En lugar de tratar la relación entre las variables como una línea recta, se modela como una función polinómica. Por ejemplo, si queremos ajustar un modelo para predecir el precio de una casa basado en su tamaño y edad, podríamos encontrar que no es suficiente usar una línea recta.
Supongamos que tenemos los siguientes datos:
| Tamaño (m²) | Edad (años) | Precio ($) | |-------------|------------|-----------| | 100 | 20 | 350,000 | | 150 | 30 | 480,000 | | 200 | 40 | 620,000 | | 250 | 50 | 770,000 | | 300 | 60 | 940,000 |
Si aplicamos una regresión lineal simple a estos datos, la relación no se ajustará bien. Sin embargo, podemos mejorar el modelo usando un polinomio de segundo grado:
\[ \text{Precio} = \beta_0 + \beta_1 \times (\text{Tamaño}) + \beta_2 \times (\text{Tamaño})^2 \]
Este modelo puede ajustarse a los datos mejor que una línea recta.
import numpy as np
import matplotlib.pyplot as plt
# Datos de ejemplo
tamaño = np.array([100, 150, 200, 250, 300])
edad = np.array([20, 30, 40, 50, 60])
precio = np.array([350_000, 480_000, 620_000, 770_000, 940_000])
# Crear un polinomio de segundo grado
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(np.vstack(tamaño).reshape(-1, 1))
model = LinearRegression()
model.fit(X_poly, precio)
# Visualizar el modelo
plt.scatter(tamaño, precio, color='blue')
plt.plot(tamaño, model.predict(poly.transform(tamaño.reshape(-1, 1))), color='red')
plt.title('Regresión Polinómica de Segundo Grado')
plt.xlabel('Tamaño (m²)')
plt.ylabel('Precio ($)')
plt.show()
Errores típicos / trampas
- Sobreajuste: Al permitir modelos polinómicos con un grado alto, hay un riesgo de sobreajuste a los datos de entrenamiento y pérdida de generalización a nuevos datos.
- Elevado ruido en los datos: Si el conjunto de datos tiene mucho ruido o variabilidad, puede resultar en curvas excesivamente complejas que no reflejan la verdadera relación.
- Interpretación incorrecta: Un polinomio de grado alto puede crear una apariencia confusa y difícil de interpretar. Es importante asegurarse de que el modelo sea fácilmente interpretable para los usuarios finales.
Checklist accionable
- Revisar la relación: Utiliza gráficos散点图和线性模型来检查数据是否适合线性或非线性关系。
- Elegir un grado adecuado: Empieza con un modelo lineal simple y aumenta gradualmente el grado hasta que se note una mejora en los resultados de validación.
- Validar el modelo: Evalúa la performance del modelo utilizando métricas como MAE, MSE o R² en conjuntos de datos de validación y prueba.
- Reducir el ruido: Implementa técnicas para reducir el ruido, como suavizado con media móvil o filtrado de Kalman.
- Interpretar los resultados: Asegúrate de que el modelo sea fácilmente interpretable antes de implementarlo en producción.
Cierre
Siguientes pasos
- Exploración adicional: Experimenta con diferentes grados para encontrar la mejor combinación entre complejidad del modelo y generalización.
- Regularización: Implementa técnicas de regularización, como Ridge o Lasso, para prevenir el sobreajuste.
- Transformaciones adicionales: Aprende a aplicar transformaciones adicionales en tus variables para mejorar aún más la calidad del ajuste.
Siguiendo estos pasos, podrás extender adecuadamente el modelo lineal y adaptarlo a una amplia gama de problemas de regresión no lineal.