Underfitting (Subajuste)

El Underfitting o la insuficiencia de datos ocurre cuando el modelo es demasiado simple para capturar la relación entre las variables de entrada y salida. En este caso, la regresión lineal no es capaz de capturar la relación no lineal entre la variable independiente 𝑋 y la variable dependiente 𝑦, lo que resulta en un mal desempeño tanto en el conjunto de entrenamiento como en el conjunto de prueba. Es un problema en el modelo.

Ejercicio: Underfitting

Problema: Tienes un conjunto de datos con una relación compleja, pero utilizas un modelo demasiado simple, como una regresión lineal, para ajustarlo. Esto puede hacer que el modelo no sea capaz de capturar la relación subyacente en los datos, lo que resulta en un ajuste deficiente tanto en el conjunto de entrenamiento como en el conjunto de prueba.

Objetivo:

Demostrar cómo el underfitting ocurre cuando el modelo es demasiado simple para capturar la complejidad de los datos.

Código de ejemplo:

Ver en Google Colab ➜

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# Generar datos sintéticos
np.random.seed(42)
X = np.sort(5 * np.random.rand(80, 1), axis=0)  # 80 puntos de datos
y = np.sin(X).ravel() + np.random.normal(0, 0.1, X.shape[0])  # Función seno con ruido

# Dividir los 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)

# Regresión lineal (modelo demasiado simple para datos no lineales)
model = LinearRegression()
model.fit(X_train, y_train)

# Predicciones
y_pred_train = model.predict(X_train)
y_pred_test = model.predict(X_test)

# Evaluación del modelo
mse_train = mean_squared_error(y_train, y_pred_train)
mse_test = mean_squared_error(y_test, y_pred_test)

# Mostrar resultados
print(f"Error en el conjunto de entrenamiento (MSE): {mse_train}")
print(f"Error en el conjunto de prueba (MSE): {mse_test}")

# Graficar los resultados
plt.scatter(X, y, color='gray', label='Datos reales')
plt.plot(X_train, y_pred_train, color='blue', label='Modelo lineal (underfitting)')
plt.legend()
plt.title("Underfitting con regresión lineal")
plt.show()

Qué esperar:

  • Underfitting ocurre cuando el modelo es demasiado simple para capturar la relación entre las variables de entrada y salida. En este caso, la regresión lineal no es capaz de capturar la relación no lineal entre la variable independiente (X) y la variable dependiente (y), lo que resulta en un mal desempeño tanto en el conjunto de entrenamiento como en el conjunto de prueba.
  • En la gráfica, la línea de regresión lineal no seguirá bien los datos de la función seno, lo que refleja el underfitting.