Come ottenere "autovalori" (percentuali di varianza spiegata) di vettori che non sono autovettori PCA?


10

Vorrei capire come posso ottenere la percentuale di varianza di un set di dati, non nello spazio di coordinate fornito da PCA, ma rispetto a un set leggermente diverso di vettori (ruotati).

inserisci qui la descrizione dell'immagine

set.seed(1234)
xx <- rnorm(1000)
yy <- xx * 0.5 + rnorm(1000, sd = 0.6)
vecs <- cbind(xx, yy)
plot(vecs, xlim = c(-4, 4), ylim = c(-4, 4))
vv <- eigen(cov(vecs))$vectors
ee <- eigen(cov(vecs))$values
a1 <- vv[, 1]
a2 <- vv[, 2]
theta = pi/10
rotmat <- matrix(c(cos(theta), sin(theta), -sin(theta), cos(theta)), 2, 2)
a1r <- a1 %*% rotmat
a2r <- a2 %*% rotmat
arrows(0, 0, a1[1], a1[2], lwd = 2, col = "red")
arrows(0, 0, a2[1], a2[2], lwd = 2, col = "red")
arrows(0, 0, a1r[1], a1r[2], lwd = 2, col = "green3")
arrows(0, 0, a2r[1], a2r[2], lwd = 2, col = "green3")
legend("topleft", legend = c("eigenvectors", "rotated"), fill = c("red", "green3"))

Quindi, in sostanza, so che la varianza del set di dati lungo ciascuno degli assi rossi, data da PCA, è rappresentata dagli autovalori. Ma come ho potuto ottenere le varianze equivalenti, totalizzando la stessa quantità, ma proiettando i due diversi assi in verde, che sono una rotazione di pi / 10 degli assi componenti principali. Ad esempio, dati due vettori di unità ortogonali dall'origine, come posso ottenere la varianza di un set di dati lungo ciascuno di questi assi arbitrari (ma ortogonali), in modo tale che tutta la varianza sia calcolata (ovvero "autovalori" somma allo stesso di quella di PCA).


Risposte:


7

Xnd{v1,...,vk}viVar(Xvi)

k=dk<d

R2S

R2=1Si=1kVar(Xvi)

Questo è solo il rapporto tra le varianze sommate delle proiezioni e le varianze sommate lungo le dimensioni originali.

R2ix(i)ViVp(i)=x(i)Vk<dx^(i)=p(i)VT

E=1nx(i)x^(i)2

La bontà di adattamento è definita allo stesso modo di altri modelli (ovvero meno una frazione della varianza inspiegabile). Dato l'errore quadratico medio del modello ( ) e la varianza totale della quantità modellata ( ), . Nel contesto della nostra ricostruzione dei dati, l'errore quadratico medio è (errore di ricostruzione). La varianza totale è (la somma delle varianze lungo ciascuna dimensione dei dati). Così:R2MSEVartotalR2=1MSE/VartotalES

R2=1ES

S è anche uguale alla distanza euclidea quadrata media da ciascun punto dati alla media di tutti i punti dati, quindi possiamo anche pensare a come a confrontare l'errore di ricostruzione con quello del "modello peggiore" che restituisce sempre il significa come la ricostruzione.R2

Le due espressioni per sono equivalenti. Come sopra, se ci sono tanti vettori quante dimensioni originali ( ) allora sarà uno. Ma, se , sarà generalmente inferiore rispetto a PCA. Un altro modo di pensare alla PCA è che minimizza l'errore di ricostruzione al quadrato.R2k=dR2k<dR2


+1, spiegazione molto chiara. Voglio solo menzionare, per completezza, che è ciò che hai scritto è solo se per " " intendiamo ricostruire tramite la stessa che è stata utilizzata per la proiezione. In generale, per un vettore di proiezione arbitrario , ci sarà una ricostruzione migliore, producendo più alto . Ho una risposta dove la spiego in dettaglio . Concordo però che per questa particolare domanda ciò che hai scritto è esattamente ciò di cui hai bisogno. R2try[ing] to reconstruct the data from the projectionsVvR2
amoeba,

Sì, questo è un buon punto e una bella spiegazione
user20160

E se non avessi una matrice di dati, ma solo una matrice di covarianza? La somma della diagonale della matrice di covarianza mi dà la varianza totale, e se dovessi applicare il PCA a quella matrice di covarianza, gli autovalori darebbero la varianza lungo ogni nuova direzione, in modo che la varianza spiegata sia l'autovalore / varianza totale. Ma quali sono i miei vettori non sono autovettori?
Confuso il

... Per quanto ne so, se iniziamo con una matrice di covarianza C , allora in questo caso bisogna prendere | Cv_i | / sum (diag ( C )) per ottenere la spiegazione della varianza%.
Confuso il
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.