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, S., Schölkopf, B., Smola, AJ, Müller, KR, Scholz, M., & Rätsch, G. (1998). Kernel PCA e De-Noising in Feature Spaces . In NIPS (Vol. 11, pagg. 536-542).
Mika et al. non eseguono la convalida incrociata, ma hanno bisogno di pre-immagini per scopi di riduzione del rumore, vedere questa figura:
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:
E qui ci sono alcuni risultati (che penso siano praticamente autoesplicativi):