È possibile utilizzare il kernel PCA per la selezione delle funzionalità?


9

È possibile utilizzare l'analisi dei componenti principali del kernel (kPCA) per Latent Semantic Indexing (LSI) nello stesso modo in cui viene utilizzata la PCA?

Eseguo LSI in R usando la prcompfunzione PCA ed estraggo le funzionalità con i caricamenti più alti dai primi componenti. Con ciò ottengo le caratteristiche che descrivono meglio il componente.K

Ho provato a utilizzare la kpcafunzione (dal kernlibpacchetto) ma non riesco a vedere come accedere ai pesi delle funzionalità a un componente principale. Questo è possibile in generale quando si usano i metodi del kernel?


Hai provato la funzione princomp?
Mariana Soffer,

Risposte:


6

Penso che la risposta alla tua domanda sia negativa: non è possibile.

La PCA standard può essere utilizzata per la selezione delle funzionalità, poiché ogni componente principale è una combinazione lineare di funzioni originali, pertanto è possibile vedere quali caratteristiche originali contribuiscono maggiormente ai componenti principali più importanti, vedere ad esempio qui: Utilizzo dell'analisi dei componenti principali (PCA) per selezione delle caratteristiche .

Ma nel kernel PCA ogni componente principale è una combinazione lineare di caratteristiche nello spazio target , e per esempio nel kernel gaussiano (che viene spesso usato) lo spazio target è di dimensione infinita. Quindi il concetto di "caricamenti" non ha davvero senso per kPCA, e in effetti i componenti principali del kernel sono calcolati direttamente, bypassando il calcolo degli assi principali (che per PCA standard sono dati in R da prcomp$rotation) del tutto, grazie a ciò che è noto come trucco del kernel . Vedi ad esempio qui: Kernel PCA con kernel lineare equivale a PCA standard? per ulteriori dettagli.

Quindi no, non è possibile. Almeno non esiste un modo semplice.


2
(+1) Penso che sia più facile da spiegare con un'analogia con le SVM, dove nello spazio lineare è possibile calcolare i pesi che ogni variabile contribuisce all'iperpiano di separazione (un po 'una misura di importanza, utilizzabile almeno per la selezione delle caratteristiche) mentre negli spazi del kernel è troppo complesso o assolutamente impossibile da fare. Stessa logica qui.
Firebug,

2

Il seguente esempio (tratto dal manuale di riferimento di kernlab) mostra come accedere ai vari componenti del PCA del kernel:

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

Questo risponde alla tua domanda?


ho provato a ruotare (kpca) pensando che sia lo stesso di prcomp $ rotation; che è (preso dalla forma R help (prcomp)): "rotazione: la matrice di caricamenti variabili (cioè una matrice le cui colonne contengono gli autovettori)." Tuttavia non lo è. La domanda è tuttavia anche molto generica perché non sono sicuro che LSA / LSI sia possibile utilizzando la riduzione della dimensionalità non lineare.
user3683

scusa, ma potrei mancare la domanda; Perché pensi che la riduzione della dimensionalità non lineare non sia possibile in LSA / LSI?
Lalas,

1
perché non esiste una combinazione lineare delle dimensioni ma una che dipende da una funzione del kernel. In questa impostazione è possibile determinare il peso di una dimensione per un componente principale (non lineare)?
user3683

2
(-1) Questo potrebbe essere un utile frammento di codice, ma non credo che risponda alla domanda originale.
ameba,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.