Pregunta:
¿Cuál es exactamente el procedimiento para calcular los componentes principales en el kernel PCA?
Chives
2015-01-04 10:27:26 UTC
view on stackexchange narkive permalink

En el PCA del kernel (análisis de componentes principales), primero elige un kernel deseado, úselo para encontrar su matriz $ K $, centre el espacio de características a través de la matriz $ K $, encuentre sus valores propios y vectores propios, luego multiplique el kernel centrado matriz por los autovectores deseados correspondientes a los autovalores más grandes.

El resultado debe ser la proyección de los datos del espacio de características en un subespacio de baja dimensión.

Hasta donde yo sé, usted divida los valores propios por el número $ n $ de puntos de datos originales para escalarlos. Entonces, la pregunta es, ¿los autovectores que elige para multiplicar la matriz del núcleo centrada también necesitan escalado y, de ser así, cómo lo hace?

One responder:
amoeba
2015-01-05 23:04:11 UTC
view on stackexchange narkive permalink

Para encontrar PC en PCA clásico, se puede realizar una descomposición de valores singulares de la matriz de datos centrada (con variables en columnas) $ \ mathbf X = \ mathbf U \ mathbf S \ mathbf V ^ \ top $ ; las columnas de $ \ mathbf U \ mathbf S $ se denominan componentes principales (es decir, proyecciones de los datos originales sobre los autovectores de la matriz de covarianza). Observe que la denominada matriz Gram $ \ mathbf G = \ mathbf X \ mathbf X ^ \ top = \ mathbf U \ mathbf S ^ 2 \ mathbf U ^ \ top $ span > tiene autovectores $ \ mathbf U $ y autovalores $ \ mathbf S ^ 2 $ , así que otra forma de calcular los componentes principales es escalar los vectores propios de la matriz de Gram por las raíces cuadradas de los valores propios respectivos.

En completa analogía, aquí hay un algoritmo completo para calcular los componentes principales del núcleo:

  1. Elija una función del kernel $ k (\ mathbf x, \ mathbf y) $ que conceptualmente es un producto escalar en el espacio de destino.

  2. Calcule una matriz Gram / kernel $ \ mathbf K $ con $ K_ {ij} = k (\ mathbf x _ {(i)}, \ mathbf x _ {(j)}) $ .

  3. Centro la matriz del núcleo mediante el siguiente truco: $$ \ mathbf K_ \ mathrm {centrado} = \ mathbf K - \ mathbf 1_n \ mathbf K - \ mathbf K \ mathbf 1_n + \ mathbf 1_n \ mathbf K \ mathbf 1_n = (\ mathbf I - \ mathbf 1_n) \ mathbf K (\ mathbf I - \ mathbf 1_n) , $$ donde $ \ mathbf 1_n $ es una matriz $ n \ times n $ con todos los elementos iguales a $ \ frac {1} {n} $ , y $ n $ es el número de puntos de datos.

  4. Busque vectores propios $ \ mathbf U $ y valores propios $ \ mathbf S ^ 2 $ de la matriz del núcleo centrada. Multiplique cada vector propio por la raíz cuadrada del valor propio respectivo.

  5. Hecho. Estos son los componentes principales del kernel.

Respondiendo específicamente a su pregunta, no veo ninguna necesidad de escalar ni los vectores propios ni los valores propios mediante $ n $ en los pasos 4 a 5.

Una buena referencia es el artículo original: Scholkopf B, Smola A y Müller KR, Análisis de componentes principales del núcleo, 1999. Tenga en cuenta que presenta el mismo algoritmo de una manera algo más complicada: se supone que debe encontrar los vectores propios de $ K $ y luego multiplicarlos por $ K $ (como escribió en su pregunta). Pero multiplicar una matriz y su vector propio da como resultado el mismo vector propio escalado por el valor propio (por definición).

Gracias por la respuesta.Me gustaría hacerte una pregunta.Leí el artículo "Análisis de componentes no lineales como valor propio del kernel Problema "de Scholkopf, Smola y Müller. En este artículo, en el apéndice B, los autores calculan los vectores propios $ \ tilde {\ alpha} ^ k $ y los valores propios $ \ tilde {\ lambda} ^ k $ de la matriz K centrada yluego normalizan los vectores propios $ \ tilde {\ alpha} ^ k $ para que tengan una longitud igual a $ \ frac {1} {\ sqrt {\ tilde {\ lambda} ^ k}} $. ¿El algoritmo se basa en un¿La descomposición propia de la matriz K centrada incluye este paso de normalización? Gracias de antemano.
@JohnM Consulte aquí http://stats.stackexchange.com/questions/126014 sobre la normalización.


Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...