¿Es posible usar kernel PCA para la selección de funciones?

9

¿Es posible utilizar el análisis de componentes principales del núcleo (kPCA) para la indexación semántica latente (LSI) de la misma manera que se utiliza PCA?

Realizo LSI en R usando la prcompfunción PCA y extraigo las características con las cargas más altas de los primeros componentes. Por eso obtengo las características que describen mejor el componente.k

Intenté usar la kpcafunción (del kernlibpaquete) pero no puedo ver cómo acceder a los pesos de las características a un componente principal. ¿Es esto posible en general cuando se usan métodos de kernel?

usuario3683
fuente
¿Has probado la función princomp?
mariana más suave

Respuestas:

6

Creo que la respuesta a su pregunta es negativa: no es posible.

La PCA estándar se puede usar para la selección de características, porque cada componente principal es una combinación lineal de características originales, por lo que uno puede ver qué características originales contribuyen más a los componentes principales más prominentes, consulte, por ejemplo, aquí: Uso del análisis de componentes principales (PCA) para Selección de funciones .

Pero en el PCA del núcleo, cada componente principal es una combinación lineal de características en el espacio objetivo , y, por ejemplo, para el núcleo gaussiano (que a menudo se usa) el espacio objetivo es de dimensión infinita. Por lo tanto, el concepto de "cargas" realmente no tiene sentido para kPCA, y de hecho, los componentes principales del núcleo se calculan directamente, evitando el cálculo de los ejes principales (que para PCA estándar se dan en R prcomp$rotation), gracias a lo que se conoce como truco del grano . Ver, por ejemplo, aquí: ¿Kernel PCA con kernel lineal es equivalente a PCA estándar? para más detalles.

Entonces no, no es posible. Al menos no hay una manera fácil.

ameba
fuente
2
(+1) Creo que es más fácil de explicar con una analogía con los SVM, donde en el espacio lineal puedes calcular los pesos que cada variable contribuye al hiperplano de separación (una medida de importancia, utilizable para la selección de características al menos) mientras que en los espacios del núcleo es Demasiado complejo o totalmente imposible de hacer. La misma lógica aquí.
Firebug
2

El siguiente ejemplo (tomado del manual de referencia de kernlab) le muestra cómo acceder a los diversos componentes del kernel PCA:

data(iris)
test <- sample(1:50,20)
kpc <- kpca(~.,data=iris[-test,-5],kernel="rbfdot",kpar=list(sigma=0.2),features=2)

pcv(kpc)        # returns the principal component vectors
eig(kpc)        # returns the eigenvalues
rotated(kpc)    # returns the data projected in the (kernel) pca space
kernelf(kpc)    # returns the kernel used when kpca was performed

¿Responde esto a tu pregunta?

Lalas
fuente
intenté rotated (kpca) pensando que es lo mismo que prcomp $ rotacion; que es (tomado en forma de R help (prcomp)): "rotación: la matriz de cargas variables (es decir, una matriz cuyas columnas contienen los vectores propios)". Sin embargo no lo es. Sin embargo, la pregunta también es muy general porque no estoy seguro de si LSA / LSI es posible utilizando la reducción de dimensionalidad no lineal.
user3683
lo siento, pero podría estar perdiendo la pregunta; ¿Por qué cree que la reducción de dimensionalidad no lineal no es posible en LSA / LSI?
Lalas
1
porque no hay una combinación lineal de las dimensiones, sino una que depende de una función del núcleo. ¿Es posible en esta configuración determinar el peso que tiene una dimensión para un componente principal (no lineal)?
user3683
2
(-1) Este podría ser un fragmento de código útil, pero no creo que responda a la pregunta original en absoluto.
ameba