La pseudoinversa de Moore Penrose es una aplicación directa de *singular value decomposition (*SVD), que nos permite resolver en determinados momentos sistemas de ecuaciones lineales con múltiples soluciones.
La matriz pseudoinversa es utilizada cuando en un sistema de ecuaciones lineales, representado por Ax = B, x no tiene inversa. Esta operación es única y existe si se verifican 4 condiciones.
Ejemplo de pseudoinversa de una matriz
En el siguiente ejemplo, verás las 4 condiciones para obtener una fórmula Penrose.
Cómo calcular la matriz pseudoinversa de Moore Penrose
Para calcularla se siguen los siguientes pasos:
Calcular las matrices U, D, y V (matrices SVD) de A.
Construir D_pse: una matriz de ceros que tiene igual dimension de A, y que luego se transpone.
Reemplazar la submatriz D_pse[: D.shape[0], : D.shape[0]] por np.linalg.inv(np.diag(D))
Cómo calcular la pseudoinversa de Moore Penrose en Python
Para calcularla automáticamente por Python: np.linalg.pinv(A)Lo que obtenemos con A_pse es una matriz muy cercana a la inversa. Cercano en el sentido de que minimiza la norma dos de estas distancias. O sea, de estos errores que estamos cometiendo.
A_pse no es conmutativa, es decir, A_pse·A ≠ A·A_pse
Aporte de María José Medina.
Cálculo de la seudo inversa de Moore-Penrose en Python
Para calcularla automaticamente por Python: np.linalg.pinv(A)
Lo que obtenemos con A_pse es una matriz muy cercana a la inversa. Cercano en el sentido de que minimiza la norma dos de estas distancias. O sea, de estos errores que estamos cometiendo.
A_pse no es conmutativa, es decir, A_pse·A ≠ A·A_pse
MIL GRACIAS POR ESTE RESUMEN !!!!
El mejor curso por lejos!!!
La forma en que python obtiene la pseudo inversa es con el método SVD.
SVD es mas certera, y computacionalmente más efectiva.
Gracias por tus apuntes
Por si quieren conocer las condiciones para que exista la pseudo inversa de M-P:
La pseudo inversa de Moore Penrose es una aplicación directa de SVD, que nos permite resolver en determinados momentos sistemas de ecuaciones lineales con múltiples soluciones.
me duele la cabeza :v
La pseudoinversa de Moore-Penrose es una generalización de la inversa de una matriz para matrices que no son cuadradas o no tienen una inversa tradicional. Se utiliza para encontrar una solución aproximada de mínimos cuadrados a sistemas lineales inconsistentes o sobredeterminados.
La pseudoinversa de Moore-Penrose se denota como A⁺ y tiene las siguientes propiedades:
Si A es una matriz cuadrada invertible, entonces su pseudoinversa A⁺ es igual a su inversa A⁻¹.
Si A es una matriz rectangular m x n, entonces A⁺ es única y cumple las siguientes ```
Existen diferentes métodos para calcular la pseudoinversa de Moore-Penrose, y uno de los más comunes es la descomposición en valores singulares (SVD). Si A tiene la descomposición SVD como A = UΣVᵀ, entonces la pseudoinversa de Moore-Penrose se calcula como:
A⁺ =VΣ⁺Uᵀ
Donde Σ⁺ es la pseudoinversa de Σ, que se obtiene tomando el inverso de cada valor singular distinto de cero en Σ y luego transponiendo la matriz resultante.
Un poco densa, la clase pasa con bastante agua. jaja
Y en qué momento al remplazar el sistema de ecuaciones por
y = 1x + 4, y = 2x + 5, y = -3 + 6 da el vector solución si al reemplazar no concuerda con las posibles respuestas de examen
Hola, @perezgarridogilb. :D
¿Podrías decirme en qué pregunta del examen no te da la solución que dices? Me gustaría ayudarte.
Porque al definir en el pizarrón a A_pse, lo define con el producto de V normal con D_pse y U.T pero cuando lo calcula en python lo calcula con la transpuesta, es decir el producto V.T y lo demás igual.
Lo que pasa es que matemáticamente SVD es A = U D V^T, y numpy lo que regresa es U, D, L = np.linalg.svd(A) donde L = V^T, así V = L^T.
Para aclararlo mejor, hagamos un cambio de variable
U, D, L = np.linalg.inv(A)V = L.T
A_pse = V.dot(np.diag(D)).dot(U.T)
Eso es equivalente a tener
U, D, V = np.linalg.inv(A)A_pse = V.T.dot(np.diag(D)).dot(U.T)
Ahora si esta mas claro.
Imagina que Caperucita Roja quiere encontrar el mejor camino para llegar a casa de su abuela, pero algunos de los caminos están bloqueados y no puede seguir la ruta directa. La pseudoinversa de Moore-Penrose sería como un mapa que le muestra el mejor camino alternativo o la mejor aproximación para llegar a su destino, incluso si no puede tomar el camino directo. Aunque no es la ruta perfecta, le permite llegar de manera óptima, minimizando el tiempo o la distancia.
tengo una confusión (luego de haber pasado un rato buscando el teorema por internet)... por que python entrega un U de m,m?... no debería ser de m,n para que la propiedad de A = UDV.T ... sino no se podría multiplicar
Si te refieres a la documentación de svd: Que 'U' y 'V' sean matrices cuadradas va de acuerdo a la teoría, para que el producto punto tenga el shape de la matriz A, entonces la matriz diagonal D debe tener también el shape de A (se debe dar la forma con código extra); esto tiene interpretación geométrica haciendo que aplane el espacio o lo extienda. Puedes ver esta serie de Enlace, son de Visual Kernel, una buena extensión de las clases visuales de 3blue1brown
La seudoinversa de Moore-Penrose es una generalización de la inversa de una matriz que puede aplicarse incluso si la matriz no es cuadrada o no es invertible. En Python, puedes calcularla fácilmente con NumPy.
📌 ¿Qué es la seudo inversa?
Para una matriz A∈Rm×nA \in \mathbb{R}^{m \times n}, su seudoinversa A+A^+ satisface ciertas propiedades algebraicas. Se define mediante la descomposición en valores singulares (SVD):
A=UΣVT⇒A+=VΣ+UTA = U \Sigma V^T \quad \Rightarrow \quad A^+ = V \Sigma^+ U^T
Donde:
Σ+\Sigma^+ se obtiene invirtiendo los valores singulares distintos de cero y transponiendo la matriz.
💻 Cálculo con NumPy
✅ Usando np.linalg.pinv
import numpy as np
A = np.array([[1, 2], [3, 4], [5, 6]]) # Matriz no cuadrada
A_pseudo = np.linalg.pinv(A)
print("Matriz original A:")
print(A)
print("\nSeudo inversa de A (Moore-Penrose):")
print(A_pseudo)
🧠 ¿Qué hace NumPy internamente?
np.linalg.pinv utiliza la SVD para calcular la seudo inversa:
U, S, Vt = np.linalg.svd(A, full_matrices=False)
# Invertimos los valores singulares (evitando dividir por cero)
S_inv = np.diag(1 / S)
Esto da la solución de mínimos cuadrados: la mejor aproximación posible.
✅ Ventajas
Funciona con matrices rectangulares o singulares.
Muy útil en regresión lineal, ML, ajuste de curvas, y optimización.
Me gustaría saber por que se usa :D.shape[0],
para que sirve usar los :
¡Hola, Mauricio!
Dado que estamos trabajando con arreglos matriciales, estos tienen una dimensión. Para acceder a esa dimensión usamos .shape(), lo que nos devuelve una tupla con filas y columnas. Estp sería (filas, columnas).
Para el caso de la clase, queremos acceder a las filas de aquel arreglo matricial. Por eso usamos shape[0]. Los dos puntos : hacen referencia a todo un conjunto.
La verdad no entendí nada de esta clase. Alguien conoce algun recurso para entender este tema?
¡Hola! :D
¿En qué se te hizo complicado este tema?
Entendí qué es una pseudoinversa, pero no entiendo por qué se calcula asi, y unas cuantas clases anteriores a esta no he entendido el punto de ellas ni la explicacion que da el profesor.
La formula correcta para hallar la identidad es:
Apse*A aproximadamente igual a la identidad
ya que existe ese error en la formula que se da en el tablero de la clase
El recíproco de una matriz se refiere al inverso multiplicativo de la matriz. Si A es una matriz cuadrada, su recíproco A^-1 es otra matriz tal que AA^-1 = A^-1A = I, donde I es la matriz identidad.
La matriz de penrose existe y es unica
Si es que su rango es lo máximo posible para la forma de la matriz. O sea si A es 3x2, entonces si su rango fuese 2... tendría inversa; la identidad siempre tiene que ser la menor (I 2x2)
Si el resultado del reemplazo, no les sale igual que al profesor.