PCA e divisione treno / prova


35

Ho un set di dati per il quale ho più set di etichette binarie. Per ogni set di etichette, alleno un classificatore, valutandolo per convalida incrociata. Voglio ridurre la dimensionalità utilizzando l'analisi dei componenti principali (PCA). La mia domanda è:

È possibile eseguire il PCA una volta per l'intero set di dati e quindi utilizzare il nuovo set di dati di dimensionalità inferiore per la convalida incrociata come descritto sopra? O devo fare un PCA separato per ogni set di addestramento (il che significherebbe fare un PCA separato per ogni classificatore e per ogni piega di validazione incrociata)?

Da un lato, il PCA non fa alcun uso delle etichette. D'altra parte, utilizza i dati del test per eseguire la trasformazione, quindi temo che potrebbe influenzare i risultati.

Devo dire che oltre a salvarmi un po 'di lavoro, fare il PCA una volta sull'intero set di dati mi consentirebbe di visualizzare il set di dati per tutti i set di etichette contemporaneamente. Se ho un PCA diverso per ciascun set di etichette, dovrei visualizzare ciascun set di etichette separatamente.


Per riferimento futuro. Vedi questa domanda su come eseguire la convalida incrociata con PCA in R con caretpacchetto: PCA e k-fold Cross Validation in Caret .
ameba dice di reintegrare Monica il


Risposte:


34

Per misurare l'errore di generalizzazione, è necessario eseguire quest'ultimo: un PCA separato per ogni set di formazione (il che significherebbe fare un PCA separato per ogni classificatore e per ogni piega del CV).

Quindi applichi la stessa trasformazione al set di test: ovvero non esegui un PCA separato sul set di test! Sottrai la media (e se necessario dividi per la deviazione standard) del set di allenamento, come spiegato qui: Centrare a zero il set di test dopo PCA sul set di allenamento . Quindi si proiettano i dati sui PC del set di allenamento.


  • Dovrai definire un criterio automatico per il numero di PC da utilizzare.
    Dato che è solo un primo passo di riduzione dei dati prima della classificazione "effettiva", l'utilizzo di un numero eccessivo di PC probabilmente non comprometterà le prestazioni. Se hai un'aspettativa su quanti PC sarebbero buoni per esperienza, puoi semplicemente usarlo.

  • È inoltre possibile verificare in seguito se ripetere il PCA per ogni modello surrogato (ripetere l'analisi con un solo modello PCA). Penso che valga la pena riportare il risultato di questo test.

  • Una volta ho misurato la propensione a non ripetere il PCA e ho scoperto che, con i miei dati di classificazione spettroscopica, ho rilevato solo metà del tasso di errore di generalizzazione quando non ho ripetuto il PCA per ogni modello surrogato.

Detto questo, è possibile creare un modello PCA aggiuntivo dell'intero set di dati per scopi descrittivi (ad es. Visualizzazione). Assicurati solo di mantenere i due approcci separati l'uno dall'altro.


Sto ancora trovando difficile avere un'idea di come un PCA iniziale sull'intero set di dati distorcerebbe i risultati senza vedere le etichette delle classi.

Ma vede i dati. E se la varianza tra le classi è grande rispetto alla varianza all'interno delle classi, la varianza tra le classi influenzerà la proiezione PCA. Di solito il passaggio PCA viene eseguito perché è necessario stabilizzare la classificazione. Cioè, in una situazione in cui ulteriori casi fanno influenzare il modello.

Se la varianza tra le classi è piccola, questo pregiudizio non sarà molto, ma in quel caso neppure la PCA potrebbe essere d'aiuto per la classificazione: la proiezione della PCA non può fare a meno di enfatizzare la separazione tra le classi.


Grazie, questo è esattamente quello che pensavo, quindi è bello ascoltarlo da una fonte indipendente. Sto ancora trovando difficile avere un'idea di come un PCA iniziale sull'intero set di dati influenzerebbe i risultati senza vedere le etichette delle classi.
Bitwise,

@Bitwise: per favore, vedi la mia modifica
cbeleites supporta Monica il

Ciao @cbeleites, voglio trasformare questa discussione in una discussione "canonica" per le domande sulla PCA e sulla suddivisione treno / test (ce ne sono molte!) E contrassegnarle come duplicate. Mi sono preso la libertà di aggiungere una frase alla tua risposta che potrebbe chiarire un malinteso che sorge spesso nelle domande duplicate. Spero che tu sia soddisfatto della mia modifica, ma per favore controlla! +1, a proposito.
ameba dice Ripristina Monica il

@amoeba, grazie mille. Sì, questo è un punto importante che hai aggiunto. Mille grazie per il lavoro che hai dedicato alla pulizia della raccolta di domande.
cbeleites supporta Monica il

1
@FelipeAlmeida: si
cbeleites supporta Monica il

2

La risposta a questa domanda dipende dal tuo disegno sperimentale. La PCA può essere eseguita sull'intero set di dati purché non sia necessario creare il modello prima di conoscere i dati che si sta tentando di prevedere. Se disponi di un set di dati in cui hai un sacco di campioni, alcuni dei quali sono noti e altri sconosciuti e desideri prevederne gli incogniti, compresi gli incogniti nel PCA, avrai una visione più ricca della diversità dei dati e ti aiuteranno a migliorare le prestazioni del modello. Dato che il PCA non è supervisionato, non è un "picco" perché puoi fare la stessa cosa con i campioni sconosciuti come puoi con il noto.

Se, d'altra parte, hai un set di dati in cui devi costruire il modello ora e ad un certo punto in futuro otterrai nuovi campioni che devi prevedere usando quel modello predefinito, devi fare un PCA separato in ogni piega per essere sicuro che si generalizzerà. Dato che in questo caso non sapremo come potrebbero apparire le nuove funzionalità e non possiamo ricostruire il modello per tenere conto delle nuove funzionalità, fare PCA sui dati di test sarebbe "un picco". In questo caso, sia le caratteristiche che i risultati per i campioni sconosciuti non sono disponibili quando il modello verrebbe utilizzato in pratica, quindi non dovrebbero essere disponibili durante la formazione del modello.


0

Fai quest'ultimo, PCA sull'allenamento impostato ogni volta

In PCA apprendiamo la matrice ridotta: U che ci aiuta a ottenere la proiezioneZ_train = U x X_train

Al momento del test, utilizziamo la stessa U appresa dalla fase di addestramento e quindi calcoliamo la proiezioneZ_test = U x X_test

Quindi, essenzialmente stiamo proiettando il set di test sullo spazio ridotto delle funzioni ottenuto durante l'allenamento.

L'ipotesi di base è che il set di test e di treno dovrebbe provenire dalla stessa distribuzione, il che spiega il metodo sopra.

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.