Por qué la multicolinealidad rompe el entrenamiento
Clase 15 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 multicolinealidad puede convertir un entrenamiento en un callejón sin salida. Aquí verás cómo la singularidad emerge cuando hay características redundantes, por qué el determinante y el rango son tus pruebas clave y cómo la matriz de Gram y la ecuación normal se quiebran en la práctica con NumPy en Google Colab.
¿Qué es la singularidad y por qué la causa la multicolinealidad?
Cuando dos o más columnas en X contienen la misma información, se vuelven linealmente dependientes. Ejemplos claros: convertir “metros cuadrados” a “centímetros cuadrados” o duplicar “habitaciones”. No hay nueva información, solo una versión escalada.
¿Cómo se manifiesta la dependencia lineal en X?
- Columnas equivalentes por escala, como m² y pies² (factor 10.764).
- Duplicación de una variable, como “habitaciones” y una copia de “habitaciones”.
- Consecuencia: la matriz de Gram XᵀX se vuelve singular.
- Signo inequívoco: determinante igual a cero.
- Implicación: no existe inversa, no hay solución única para la ecuación normal.
¿Qué problemas genera en el modelo?
- Ambigüedad en la solución: hay infinitos vectores de pesos que explican igual los datos.
- Inestabilidad extrema: con determinante cercano a cero, pequeñas variaciones en la entrada cambian drásticamente los pesos.
- Falta de interpretabilidad: los pesos no son fiables para estimar la importancia de cada característica.
¿Cómo diagnosticarlo en Google Colab con NumPy?
El procedimiento práctico reproduce la multicolinealidad agregando una columna redundante y luego mediendo determinante y rango. Finalmente, se prueba la inversión y la resolución del sistema.
¿Cómo crear la característica redundante?
- Tomar la primera columna de X: X[:, 0].
- Convertir m² a pies² multiplicando por 10.764: crear “pies2”.
- Concatenar con np.c_ para formar X_enfermo.
- Agregar bias con una columna de ones de forma 4,1 y concatenarla: X_enfermo_bias.
- Verificar al imprimir: la última columna replica la segunda en otra escala.
¿Qué métricas revisar: determinante y rango?
- Calcular A_enfermo = X_enfermo_biasᵀ X_enfermo_bias y B = X_enfermo_biasᵀ y.
- Usar np.linalg.det(A_enfermo): devuelve 0, alerta roja de singularidad.
- Usar np.linalg.matrix_rank(A_enfermo): da 3, confirmando que no hay inversa.
¿Qué pasa al intentar resolver la ecuación normal?
- Intentar np.linalg.inv(A_enfermo) @ B: error “singular matrix”.
- Intentar np.linalg.solve(A_enfermo, B): mismo error.
- Conclusión: el modelo no se puede entrenar con esta X.
¿Qué experimentar ahora y cuál es la salida cuando falla la inversa?
Pequeños cambios rompen la dependencia perfecta. Eso permite observar cómo pasa de singularidad exacta a mal condicionamiento, donde aún hay riesgos de inestabilidad, pero ya es posible probar la inversión o un solver.
¿Qué cambios probar para romper la redundancia?
- Modificar ligeramente un valor en la última columna de X_enfermo.
- Dejar de usar exactamente 10.764 como factor en al menos una fila.
- Recalcular A_enfermo, B, determinante y rango.
¿Qué observar después del cambio?
- El determinante deja de ser 0 o se vuelve un número muy pequeño.
- np.linalg.inv y np.linalg.solve pueden funcionar, pero con potencial inestabilidad si el determinante es diminuto.
- Los pesos serán menos indeterminados; la interpretación aún puede ser frágil si hay alta multicolinealidad.
¿Con qué herramienta continuar cuando no existe inversa?
- Usar la seudoinversa: permite obtener la mejor solución posible incluso cuando no hay solución perfecta para la ecuación normal.
¿Ya probaste el experimento y mediste el determinante, el rango y el comportamiento de inv y solve? Comparte tus resultados y lo que observaste en la estabilidad de los pesos.