Regresión lineal

Basic

Regresión lineal y mínimos cuadrados ordinarios | Teoría e implementación en Python

Creado: Última actualización: Tiempo de lectura: 3 min
まとめ
  • La regresión lineal modela la relación lineal entre entrada y salida y sirve como base tanto para la predicción como para la interpretación.
  • El método de mínimos cuadrados ordinarios estima los coeficientes minimizando la suma de los residuos al cuadrado y ofrece una solución en forma cerrada.
  • La pendiente indica cuánto cambia la salida cuando la entrada aumenta una unidad, mientras que la ordenada al origen representa el valor esperado cuando la entrada es cero.
  • Cuando el ruido o los valores atípicos son grandes conviene combinar estandarización y variantes robustas para mantener fiable el preprocesamiento y la evaluación.

Intuición #

Cuando la nube de puntos (xi,yi)(x_i, y_i) forma aproximadamente una línea recta, prolongarla es una forma natural de interpolar nuevas entradas. Mínimos cuadrados ordinarios dibuja una recta que pasa lo más cerca posible de todos los puntos haciendo que la desviación total entre las observaciones y la recta sea mínima.

Formulación matemática #

Un modelo lineal univariado se expresa como

y=wx+b. y = w x + b.

Al minimizar la suma de cuadrados de los residuos ϵi=yi(wxi+b)\epsilon_i = y_i - (w x_i + b)

L(w,b)=i=1n(yi(wxi+b))2, L(w, b) = \sum_{i=1}^{n} \big(y_i - (w x_i + b)\big)^2,

obtenemos la solución analítica

w=i=1n(xixˉ)(yiyˉ)i=1n(xixˉ)2,b=yˉwxˉ, w = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{n} (x_i - \bar{x})^2}, \qquad b = \bar{y} - w \bar{x},

donde xˉ\bar{x} y yˉ\bar{y} son las medias de xx y yy. La misma idea se extiende a la regresión multivariante usando vectores y matrices.

Experimentos con Python #

El siguiente ejemplo ajusta una recta con scikit-learn y dibuja el resultado. El código es el mismo que en la versión japonesa para mantener las figuras sincronizadas.

from __future__ import annotations

import japanize_matplotlib
import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler


def plot_simple_linear_regression(n_samples: int = 100) -> None:
    """Plot a fitted linear regression model for synthetic data.

    Args:
        n_samples: Number of synthetic samples to generate.
    """
    japanize_matplotlib.japanize()
    rng = np.random.default_rng(seed=0)

    X: np.ndarray = np.linspace(-5.0, 5.0, n_samples, dtype=float)[:, np.newaxis]
    noise: np.ndarray = rng.normal(scale=2.0, size=n_samples)
    y: np.ndarray = 2.0 * X.ravel() + 1.0 + noise

    model = make_pipeline(StandardScaler(with_mean=False), LinearRegression())
    model.fit(X, y)
    y_pred: np.ndarray = model.predict(X)

    fig, ax = plt.subplots(figsize=(10, 5))
    ax.scatter(X, y, marker="x", label="Observed data", c="orange")
    ax.plot(X, y_pred, label="Regression fit")
    ax.set_xlabel("$x$")
    ax.set_ylabel("$y$")
    ax.legend()
    fig.tight_layout()
    plt.show()

plot_simple_linear_regression()

El código es el mismo que en la versión japonesa para manten… (figura)

Interpretación de los resultados #

  • Pendiente ww: muestra cuánto aumenta o disminuye la salida cuando la entrada crece una unidad; la estimación debería acercarse al valor real.
  • Ordenada bb: representa el valor esperado cuando la entrada es 0 y ajusta la posición vertical de la recta.
  • Estandarizar las características con StandardScaler estabiliza el aprendizaje cuando las escalas de entrada difieren.

Referencias #

  • Draper, N. R., & Smith, H. (1998). Applied Regression Analysis (3rd ed.). John Wiley & Sons.
  • Hastie, T., Tibshirani, R., & Friedman, J. (2009). The Elements of Statistical Learning. Springer.