Determinante y rango para diagnosticar matrices

Resumen

Diagnosticar una matriz antes de entrenar un modelo te ahorra horas de depuración. Cuando trabajas con regresión lineal y la ecuación normal, el determinante y el rango funcionan como dos señales vitales que te dicen si tu matriz es invertible y si tus características aportan información independiente. Aquí aprenderás a calcularlos en NumPy y a leer lo que te cuentan sobre tus datos.

¿Por qué funciona la ecuación normal en una regresión lineal?

En la clase anterior encontramos los pesos del modelo y todo salió bien, pero la pregunta de fondo es qué propiedad de la matriz A permitió esa solución. La respuesta vive en dos números que diagnostican el estado de tu sistema antes de invertir nada.

¿Qué nos dice el determinante sobre la matriz A?

El determinante describe cómo una matriz escala el espacio y, en el contexto de la ecuación normal, actúa como una prueba rápida de invertibilidad. Si es distinto de cero, la matriz es invertible y tu sistema tiene una solución única. Si es cero, prepárate: el método de la inversa va a fallar.

¿Qué significa que el determinante sea cero? Significa que tu matriz no es invertible y que la ecuación normal no puede resolverse por el camino directo. Es una alerta roja sobre la estructura de tus datos.

¿Qué información extra te da el rango?

El rango va un paso más allá: te dice cuántas características son verdaderamente independientes. Si tienes tres columnas pero el rango es dos, una de esas columnas es redundante y no aporta información nueva al modelo [00:55].

La conexión entre ambos es directa. Cuando hay características redundantes, el determinante cae a cero y el rango queda por debajo del número total de columnas.

¿Cómo diagnosticar una matriz saludable en NumPy?

En el notebook partimos de la matriz original del ejercicio anterior y la renombramos como A_saludable para dejar claro que es la versión sana de los datos [01:25]. A partir de ahí calculamos los dos diagnósticos.

  • det_saludable = np.linalg.det(A_saludable) devuelve el determinante.
  • rango_saludable = np.linalg.matrix_rank(A_saludable) devuelve el rango.
  • Al imprimir ambos, el determinante sale grande y distinto de cero, y el rango es 3.

Ese rango de tres tiene sentido porque la matriz X_bias se construyó concatenando una columna de unos con las dos columnas originales de metros cuadrados y habitaciones. Tres columnas, tres dimensiones independientes, matriz saludable.

¿Qué pasa si agregas una columna redundante a tus datos?

Ahora viene la parte interesante: enfermar la matriz a propósito para ver el efecto en los diagnósticos [02:25]. Vamos a duplicar una columna existente y observar cómo reaccionan el determinante y el rango.

¿Cómo construir la matriz enferma paso a paso?

El proceso replica la construcción original, pero añadiendo una columna que es múltiplo de otra.

  1. Crear habitaciones_doble = X[:, 1] * 2, que duplica el número de habitaciones.
  2. Concatenar con X_enfermo = np.c_[X, habitaciones_doble].
  3. Añadir el bias: X_enfermo_bias = np.c_[np.ones((4,1)), X_enfermo].
  4. Calcular la matriz de Gram: A_enfermo = X_enfermo_bias.T @ X_enfermo_bias.

El resultado es una matriz con cuatro columnas: unos, metros cuadrados, habitaciones y habitaciones duplicadas.

¿Qué resultado arrojan el determinante y el rango en la matriz enferma?

Al correr np.linalg.det(A_enfermo) y np.linalg.matrix_rank(A_enfermo) aparece el síntoma claro: determinante igual a cero y rango igual a tres [03:55]. La matriz tiene cuatro columnas, pero solo tres dimensiones reales de información porque una columna es un múltiplo exacto de otra.

¿Por qué el rango es 3 si la matriz tiene 4 columnas? Porque duplicar una columna no agrega una dirección nueva al espacio. La columna repetida es linealmente dependiente, así que el espacio se colapsa y una dimensión se anula.

¿Cómo interpretar el rango en un dataset real?

Imagina una matriz de datos X con forma (100, 5): 100 casas y 5 características. Si al calcular el rango obtienes 4, una de esas cinco características es redundante. Puede ser una copia, una combinación lineal de otras o una variable que repite información de otra columna.

  • Tienes 5 columnas pero solo 4 dimensiones útiles.
  • El determinante de la matriz A correspondiente será cero.
  • La ecuación normal por la vía de la inversa no funcionará sin tratar esa redundancia.

Este fenómeno tiene nombre formal: singularidad y multicolinealidad. Y aunque hoy lo provocamos a propósito duplicando una columna, en datasets del mundo real aparece de formas más sutiles: variables correlacionadas, codificaciones one hot mal construidas o features derivadas de otras.

¿Qué obtuviste tú al pensar en el caso de las 100 casas con 5 características y rango 4? Comparte tu interpretación en los comentarios y comparemos enfoques.