Come posso interpretare ciò che ottengo da PCA?


14

Come parte di un incarico universitario, devo condurre una pre-elaborazione dei dati su un set di dati non elaborati abbastanza grande (> 10). Non sono uno statistico in alcun senso della parola, quindi sono un po 'confuso su ciò che sta succedendo. Mi scuso in anticipo per quella che è probabilmente una domanda ridicolmente semplice: la mia testa gira dopo aver guardato varie risposte e aver tentato di guadare attraverso il discorso statistico.

Ho letto che:

  • PCA mi consente di ridurre la dimensionalità dei miei dati
  • Lo fa unendo / rimuovendo attributi / dimensioni che correlano molto (e quindi sono un po 'inutili)
  • Lo fa trovando autovettori su dati di covarianza (grazie a un bel tutorial che ho seguito per imparare questo)

Che è grandioso.

Tuttavia, faccio davvero fatica a vedere come posso applicarlo praticamente ai miei dati. Ad esempio (questo non è il set di dati che userò, ma un tentativo per un esempio decente con cui le persone possono lavorare), se dovessi avere un set di dati con qualcosa come ...

PersonID     Sex     Age Range    Hours Studied     Hours Spent on TV      Test Score     Coursework Score 
1            1       2            5                 7                      60             75
2            1       3            8                 2                      70             85 
3            2       2            6                 6                      50             77
...          ...     ...          ...               ...                    ...            ...

Non sono sicuro di come interpreterei i risultati.

La maggior parte dei tutorial che ho visto online sembrano darmi una visione molto matematica del PCA. Ho fatto qualche ricerca su di esso e li ho seguiti attraverso - ma non sono ancora del tutto sicuro di cosa significhi per me, che sta solo cercando di estrarre una qualche forma di significato da questo mucchio di dati che ho davanti a me.

Semplicemente eseguendo PCA sui miei dati (usando un pacchetto stats) sputa una matrice di numeri NxN (dove N è il numero di dimensioni originali), che per me è del tutto greco.

Come posso fare PCA e prendere ciò che ottengo in un modo che posso quindi mettere in un inglese semplice in termini di dimensioni originali?


3
I tuoi dati di esempio mostrano una combinazione di tipi di dati: il sesso è dicotomico, l'età è ordinale, gli altri 3 sono intervalli (e quelli che si trovano in unità diverse). Fare PCA lineare è giusto per i dati di intervallo (ma devi prima z-standardizzare quelle variabili, a causa delle unità). È discutibile se PCA sia appropriato per dati binari o dicotomici . Non utilizzare i dati ordinali nel PCA lineare. Ma la questione principale con i tuoi dati di esempio: il motivo per cui a tutti a che fare con esso PCA; che senso potrebbe avere in questo caso?
ttnphns,

Questo pdf è utile per l' applicazione di PCA . Gli altri post qui fanno un buon lavoro nel descrivere il "significato" dei risultati della tua PCA.
AMS

(Per favore, correggimi se sbaglio) Credo che il PCA sia / possa essere molto utile per aiutare a trovare le tendenze nei dati e per capire quali attributi possono essere correlati a quali (che immagino alla fine porterebbe a capire modelli e simili). I dettagli del mio incarico che ho questo enorme set di dati e devo solo applicare clustering e classificatori, e uno dei passaggi che elenca come vitale per la pre-elaborazione è PCA. Sarebbe di aiuto se provassi a estrarre alcuni attributi del secondo ordine dal set di dati che devo provare a ottenere tutti nei dati di intervallo?
nitsua,

3
Al momento, posso solo consigliarti di leggere di più su PCA (anche su questo sito). Molte incertezze andranno sicuramente via.
ttnphns,

Molti ottimi collegamenti sopra, ecco un breve esempio che "potrebbe" darti una buona idea di PCA in termini di regressione, con un esempio pratico e pochissimi, se non del tutto, termini tecnici. sites.stat.psu.edu/~ajw13/stat505/fa06/16_princomp/…
leviathan

Risposte:


15

Le pagine 13-20 del tutorial che hai pubblicato forniscono una spiegazione geometrica molto intuitiva di come viene utilizzato PCA per la riduzione della dimensionalità.

La matrice 13x13 che menzioni è probabilmente la matrice "caricamento" o "rotazione" (immagino che i tuoi dati originali avessero 13 variabili?) Che possono essere interpretati in uno dei due modi (equivalenti):

  1. Le colonne (valori assoluti delle) della tua matrice di caricamento descrivono quanto ciascuna variabile "contribuisce" proporzionalmente a ciascun componente.

  2. La matrice di rotazione ruota i dati sulla base definita dalla matrice di rotazione. Pertanto, se disponi di dati 2D e moltiplichi i dati per la matrice di rotazione, il tuo nuovo asse X sarà il primo componente principale e il nuovo asse Y sarà il secondo componente principale.

EDIT: Questa domanda viene posta molto, quindi ho intenzione di presentare una spiegazione visiva dettagliata di ciò che sta accadendo quando usiamo PCA per la riduzione della dimensionalità.

Considera un campione di 50 punti generati dal rumore y = x +. Il primo componente principale si troverà lungo la linea y = x e il secondo componente si troverà lungo la linea y = -x, come mostrato di seguito.

inserisci qui la descrizione dell'immagine

Le proporzioni lo incasinano un po ', ma credo che i componenti siano ortogonali. L'applicazione di PCA ruoterà i nostri dati in modo che i componenti diventino gli assi xey:

inserisci qui la descrizione dell'immagine

I dati prima della trasformazione sono cerchi, i dati dopo sono croci. In questo esempio particolare, i dati non sono stati ruotati tanto quanto è stato capovolto sulla linea y = -2x, ma avremmo potuto invertire altrettanto facilmente l'asse y per renderlo veramente una rotazione senza perdita di generalità come descritto qui .

La maggior parte della varianza, ovvero le informazioni nei dati, è diffusa lungo il primo componente principale (che è rappresentato dall'asse x dopo che abbiamo trasformato i dati). C'è una piccola varianza lungo il secondo componente (ora l'asse y), ma possiamo eliminare completamente questo componente senza una significativa perdita di informazioni . Quindi per comprimerlo da due dimensioni in 1, lasciamo che la proiezione dei dati sul primo componente principale descriva completamente i nostri dati.

inserisci qui la descrizione dell'immagine

Possiamo parzialmente recuperare i nostri dati originali ruotandoli (ok, proiettandoli) sugli assi originali.

inserisci qui la descrizione dell'immagine

I punti blu scuro sono i dati "recuperati", mentre i punti vuoti sono i dati originali. Come puoi vedere, abbiamo perso alcune delle informazioni dai dati originali, in particolare la varianza nella direzione del secondo componente principale. Ma per molti scopi, questa descrizione compressa (usando la proiezione lungo il primo componente principale) può soddisfare le nostre esigenze.

Ecco il codice che ho usato per generare questo esempio nel caso tu voglia replicarlo da solo. Se riduci la varianza del componente di rumore sulla seconda riga, anche la quantità di dati persi dalla trasformazione PCA diminuirà perché i dati convergeranno sul primo componente principale:

set.seed(123)
y2 = x + rnorm(n,0,.2)
mydata = cbind(x,y2)
m2 = colMeans(mydata)

p2 = prcomp(mydata, center=F, scale=F)
reduced2= cbind(p2$x[,1], rep(0, nrow(p2$x)))
recovered = reduced2 %*% p2$rotation

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Data with principal component vectors')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Data after PCA transformation')
points(p2$x, col='black', pch=3)
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')
arrows(x0=mean(p2$x[,1])
      ,y0=0
      ,x1=mean(p2$x[,1])
      ,y1=1
      ,col='blue'
       )
arrows(x0=mean(p2$x[,1])
       ,y0=0
       ,x1=-1.5
       ,y1=0
       ,col='red'
)
lines(x=c(-1,1), y=c(2,-2), lty=2)


plot(p2$x, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='PCA dimensionality reduction')
points(reduced2, pch=20, col="blue")
for(i in 1:n){
  lines(rbind(reduced2[i,], p2$x[i,]), col='blue')
}

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Lossy data recovery after PCA transformation')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')
for(i in 1:n){
  lines(rbind(recovered[i,], mydata[i,]), col='blue')
}
points(recovered, col='blue', pch=20)

5
David, per favore, astenersi dall'utilizzare i termini "matrice di rotazione" (aka autovettori) e "matrice di caricamento" in modo intercambiabile. Per purezza e non per ingannare le persone. I caricamenti in PCA sono autovettori dopo la normalizzazione in base ai loro autovalori. Grazie.
ttnphns,

3
@ttphns Penso che dipenda completamente dal pacchetto che usi. Spesso questi termini sono completamente intercambiabili. Considerare l'utilizzo dei " caricamenti " qui: utdallas.edu/~herve/abdi-awPCA2010.pdf . Fare riferimento anche alla funzione R in prcompcui la matrice dei carichi è solo la matrice le cui colonne sono autovettori di unità. Penso che tu sia inutilmente tecnico, e nella maggior parte dei casi credo che questi termini siano usati in modo intercambiabile.
David Marx,

4
Scusa, ma non sarei d'accordo. Motivo: ricordare che i caricamenti sono entrambi significativi (e nello stesso senso!) Per la PCA e l'analisi dei fattori. I caricamenti sono direttamente paragonabili alle correlazioni / covarianze. Gli autovettori sono i coseni di rotazione. Nell'analisi fattoriale, molti metodi non si occupano di rotazione ( in fase di estrazione). Quindi, mescolare i due termini è davvero fuorviante per gli studenti e dovrebbe essere evitato.
ttnphns,

Punto più piccolo: l'ortografia corretta è sempre e solo "principale", non "principio". Ho modificato di conseguenza, ma un'immagine che non posso modificare.
Nick Cox,

1
Un altro visual può essere trovato qui setosa.io/ev/principal-component-analysis
SIslam

2

Direi che la tua domanda è una domanda qualificata non solo in cross validatedma anche in stack overflow, in cui ti verrà detto come implementare la riduzione dimensionale in R (.. ecc.) Per aiutarti a identificare efficacemente quale colonna / variabile contribuisce meglio alla varianza di l'intero set di dati.

I PCA (Principal Component Analysis) hanno le stesse funzionalità di SVD (Singular Value Decomposition) e in realtà sono esattamente lo stesso processo dopo aver applicato scale/ la trasformazione z al set di dati.

Ecco alcune risorse che puoi passare in mezz'ora per capire meglio.

Non sono in grado di fornire una vivida soluzione di codifica per aiutarti a capire come implementare svd e cosa fa ogni componente, ma le persone sono fantastiche, qui ci sono alcuni post molto istruttivi che ho usato per incontrare il lato dell'applicazione di SVD anche se io saper calcolare manualmente un problema SVD 3by3 .. :)

  1. Coursera Data Analysis Class di Jeff Leek: lezione video / appunti della lezione
  2. Un post per studenti molto istruttivo
  3. Un post dell'American Mathematical Society.

La lezione di Jeff Leek è ottima per avere un'idea di cosa puoi fare con la PCA. La cosa buona è che non entra in dettagli matematici / statistici complessi (che possono essere trovati in molti altri luoghi) ma piuttosto fornisce un approccio pratico che mostra come usarlo realmente sui dati.
nico,

1

In PCA vuoi descrivere i dati in meno variabili. Puoi ottenere le stesse informazioni in meno variabili rispetto a tutte le variabili. Ad esempio, le ore studiate e il punteggio del test potrebbero essere correlati e non è necessario includerli entrambi.

Nel tuo esempio, supponiamo che il tuo obiettivo sia misurare quanto "buono" sia uno studente / persona. Guardando tutte queste variabili, può essere fonte di confusione vedere come farlo. PCA ci consente di vedere chiaramente quali studenti sono buoni / cattivi.

Se il primo componente principale spiega la maggior parte della variazione dei dati, questo è tutto ciò di cui abbiamo bisogno. Troveresti la correlazione tra questo componente e tutte le variabili. Correlazioni "grandi" indicano variabili importanti. Ad esempio, il primo componente potrebbe essere fortemente correlato con le ore studiate e il punteggio del test. Quindi valori elevati del primo componente indicano valori elevati di tempo di studio e punteggio del test.

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.