En matemáticas aplicadas , k -SVD es un algoritmo de aprendizaje de diccionario para crear un diccionario para representaciones dispersas , a través de un enfoque de descomposición en valores singulares . k -SVD es una generalización del método de agrupamiento k -means , y funciona alternando iterativamente entre la codificación dispersa de los datos de entrada según el diccionario actual y la actualización de los átomos en el diccionario para que se ajusten mejor a los datos. Está estructuralmente relacionado con el algoritmo de expectativa-maximización (EM) . [1] [2] k -SVD se puede encontrar ampliamente en uso en aplicaciones como procesamiento de imágenes, procesamiento de audio, biología y análisis de documentos.
La k -SVD es un tipo de generalización de k -medias, como se indica a continuación. La agrupación de k -medias también se puede considerar como un método de representación dispersa . Es decir, encontrar el mejor libro de códigos posible para representar las muestras de datos por vecino más cercano , resolviendo
lo cual es casi equivalente a
que es k-means que permite "pesos".
La letra F denota la norma de Frobenius . El término de representación dispersa obliga al algoritmo k -means a utilizar solo un átomo (columna) en el diccionario . Para relajar esta restricción, el objetivo del algoritmo k -SVD es representar la señal como una combinación lineal de átomos en .
El algoritmo k -SVD sigue el flujo de construcción del algoritmo k -means. Sin embargo, a diferencia de k -means, para lograr una combinación lineal de átomos en , el término de escasez de la restricción se relaja de modo que el número de entradas distintas de cero de cada columna puede ser mayor que 1, pero menor que un número .
Entonces, la función objetivo se convierte en
o en otra forma objetiva
En el algoritmo k -SVD, primero se fija y se encuentra la mejor matriz de coeficientes . Como encontrar la matriz verdaderamente óptima es difícil, utilizamos un método de búsqueda de aproximación. Cualquier algoritmo como OMP, la búsqueda de coincidencia ortogonal , se puede utilizar para el cálculo de los coeficientes, siempre que pueda proporcionar una solución con un número fijo y predeterminado de entradas distintas de cero .
Después de la tarea de codificación dispersa, el siguiente paso es buscar un diccionario mejor . Sin embargo, encontrar todo el diccionario a la vez es imposible, por lo que el proceso consiste en actualizar solo una columna del diccionario cada vez, mientras se repara . La actualización de la columna -ésima se realiza reescribiendo el término de penalización como
donde denota la k -ésima fila de X.
Al descomponer la multiplicación en la suma de matrices de rango 1, podemos suponer que los demás términos se consideran fijos y que el -ésimo permanece desconocido. Después de este paso, podemos resolver el problema de minimización aproximando el término con una matriz mediante descomposición en valores singulares y luego actualizando con ella. Sin embargo, no se garantiza que la nueva solución para el vector sea dispersa.
Para solucionar este problema, defina como
que apunta a ejemplos que usan atom (también las entradas de que no es cero). Luego, defina como una matriz de tamaño , con unos en las entradas y ceros en el resto. Al multiplicar , esto encoge el vector de fila descartando las entradas cero. De manera similar, la multiplicación es el subconjunto de los ejemplos que están en uso actualmente usando el átomo. El mismo efecto se puede ver en .
Por lo tanto, el problema de minimización mencionado anteriormente se convierte en
y se puede hacer directamente usando SVD. SVD se descompone en . La solución para es la primera columna de U, el vector de coeficientes como la primera columna de . Después de actualizar todo el diccionario, el proceso pasa a resolver iterativamente X, luego a resolver iterativamente D.
La elección de un "diccionario" apropiado para un conjunto de datos es un problema no convexo, y el k -SVD funciona mediante una actualización iterativa que no garantiza encontrar el óptimo global. [2] Sin embargo, esto es común a otros algoritmos para este propósito, y el k -SVD funciona bastante bien en la práctica. [2] [ se necesita una mejor fuente ]
{{citation}}
: CS1 maint: multiple names: authors list (link)