Come scegliere un kernel per il kernel PCA?


12

Quali sono i modi per scegliere quale kernel comporterebbe una buona separazione dei dati nell'output finale dei dati dal kernel PCA (analisi dei componenti principali) e quali sono i modi per ottimizzare i parametri del kernel?

I termini di Layman, se possibile, sarebbero molto apprezzati e anche i collegamenti a documenti che spiegano tali metodi sarebbero piacevoli.


1
Quando dici "buona separazione dei dati", a cosa ti riferisci esattamente? Quale applicazione del kernel PCA hai in mente? Se ha qualcosa a che fare con la "separazione dei dati", allora dovresti forse usare una tecnica di classificazione (come il kernel support vector machine) invece di kPCA? A parte tutto ciò, buona domanda, +1. Non ho esperienza con la scelta del kernel, quindi non posso aiutarti qui.
ameba dice di reintegrare Monica il

@amoeba Deve essere utilizzato per la riduzione dimensionale non lineare. Le mie conoscenze sui vettori di supporto sono un po 'limitate perché non ho mai seguito alcun corso CS; Sono un laureando e ho imparato attraverso documenti online. Per "buona separazione dei dati" intendo ciò che è mostrato dagli esempi tracciati in questo documento . Sto lavorando con Matlab e il mio codice PCA del kernel è attivo e funzionante per kernel semplici, poli, radiali e sigmoidi, ma sarebbe utile sapere quando usare quale per i migliori risultati.
Erba cipollina

Penso che il modo migliore (solo?) Per selezionare un kernel sia usare la validazione incrociata, vedi qui: Come selezionare il kernel per SVM? Per utilizzare la convalida incrociata devi solo avere una misura delle prestazioni per il tuo kPCA. Separazione classe può essere una misura decente se questo è ciò che siete dopo, ma nota che PCA / kPCA non è progettato affatto di provocare una separazione di classe buona; sta semplicemente massimizzando la varianza catturata.
ameba dice di reintegrare Monica il

Ho letto un po 'e potrei essere in grado di rispondere alla tua domanda dopo tutto. Ma potrebbe volerci del tempo (giorni).
ameba dice di reintegrare Monica il

@amoeba Massimizzare la varianza ha senso per me ora che me lo dici. Esaminerò io stesso la convalida incrociata, ma sarebbe bello se tu potessi approfondire un po 'anche se riesci a trovare il tempo! Grazie.
Erba cipollina

Risposte:


7

L'approccio generale per selezionare un kernel ottimale (sia il tipo di kernel, sia i parametri del kernel) in qualsiasi metodo basato sul kernel è la validazione incrociata. Vedi qui per la discussione sulla selezione del kernel per macchine vettoriali di supporto: Come selezionare il kernel per SVM?

L'idea alla base della convalida incrociata è che tralasciamo alcuni dati di "test", eseguiamo il nostro algoritmo per adattare il modello ai dati di "training" rimanenti, quindi controlliamo in che misura il modello risultante descrive i dati di test (e quanto è grande l'errore è). Questo si ripete per diversi dati di sinistra, si fa la media degli errori per formare un errore cross-validato medio e quindi si possono confrontare diversi algoritmi per scegliere quello che produce l'errore più basso. In SVM si può usare, ad esempio, l' accuratezza della classificazione (o misure correlate) come misura delle prestazioni del modello. Quindi si selezionerebbe un kernel che produce la migliore classificazione dei dati di test.

La domanda allora diventa: quale misura delle prestazioni del modello si può usare in kPCA? Se vuoi ottenere una "buona separazione dei dati" (presumibilmente una buona separazione delle classi), puoi in qualche modo misurarlo sui dati di addestramento e usarlo per trovare il kernel migliore. Si noti, tuttavia, che la PCA / kPCA non sono progettati per produrre una buona separazione dei dati (non accetta etichette di classe in considerazione a tutti ). Quindi, in generale, si vorrebbe un'altra misura, non correlata alla classe, delle prestazioni del modello.

Nella PCA standard è possibile utilizzare l' errore di ricostruzione come misura delle prestazioni sul set di test. Nel kernel PCA si può anche calcolare l'errore di ricostruzione, ma il problema è che non è comparabile tra kernel diversi: l'errore di ricostruzione è la distanza misurata nello spazio delle caratteristiche del bersaglio; e diversi kernel corrispondono a diversi spazi target ... Quindi abbiamo un problema.

Un modo per affrontare questo problema è in qualche modo calcolare l'errore di ricostruzione nello spazio originale, non nello spazio target. Ovviamente il punto di dati di test lasciato fuori vive nello spazio originale. Ma la sua ricostruzione kPCA vive nel [sottospazio a bassa dimensione dello] spazio target. Quello che si può fare, però, è trovare un punto ("pre-immagine") nello spazio originale che sarebbe mappato il più vicino possibile a questo punto di ricostruzione, e quindi misurare la distanza tra il punto di prova e questa pre-immagine come errore di ricostruzione.

Non fornirò qui tutte le formule, ma vi rimanderò ad alcuni documenti e inserirò qui solo alcune figure.

L'idea di "pre-immagine" in kPCA è stata apparentemente introdotta in questo documento:

Mika et al. non eseguono la convalida incrociata, ma hanno bisogno di pre-immagini per scopi di riduzione del rumore, vedere questa figura:

de-noising kPCA di Mika et al.

I punti denigrati (spessi) sono pre-immagini delle proiezioni kPCA (non ci sono test e formazione qui). Non è un compito banale trovare queste pre-immagini: è necessario usare la discesa gradiente e la funzione di perdita dipenderà dal kernel.

Ed ecco un documento molto recente che utilizzava pre-immagini per scopi di validazione incrociata e selezione del kernel / iperparametro:

Questo è il loro algoritmo:

Alam e Fukumizu

E qui ci sono alcuni risultati (che penso siano praticamente autoesplicativi):

Alam e Fukumizu


1
(+1) Può essere utile notare che questa pre-immagine è l'insieme dei mezzi di Fréchet / Karcher dei punti assegnati a un determinato cluster, non che ciò aiuti necessariamente con qualsiasi cosa.
Dougal,

@Dougal: wow, grazie, non ero a conoscenza di questo termine. Ma non sono sicuro di aver capito. Considera la prima figura che ho pubblicato qui (da Mika et al.): Ogni punto 2d è mappato allo spazio PC del kernel monodimensionale che viene quindi mappato di nuovo alla pre-immagine 2d . Quando dici che pre-immagine è il "set di Frechet / Karcher significa dei punti assegnati a un dato cluster", cosa intendi per cluster e perché esiste un set? x y y z zxxyyzz
ameba dice di reintegrare Monica il

Ripensandoci, immagino di non aver prestato sufficiente attenzione prima; il mio commento si applica al kernel k-mean, non a kPCA. Il preimage è sicuramente legato a quel concetto, ma non è la stessa cosa. Scusa per il rumore. :)
Dougal
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.