Contenido del curso
Operaciones con Vectores y Matrices
Multiplicación de Matrices
Construcción de un Modelo de Regresión Lineal
Cómo predecir precios con álgebra lineal
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?