Resumen

La regresión lineal permite estimar precios de viviendas con el poder del álgebra lineal. A partir de datos reales, se formula Xθ = y para encontrar los pesos θ que generan la línea de mejor ajuste. Con un ejemplo de cuatro casas y dos características, se prepara el sistema y se construyen sus componentes: matriz de Gram y vector B, listos para resolver mediante la ecuación normal.

¿Qué resuelve la regresión lineal para precios de viviendas?

La meta es ajustar una línea o plano que minimice el error entre predicciones y valores reales. Para precios, la hipótesis es: precio = θ0 + θ1·metros cuadrados + θ2·habitaciones. Con notación matricial, se escribe Xθ = y, donde X es la matriz de características, y el vector de precios y θ el vector de pesos.

  • Mejor ajuste: línea roja que se aproxima a los puntos azules de datos reales.
  • Hipótesis paramétrica: θ0, θ1 y θ2 son el conocimiento del modelo.
  • Ecuación normal: se busca θ resolviendo XᵀX θ = Xᵀy.
  • Objetivo práctico: predecir el precio con base en metros cuadrados y habitaciones.

¿Cómo aplicar la ecuación normal con NumPy paso a paso?

Se trabaja en Google Colab con NumPy y Matplotlib. Primero, se define el conjunto de datos y se visualiza para ver si una sola línea pasa por todos los puntos (no necesariamente).

  • Crear X con dos columnas: metros cuadrados y habitaciones.
  • Crear y con los precios reales en miles de dólares.
  • Graficar dispersión para inspección visual.
  • Agregar bias (columna de unos) para incluir el término θ0.
  • Construir A = XᵀX y B = Xᵀy para la ecuación normal.
import numpy as np import matplotlib.pyplot as plt # Datos X = np.array([ [80, 3], [120, 3], [100, 2], [150, 4] ]) y = np.array([310, 390, 325, 530]) # miles de dólares # Visualización plt.figure(figsize=(8, 6)) plt.scatter(X[:, 0], y, color='blue', label='datos reales de las casas') plt.xlabel('metros cuadrados') plt.ylabel('precio') plt.title('¿será que podemos ajustar una línea perfecta en estos datos?') plt.grid(True) plt.legend() plt.show() # Agregar bias X_bias = np.c_[np.ones((4, 1)), X] # Componentes de la ecuación normal A = X_bias.T @ X_bias B = X_bias.T @ y print(f"matriz A:\n{A}") print(f"vector B:\n{B}")
  • X_bias: añade una columna de unos para evitar forzar la línea a pasar por el origen.
  • A y B listos: el sistema Aθ = B queda planteado para resolver los pesos óptimos.

¿Por qué la matriz de Gram y el vector B importan?

La matriz de Gram A = XᵀX condensa la estructura del conjunto de datos. Resume la importancia individual de cada característica y cómo se relacionan entre sí. En el ejemplo, los metros cuadrados dominan numéricamente por su rango mayor (de 80 a 150) frente a habitaciones (de 2 a 4), por eso aparecen valores más grandes asociados a esa característica. Es un mapa compacto de relevancias y correlaciones.

  • Importancia individual: qué tanta “fuerza” tiene cada característica por sí sola.
  • Relación entre características: si más metros cuadrados suelen implicar más habitaciones.
  • Escala de valores: rangos altos generan números grandes en A.

El vector B = Xᵀy captura la conexión entre cada característica y el precio objetivo. Un valor alto indica que esa característica aporta una pista fuerte para estimar el precio. El primer elemento refleja la columna de unos del bias; los siguientes vinculan directamente metros cuadrados y habitaciones con el precio.

  • Conexión con el objetivo: mide la asociación entre características y precio.
  • Prioridad práctica: metros cuadrados tiende a destacar por su magnitud numérica.
  • Preparación final: con A y B definidos, queda resolver para θ y obtener la línea de mejor ajuste.

Antes de resolver, te invito a participar: comparte en comentarios la forma (shape) de la matriz A que obtuviste. ¿Es cuadrada? ¿Por qué crees que esto es importante para el siguiente paso al resolver el sistema?

      Cómo predecir precios con álgebra lineal