Cómo predecir precios con álgebra lineal
Clase 12 de 16 • Curso de Álgebra Lineal para Machine Learning
Contenido del curso
Operaciones con Vectores y Matrices
Multiplicación de Matrices
Construcción de un Modelo de Regresión Lineal
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?