2009-02-10 17 views
33

¿Cómo realmente reduce el ruido? ¿Puede sugerir algunos buenos tutoriales?¿Qué es SVD (descomposición del valor singular)

+0

Pregunta bastante fuera de tema, si quieres una teoría, entonces ve a Wikipedia: tienen una descripción básica y referencias. Si desea ayuda sobre un tema de programación particular, repita la pregunta (es decir, cómo usar Lapack para obtener la SVD de la matriz hermitiana, etc.). – Anonymous

+19

Por favor, no cierre. Esto está mucho más relacionado con la programación que algunas de las cuestiones delicadas que han estado en este sitio. –

+0

Después de pensar un poco tengo que estar de acuerdo, y eliminar el -1 :) – Anonymous

Respuesta

18

Una forma de usar SVD para reducir el ruido es hacer la descomposición, configurar los componentes que están cerca de cero para que sean exactamente cero, y luego volver a componer.

Aquí hay un online tutorial en SVD.

Es posible que desee echar un vistazo a Numerical Recipes.

+2

, este es también el básico para LSA/LSI (indexación semántica latente). La teoría es que los vectores de "valor pequeño" son realmente solo perturbaciones "ruidosas" del vector. –

48

SVD puede entenderse desde un sentido geométrico para matrices cuadradas como una transformación en un vector.

Considérese un cuadrado n x n de la matriz M multiplicar un vector v para producir un vector de salida w:

w = M*v 

La descomposición en valores singulares M es el producto de tres matrices M=U*S*V, así w=U*S*V*v. U y V son matrices ortonormales. Desde un punto de vista de transformación geométrica (que actúa sobre un vector multiplicándolo), son combinaciones de rotaciones y reflejos que no cambian la longitud del vector que están multiplicando. S es una matriz diagonal que representa escalado o aplastamiento con diferentes factores de escala (los términos diagonales) a lo largo de cada uno de los n ejes.

Entonces el efecto de multiplicar por la izquierda un vector v por una matriz M es rotar/reflejar v por el factor ortonormal V de M, luego escalar/aplastar el resultado por un factor diagonal S, luego rotar/reflejar el resultado por M ortonormal factor U.

Una razón por la que SVD es deseable desde un punto de vista numérico es que la multiplicación por matrices ortonormales es una operación invertible y extremely stable (el número de condición es 1). SVD captura cualquier mal condicionamiento en la matriz de escalado diagonal S.

+0

alguien acaba de -1: ¿le importa explicar por qué? –

6

Respondiendo a la pregunta en cuestión: SVD es una generalización de autovalores/eigenvectores a matrices no cuadradas. Diga, $ X \ in N \ veces p $, entonces la descomposición SVD de X produce X = UDV^T donde D es diagonal y U y V son matrices ortogonales. Ahora X^TX es una matriz cuadrada, y la descomposición SVD de X^TX = VD^2V donde V es equivalente a los vectores propios de X^TX y D^2 contiene los valores propios de X^TX.

8

descomposición de valor singular es un método para la toma de una matriz de nxm M y "descomposición" en tres matrices de tal manera que M = U S V. S es un cuadrado diagonal (las únicas entradas distintas de cero están en la diagonal desde la parte superior de izquierda a derecha, la matriz que contiene los "valores singulares" de M. U y V son ortogonales, lo que conduce a la comprensión geométrica de la SVD, pero eso no es necesario para la reducción del ruido.

Con M = U S V, todavía tenemos la matriz M original con todo su ruido intacto. Sin embargo, si solo mantenemos los k valores individuales más grandes (lo cual es fácil, dado que muchos algoritmos SVD calculan una descomposición donde las entradas de S se ordenan en orden no ascendente), entonces tenemos una aproximación de la matriz original. Esto funciona porque suponemos que los valores pequeños son el ruido, y que los patrones más significativos en los datos se expresarán a través de los vectores asociados con valores singulares más grandes.

De hecho, la aproximación resultante es la aproximación rank-k más precisa de la matriz original (tiene el error de mínimos cuadrados).

4

SVD también se puede utilizar para facilitar enormemente global (es decira todas las observaciones simultáneamente) ajuste de un modelo arbitrario (expresado en una fórmula) a los datos (con respecto a dos variables y expresado en una matriz).
Por ejemplo, matriz de datos A = D * MT donde D representa los posibles estados de un sistema y M representa su wrt evolución alguna variable (por ejemplo, tiempo).
Por SVD, A (x, y) = U (x) * S * VT (y) y por lo tanto D * MT = U * S * VT
entonces D = U * S * VT * MT + donde el "+" indica un pseudoinverse.
Se puede tomar un modelo matemático para la evolución y ajustarlo a las columnas V, cada una de las cuales es una combinación lineal de los componentes del modelo (esto es fácil, ya que cada columna es una curva 1D). Esto obtiene los parámetros del modelo que generan M? (el? Indica que se basa en la adaptación).
M * M? + * V = V? que permite residuales R * S = V - V? a minimizar, por lo que se determina D y M.

Bastante bien, ¿eh?

Las columnas de U y V también puede ser inspeccionado para recoger información acerca de los datos; por ejemplo, cada punto de inflexión en las columnas de V típicamente indica un componente diferente del modelo.

Por último, y de hecho frente a su pregunta, es importación observar que aunque cada valor singular sucesiva (elemento de la matriz diagonal S) con sus vectores concomitantes U y V tiene de señal inferior al ruido , la separación de los componentes del modelo en estos vectores "menos importantes" es en realidad más pronunciada.En otras palabras, si los datos se describen mediante un conjunto de cambios de estado que siguen una suma de exponenciales o lo que sea, los pesos relativos de cada exponencial se acercan entre sí en los valores singulares más pequeños. En otras palabras, los últimos valores singulares tienen vectores que son menos liso (más ruidoso) pero en los que el cambio representado por cada componente es más distinto.

Cuestiones relacionadas