Contenido del curso
Operaciones con Vectores y Matrices
Multiplicación de Matrices
Construcción de un Modelo de Regresión Lineal
Pseudo inversa de NumPy para matrices singulares
Resumen
Cuando un modelo de regresión lineal falla por multicolinealidad, la pseudo inversa de NumPy se convierte en la herramienta de rescate. Aprenderás qué es, por qué funciona y cómo aplicarla con np.linalg.pinv para encontrar la mejor solución aproximada en problemas reales de machine learning.
¿Qué es la pseudo inversa y por qué resuelve la multicolinealidad?
La pseudo inversa, también conocida como inversa de Moore-Penrose, es una generalización de la matriz inversa tradicional. Su gran ventaja es que funciona con cualquier tipo de matriz: cuadrada, rectangular o singular.
Cuando una matriz tiene columnas linealmente dependientes, como ocurre al duplicar la columna de pies cuadrados a partir de metros cuadrados, los métodos clásicos np.linalg.inv o np.linalg.solve arrojan el error singular matrix. Ahí entra np.linalg.pinv para encontrar los pesos que minimizan el error cuadrático, la técnica que conoces como mínimos cuadrados [1:00].
¿Qué hace la pseudo inversa cuando hay infinitas soluciones? Elige la única cuyo vector de pesos theta tiene la norma más pequeña posible. Es decir, la solución más simple y estable entre todas las matemáticamente válidas.
Como dato curioso, la pseudo inversa se apoya en una técnica avanzada llamada SVD o descomposición en valores singulares [1:35].
¿Cómo aplicar np.linalg.pinv paso a paso en Python?
Partimos del proyecto previo, donde X_enfermo tiene una columna duplicada entre metros cuadrados y pies cuadrados. Primero construimos las matrices base del sistema normal de ecuaciones [2:00]:
python A_enfermo = X_enfermo_bias.T @ X_enfermo_bias B = X_enfermo_bias.T @ Y
Al intentar np.linalg.inv(A_enfermo) @ B confirmamos el error de matriz singular. La solución es reemplazar la inversión tradicional por la pseudo inversa:
python A_pinv = np.linalg.pinv(A_enfermo) theta = A_pinv @ B print(theta)
Esta vez el cálculo se ejecuta sin errores y obtienes los pesos del modelo [3:00].
¿Cómo se ven los pesos theta bajo multicolinealidad?
Al imprimir theta notarás que los coeficientes asociados a las columnas linealmente dependientes (metros cuadrados y pies cuadrados) son muy pequeños comparados con los del modelo saludable original. Esa es una de las firmas más claras de la multicolinealidad: la pseudo inversa reparte el peso entre las variables redundantes en lugar de concentrarlo en una sola [3:30].
¿Las predicciones siguen siendo buenas con un dataset enfermo?
La prueba final está en comparar valores reales contra predicciones del modelo rescatado:
python predicciones = X_enfermo_bias @ theta print(f"Predicciones del modelo enfermo: {np.round(predicciones, 2)}")
Los resultados muestran aproximaciones bastante cercanas a los precios originales [4:20]:
- Casa 1: real 310, predicción 308.07.
- Casa 2: real 390, predicción 407.37.
- Casa 3: real 325, predicción 317.28.
- Casa 4: real 530, predicción 522.
A pesar de que el dataset estaba enfermo, la pseudo inversa logra una línea de regresión coherente con los datos reales.
¿Por qué los pesos son pequeños pero las predicciones acertadas? Porque la pseudo inversa distribuye el aporte entre las columnas redundantes y aun así proyecta correctamente los datos sobre el plano de mejor ajuste.
¿Cómo graficar la línea de regresión con la pseudo inversa?
Para visualizar el ajuste con matplotlib generamos puntos nuevos respetando la estructura de cuatro columnas de X_enfermo_bias [5:30]:
python import matplotlib.pyplot as plt
plt.figure(figsize=(8, 6)) plt.scatter(X_enfermo[:, 1], Y, color='blue', label='Datos reales de las casas')
X_linea = np.array([[50], [160]]) X_linea_bias = np.c_[np.ones((2, 1)), X_linea, np.array([[2, 538], [4, 1722]])] Y_linea_pred = X_linea_bias @ theta
plt.plot(X_linea, Y_linea_pred, color='red', label='Línea de regresión con pinv') plt.xlabel('Metros cuadrados') plt.ylabel('Precio en miles') plt.grid(True) plt.legend() plt.show()
El gráfico final muestra una línea roja que se ajusta correctamente a los datos azules, confirmando que las proyecciones ortogonales entregan la mejor solución aproximada al problema [6:30].
¿Qué significa que pinv encuentre la solución de mínima norma?
Con multicolinealidad existen infinitas combinaciones de pesos theta que resuelven el sistema. La pseudo inversa elige la que tiene el vector theta más corto, es decir, la de mínima norma euclidiana. Esto la convierte en la opción matemáticamente más estable y la menos propensa a comportamientos erráticos en producción.
Haber rescatado un modelo matemáticamente roto es una habilidad clave para un científico de datos, porque los datasets del mundo real rara vez son perfectos. Aun así, recuerda que la redundancia entre columnas debe tratarse en la etapa de preprocesamiento siempre que sea posible: la pseudo inversa es un salvavidas, no un sustituto del análisis exploratorio.
¿Te animas a investigar por qué la solución de mínima norma es la más corta de todas las posibles? Comparte tus hallazgos en los comentarios.