1 votos

La mejor aproximación para calcular numéricamente el pseudoinverso de una matriz de covarianza

¿Cuáles son las razones para preferir la descomposición de valores propios a la descomposición de valores singulares para calcular numéricamente el pseudoinverso de una matriz real simétrica? En el caso de que se quiera formar el pseudoinverso de una matriz de covarianza y también se tenga acceso a la matriz de datos original, ¿tiene más sentido utilizar la SVD?

Utilizando SciPy como ejemplo, la documentación de scipy.linalg.pinvh afirma

Calcular el pseudoinverso (Moore-Penrose) de una matriz hermitiana.

Calcular la inversa generalizada de una matriz hermitiana o simétrica real utilizando su descomposición de valores propios e incluyendo todos los valores propios con valor absoluto "grande".

¿Por qué preferimos la descomposición de valores propios en este caso?

Supongamos que en lugar de calcular el pseudoinverso de una matriz arbitraria, se parte de una $m \times n$ matriz $X$ y queremos calcular el pseudoinverso de su matriz de covarianza $C = XX^*$ . Parece que hay dos enfoques obvios y estrechamente relacionados.

Desde $C$ es real y simétrica, puede ser diagonalizada ortogonalmente: $C = Q \Lambda Q^T$ , donde $Q$ contiene vectores propios, $\Lambda$ contiene valores propios, y $QQ^T = I$ . Podemos obtener el pseudoinverso de $C$ del pseudoinverso de $\Lambda$ como $C^+ = Q \Lambda^+ Q^T$ .

Como alternativa, se puede partir de la descomposición del valor singular de $X$ como $X = U \Sigma V^*$ . Entonces $C = U \Sigma \Sigma^* U^*$ y podemos obtener el pseudoinverso de nuevo a partir del pseudoinverso de $\Sigma \Sigma^*$ .

Pensé que el cálculo de los valores singulares era siempre un problema bien condicionado, y que esto significaría que la SVD sería un mejor enfoque para calcular el pseudoinverso de una matriz de covarianza. ¿Es eso cierto? ¿Qué otros problemas podría estar pasando por alto?

3voto

Giulio Muscarello Puntos 150

Yo no diría que "preferimos" los valores propios a los valores singulares en el caso simétrico/Hermitiano. Son efectivamente la misma cosa. O, más exactamente, los valores singulares no son más que los valores absolutos de los valores propios.

Para ver por qué, dejemos que $X$ sea cualquier matriz hermitiana. Su descomposición de Schur (valores propios) es $X=Q\Lambda Q^H$ donde $\Lambda$ es diagonal, y $Q^HQ=QQ^H=I$ . Su descomposición de valor singular, por otra parte, es $X=U\Sigma V^H$ , donde $\Sigma$ es diagonal y no negativo y $U^HU=UU^H=I$ y $V^HV=VV^H=I$ .

Alternativamente, podemos escribir estas descomposiciones en forma diádica: $$X=\sum_{i=1}^n \lambda_i q_i q_i^H = \sum_{i=1}^n \sigma_i u_i v_i^H$$ donde $q_i$ , $u_i$ y $v_i$ son los $i$ columnas de $Q$ , $U$ y $V$ respectivamente, y $\lambda_i$ y $\sigma_i$ son los $i$ elementos diagonales de $\Lambda$ y $\Sigma$ respectivamente.

En esta última forma, es sencillo ver que, dada la descomposición de Schur, $$\sigma_i = |\lambda_i|, \quad u_i = q_i, \quad v_i = \begin{cases} v_i & \lambda_i \geq 0 \\ -v_i & \lambda_i < 0 \end{cases} \qquad i=1,2,\dots, n$$ nos da una descomposición de valor singular válida. Nuestra elección de aplicar el cambio de signo a $v_i$ es arbitraria.

Tenga la seguridad de que, en la práctica, esto es precisamente lo que debe hacer para calcular la descomposición del valor singular de una matriz hermitiana. El problema de los valores propios simétricos está bien condicionado, y no hay ninguna ventaja numérica en aplicar la SVD no simétrica a una matriz hermitiana. De hecho, el cálculo de los valores singulares de una matriz no hermitiana $A$ se calculan a veces aplicando un algoritmo de valores propios simétricos a la matriz hermitiana $$\begin{bmatrix} 0 & A \\ A^T & 0 \end{bmatrix}$$ Te dejo como ejercicio que pruebes que esto funciona :-)

EDIT: El comentario de DGrady me ha alertado de que no he leído correctamente la segunda parte de la pregunta. En ella, estaba comparando las ventajas de calcular la SVD de $X$ frente a la descomposición de valores propios de $C=XX^H$ . En este caso, efectivamente va a ser un poco mejor calcular el SVD de $X$ directamente.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X