Ejercicio 46: Implementación Manual de Regresión Lineal con NumPy
En este ejercicio, se solicita implementar un regresor lineal simple utilizando NumPy, replicando el funcionamiento esencial de regplot
en Seaborn. El objetivo es comprender y aplicar los principios básicos de la regresión lineal ordinaria (OLS) mediante álgebra lineal, específicamente utilizando la pseudoinversa de Moore-Penrose.
Objetivos
- Implementar un modelo de regresión lineal simple utilizando NumPy.
- Generar un gráfico de dispersión de los datos.
- Dibujar la línea de regresión ajustada sobre el gráfico de dispersión.
- Evitar opciones de robustez adicionales para mantener el enfoque educativo.
Tipo de Ejercicio
- Práctico
Resultado Esperado
- Visualización
Dificultad
- Intermedio
Entrada de Datos
x
: Lista o array de valores independientes.y
: Lista o array de valores dependientes.
Código Base
import numpy as np
import matplotlib.pyplot as plt
class SimpleRegressionPlot:
def __init__(self, x, y):
"""Inicializa con datos x e y."""
self.x = np.asarray(x)
self.y = np.asarray(y)
def fit_ols(self, x, y):
"""Calcula los coeficientes de regresión OLS usando álgebra lineal."""
X = np.c_[np.ones(len(x)), x] # Añadir término de intercepto
beta = np.linalg.pinv(X) @ y # Calcular solución OLS
return beta # Retorna [intercepto, pendiente]
def predict(self, x_new):
"""Predice valores de y para valores de x dados usando el modelo ajustado."""
beta = self.fit_ols(self.x, self.y)
X_new = np.c_[np.ones(len(x_new)), x_new]
return X_new @ beta # Calcular y predicho
def plot(self):
"""Genera gráfico de dispersión con línea de regresión ajustada."""
# TODO: Implementar
Pruebas
# Ejemplo de uso
np.random.seed(42)
x = np.random.rand(50) * 10
y = 2.5 * x + np.random.randn(50) * 5 # Relación verdadera con ruido
reg_plot = SimpleRegressionPlot(x, y)
reg_plot.plot()
Este ejercicio proporciona una base sólida para comprender la implementación manual de un regresor lineal simple y su visualización, replicando el comportamiento básico de regplot
en Seaborn.