¿Cómo obtener "valores propios" (porcentajes de la varianza explicada) de vectores que no son vectores propios de PCA?

10

Me gustaría entender cómo puedo obtener el porcentaje de varianza de un conjunto de datos, no en el espacio de coordenadas proporcionado por PCA, sino en un conjunto ligeramente diferente de vectores (rotados).

ingrese la descripción de la imagen aquí

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"))

Básicamente, sé que la varianza del conjunto de datos a lo largo de cada uno de los ejes rojos, dada por PCA, está representada por los valores propios. Pero, ¿cómo podría obtener las variaciones equivalentes, totalizando la misma cantidad, pero proyectando los dos ejes diferentes en verde, que son una rotación por pi / 10 de los ejes componentes principales. IE da dos vectores de unidades ortogonales desde el origen, ¿cómo puedo obtener la varianza de un conjunto de datos a lo largo de cada uno de estos ejes arbitrarios (pero ortogonales), de modo que toda la varianza se contabilice (es decir, la suma de "valores propios" sea igual a la de PCA).

Thomas Browne
fuente
Muy relacionado: stats.stackexchange.com/questions/8630 .
ameba

Respuestas:

7

Si los vectores son ortogonales, puede simplemente tomar la varianza de la proyección escalar de los datos en cada vector. Digamos que tenemos una matriz de datos ( puntos x dimensiones) y un conjunto de vectores de columna ortonormales . Suponga que los datos están centrados. La varianza de los datos a lo largo de la dirección de cada vector viene dada por .Xnd{v1,...,vk}viVar(Xvi)

Si hay tantos vectores como dimensiones originales ( ), la suma de las variaciones de las proyecciones será igual a la suma de las variaciones a lo largo de las dimensiones originales. Pero, si hay menos vectores que las dimensiones originales ( ), la suma de las variaciones generalmente será menor que para PCA. Una forma de pensar en PCA es que maximiza esta misma cantidad (sujeto a la restricción de que los vectores son ortogonales).k=dk<d

También es posible que desee calcular (la fracción de varianza explicada), que a menudo se usa para medir qué tan bien un número determinado de dimensiones de PCA representa los datos. Supongamos que representa la suma de las variaciones a lo largo de cada dimensión original de los datos. Entonces:R2S

R2=1Si=1kVar(Xvi)

Esta es solo la proporción de las variaciones sumadas de las proyecciones y las variaciones sumadas a lo largo de las dimensiones originales.

Otra forma de pensar sobre es que mide la bondad del ajuste si intentamos reconstruir los datos a partir de las proyecciones. Luego toma la forma familiar utilizada para otros modelos (por ejemplo, regresión). Digamos que el punto de datos ésimo es un vector fila . Almacenar cada uno de los vectores de la base a lo largo de las columnas de la matriz . La proyección de la ésimo punto de datos en todos los vectores en está dada por . Cuando hay menos vectores que las dimensiones originales ( i x ( i ) V i V p ( i ) = x ( i ) V k < d x ( i ) = p ( i ) V TR2ix(i)ViVp(i)=x(i)Vk<d), podemos pensar en esto como mapear los datos linealmente en un espacio con dimensionalidad reducida. Aproximadamente podemos reconstruir el punto de datos de la representación bajo dimensional por la espalda de mapeo en el espacio de datos original: . El error de reconstrucción cuadrático medio es la distancia euclidiana cuadrática media entre cada punto de datos original y su reconstrucción:x^(i)=p(i)VT

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

La bondad de ajuste se define de la misma manera que para otros modelos (es decir, como uno menos la fracción de varianza inexplicada). Dado el error cuadrático medio del modelo ( ) y la varianza total de la cantidad modelada ( ), . En el contexto de nuestra reconstrucción de datos, el error cuadrático medio es (el error de reconstrucción). La varianza total es (la suma de las variaciones a lo largo de cada dimensión de los datos). Entonces: MSE Var total R 2 = 1 - MSE / Var total E SR2MSEVartotalR2=1MSE/VartotalES

R2=1ES

R 2S también es igual a la distancia euclidiana cuadrática media desde cada punto de datos a la media de todos los puntos de datos, por lo que también podemos pensar que compara el error de reconstrucción con el del 'peor modelo' que siempre devuelve el significa como la reconstrucción.R2

Las dos expresiones para son equivalentes. Como arriba, si hay tantos vectores como dimensiones originales ( ) entonces será uno. Pero, si , generalmente será menor que para PCA. Otra forma de pensar en PCA es que minimiza el error de reconstrucción al cuadrado. k = d R 2 k < d R 2R2k=dR2k<dR2

usuario20160
fuente
+1, explicación muy clara. Solo quiero mencionar, para completar, que es lo que usted escribió, solo si " " entendemos la reconstrucción a través de la misma que se utilizó para proyectar. En general, para un vector de proyección arbitrario , habrá una mejor reconstrucción, produciendo un mayor . Tengo una respuesta donde lo explico en detalle . Sin embargo, estoy de acuerdo en que para esta pregunta en particular lo que escribió es exactamente lo que se necesita. V v R 2R2try[ing] to reconstruct the data from the projectionsVvR2
ameba
Sí, ese es un buen punto y una buena explicación
user20160
¿Qué sucede si no tengo una matriz de datos, sino solo una matriz de covarianza? La suma de la diagonal de la matriz de covarianza me da la varianza total, y si aplicara PCA a esa matriz de covarianza, los valores propios darían la varianza a lo largo de cada nueva dirección, de modo que la varianza explicada es el valor propio / varianza total. Pero, ¿cuáles son mis vectores que no son vectores propios?
Confundido el
... Por lo que puedo decir, si comenzamos con una matriz de covarianza C , entonces en este caso hay que tomar | Cv_i | / sum (diag ( C )) para obtener el% de varianza explicada.
Confundido el