Imagina que tenemos una situación un poco diferente a la habitual. Supón que registramos el comportamiento de compra de varias personas en un supermercado. Tenemos los precios de los productos, los gastos totales de cada cliente, y una matriz que muestra cuántas unidades de cada producto compró cada uno.
Cada persona compra distintas cantidades de unos pocos artículos —por ejemplo, tres productos diferentes—, y tenemos los datos de 100 clientes. Esto significa que nuestro número de filas (n = 100) es mucho mayor que el número de columnas (p = 3). En otras palabras, la matriz que representa esas compras ya no es cuadrada, sino rectangular.
¿Y cuál es el problema?
Que las matrices rectangulares no tienen inversa, por lo que no podemos usar el método de «retroceso» (backsolving) que aplicábamos antes para resolver el sistema. En vez de rendirnos, vamos a usar un truco matemático muy útil: el transpuesto de la matriz.
Qué significa transponer una matriz
Transponer una matriz significa reflejar sus elementos respecto de la diagonal principal (la línea que va del vértice superior izquierdo al inferior derecho).
Por ejemplo:
- Si tienes un vector fila, su transpuesto será un vector columna.
- Si tienes una matriz cuadrada, transponerla intercambia sus filas por columnas.
- Si tienes una matriz rectangular de 3×2, su transpuesta será de 2×3.
Una propiedad interesante es que el transpuesto del transpuesto te devuelve la matriz original.
Qué ocurre al multiplicar una matriz por su transpuesta
Supón que tienes una matriz \( M \) de tamaño \( n \times p \) (por ejemplo, 100 × 3). Si calculas el producto de su transpuesta por ella misma, es decir \( M^T \times M\), el resultado sí es una matriz cuadrada de tamaño \( p \times p \) (en este ejemplo, 3 × 3).
Eso significa que podemos intentar invertirla.
En resumen:
- Si \( M \) es \(n \times p \),
- entonces \( M^T \) es \(p \times n\),
- y \( M^T M\) es \( p \times p \), una matriz cuadrada.
Esto nos abre una puerta para resolver el sistema que antes parecía imposible.
Aplicando el truco: resolver el sistema con el transpuesto
En lugar de intentar resolver directamente \( Mx = y \) (lo cual no podemos hacer porque \(M\) no tiene inversa), multiplicamos ambos lados por \( M^T \):
$$M^T Mx = M^T y$$
Ahora, el sistema tiene una matriz cuadrada \(M^T M \).
Si esta matriz tiene inversa, podemos calcular:
$$x = (M^T M)^{-1} M^T y$$
Y así obtenemos una solución para x.
Cuándo existe esa inversa
La clave está en la independencia lineal de las columnas de \(M\). Si las columnas son linealmente independientes (es decir, ninguna es combinación de las otras), entonces \( M^T M \) tendrá una inversa.
Si no lo son —por ejemplo, si una columna es el doble de otra—, entonces \( M^T M \) no será invertible y este método no funcionará.
Cómo hacerlo en Python
En NumPy puedes obtener el transpuesto de una matriz simplemente con .T.
Por ejemplo:
import numpy as np
M = np.array([[1, 2],
[3, 4],
[5, 6]])
M_trans = M.T
print(M_trans)El resultado será:
[[1 3 5]
[2 4 6]]Relación con la regresión lineal
Lo que acabamos de hacer manualmente es, en esencia, una regresión lineal por mínimos cuadrados. En lugar de usar fórmulas estadísticas, usamos álgebra matricial para encontrar los coeficientes (precios) que mejor explican los datos observados (costes totales).
En Python, este mismo procedimiento lo implementa la clase LinearRegression del paquete scikit-learn. Basta con:
from sklearn.linear_model import LinearRegression
modelo = LinearRegression(fit_intercept=False)
modelo.fit(M, y)
x_hat = modelo.coef_En resumen
Cuando la matriz no es cuadrada, no podemos invertirla directamente. Pero si multiplicamos por su transpuesta, obtenemos una matriz cuadrada que sí puede tener inversa.
Ese es el truco del transpuesto, y es la base de la regresión lineal y de muchos métodos de optimización en ciencia de datos.
Deja una respuesta