¿Cómo puedo interpretar lo que obtengo de PCA?

14

Como parte de una tarea universitaria, tengo que llevar a cabo el preprocesamiento de datos en un conjunto de datos sin procesar bastante grande, multivariante (> 10). No soy un estadístico en ningún sentido de la palabra, así que estoy un poco confundido sobre lo que está sucediendo. Disculpas de antemano por lo que probablemente sea una pregunta ridículamente simple: mi cabeza da vueltas después de mirar varias respuestas y tratar de leer las estadísticas.

He leído eso:

  • PCA me permite reducir la dimensionalidad de mis datos
  • Lo hace fusionando / eliminando atributos / dimensiones que se correlacionan mucho (y por lo tanto son un poco innecesarias)
  • Lo hace al encontrar vectores propios en los datos de covarianza (gracias a un buen tutorial que seguí para aprender esto)

Lo cual es genial.

Sin embargo, me cuesta mucho ver cómo puedo aplicar esto prácticamente a mis datos. Por ejemplo (este no es el conjunto de datos que usaré, sino un intento de un ejemplo decente con el que la gente pueda trabajar), si tuviera un conjunto de datos con algo como ...

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
...          ...     ...          ...               ...                    ...            ...

No estoy muy seguro de cómo interpretaría los resultados.

La mayoría de los tutoriales que he visto en línea parecen darme una visión muy matemática de PCA. Investigué un poco y lo seguí, pero todavía no estoy completamente seguro de lo que esto significa para mí, que solo está tratando de extraer algún tipo de significado de este montón de datos que tengo frente a mí.

Simplemente realizar PCA en mis datos (usando un paquete de estadísticas) escupe una matriz de números NxN (donde N es el número de dimensiones originales), que es completamente griego para mí.

¿Cómo puedo hacer PCA y tomar lo que obtengo de una manera que luego pueda poner en inglés simple en términos de las dimensiones originales?

nitsua
fuente
3
Sus datos de ejemplo muestran una mezcla de tipos de datos: el sexo es dicotómico, la edad es ordinal, los otros 3 son intervalos (y los que están en diferentes unidades). Hacer PCA lineal es adecuado para datos de intervalo (pero primero debe estandarizar z esas variables, debido a las unidades). Es discutible si PCA es apropiado para datos binarios o dicotómicos . No debe usar datos ordinales en PCA lineal. Pero la cuestión principal, con sus datos de ejemplo: ¿por qué en absoluto que ver con ella PCA; ¿Qué sentido podría tener en este caso?
ttnphns
Este pdf es útil para la aplicación de PCA . Las otras publicaciones aquí hacen un buen trabajo al describir el "significado" de los resultados de su PCA.
enms.
(Corríjame si me equivoco) Creo que PCA es / puede ser muy útil para ayudar a encontrar tendencias en los datos y descubrir qué atributos pueden relacionarse con cada uno (lo que supongo que al final conduciría a descubrir patrones y similares). Mi tarea detalla que tengo este conjunto de datos masivo y solo tengo que aplicar agrupamiento y clasificadores, y uno de los pasos que enumera como vitales para el preprocesamiento es PCA. ¿Sería útil si intentara extraer algunos atributos de segundo orden del conjunto de datos que tengo que intentar y obtener todos en datos de intervalo?
nitsua
3
En este momento, solo puedo recomendarle que lea más sobre PCA (también en este sitio). Muchas incertidumbres seguramente desaparecerán.
ttnphns
Muchos enlaces finos anteriores, aquí hay un breve ejemplo que "podría" darle una buena idea acerca de la PCA en términos de regresión, con un ejemplo práctico y muy pocos, si acaso, términos técnicos. sites.stat.psu.edu/~ajw13/stat505/fa06/16_princomp/…
leviatán el

Respuestas:

15

Las páginas 13-20 del tutorial que publicó proporcionan una explicación geométrica muy intuitiva de cómo se utiliza PCA para la reducción de la dimensionalidad.

La matriz de 13x13 que menciona es probablemente la matriz de "carga" o "rotación" (supongo que sus datos originales tenían 13 variables?) Que se pueden interpretar en una de dos formas (equivalentes):

  1. Las (valores absolutos de) las columnas de su matriz de carga describen cuánto "contribuye" proporcionalmente cada variable a cada componente.

  2. La matriz de rotación gira sus datos sobre la base definida por su matriz de rotación. Entonces, si tiene datos en 2-D y multiplica sus datos por su matriz de rotación, su nuevo eje X será el primer componente principal y el nuevo eje Y será el segundo componente principal.

EDITAR: esta pregunta se hace mucho, así que voy a presentar una explicación visual detallada de lo que sucede cuando usamos PCA para reducir la dimensionalidad.

Considere una muestra de 50 puntos generados a partir de y = x + ruido. El primer componente principal se ubicará a lo largo de la línea y = x y el segundo componente se ubicará a lo largo de la línea y = -x, como se muestra a continuación.

ingrese la descripción de la imagen aquí

La relación de aspecto lo estropea un poco, pero confío en que los componentes son ortogonales. La aplicación de PCA rotará nuestros datos para que los componentes se conviertan en los ejes xey:

ingrese la descripción de la imagen aquí

Los datos antes de la transformación son círculos, los datos después son cruces. En este ejemplo en particular, los datos no se giraron tanto como se voltearon a través de la línea y = -2x, pero podríamos haber invertido con la misma facilidad el eje y para que esto sea realmente una rotación sin pérdida de generalidad como se describe aquí .

La mayor parte de la varianza, es decir, la información en los datos, se extiende a lo largo del primer componente principal (que está representado por el eje x después de que hemos transformado los datos). Hay una pequeña variación a lo largo del segundo componente (ahora el eje y), pero podemos eliminar este componente por completo sin una pérdida significativa de información . Entonces, para colapsar esto de dos dimensiones a 1, dejamos que la proyección de los datos en el primer componente principal describa completamente nuestros datos.

ingrese la descripción de la imagen aquí

Podemos recuperar parcialmente nuestros datos originales al rotarlos (ok, proyectarlos) nuevamente sobre los ejes originales.

ingrese la descripción de la imagen aquí

Los puntos azules oscuros son los datos "recuperados", mientras que los puntos vacíos son los datos originales. Como puede ver, hemos perdido parte de la información de los datos originales, específicamente la variación en la dirección del segundo componente principal. Pero para muchos propósitos, esta descripción comprimida (usando la proyección a lo largo del primer componente principal) puede satisfacer nuestras necesidades.

Aquí está el código que usé para generar este ejemplo en caso de que quiera replicarlo usted mismo. Si reduce la varianza del componente de ruido en la segunda línea, la cantidad de datos perdidos por la transformación de PCA también disminuirá porque los datos convergerán en el primer componente principal:

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)
David Marx
fuente
55
David, por favor, absténgase de usar los términos "matriz de rotación" (también conocidos como vectores propios) y "matriz de carga" indistintamente. Por pureza y no engañar a la gente. Las cargas en PCA son vectores propios después de la normalización por sus valores propios. Gracias.
ttnphns
3
@ttphns Creo que depende completamente de qué paquete uses. A menudo, estos términos son completamente intercambiables. Considere el uso de "cargas" aquí: utdallas.edu/~herve/abdi-awPCA2010.pdf . También haga referencia a la función R prcompdonde la matriz de cargas es solo la matriz cuyas columnas son vectores propios unitarios. Creo que está siendo innecesariamente técnico, y en la mayoría de los casos creo que estos términos se usan indistintamente.
David Marx
44
Lo siento, pero no estoy de acuerdo. Motivo: recuerde que las cargas son significativas (¡y en el mismo sentido!) Para PCA y análisis factorial. Las cargas son directamente comparables a las correlaciones / covarianzas. Los vectores propios son los cosenos de rotación. En el análisis factorial, muchos métodos no abordan la rotación ( en la fase de extracción). Por lo tanto, mezclar los dos términos es engañoso para los estudiantes y debe evitarse.
ttnphns
Punto más pequeño: la ortografía correcta es siempre y solo "principal", no "principio". He editado en consecuencia, pero una imagen no puedo editar.
Nick Cox
1
Otro visual se puede encontrar aquí setosa.io/ev/principal-component-analysis
SIslam
2

Yo diría que su pregunta es una pregunta calificada no solo en cross validatedsino también en stack overflow, donde se le indicará cómo implementar la reducción de dimensiones en R (... etc.) para ayudarlo a identificar efectivamente qué columna / variable contribuye mejor a la varianza de todo el conjunto de datos.

El PCA (Análisis de componentes principales) tiene la misma funcionalidad que SVD (Descomposición de valor singular), y en realidad son exactamente el mismo proceso después de aplicar scale/ la transformación z al conjunto de datos.

Aquí hay algunos recursos que puede recorrer en media hora para obtener una mejor comprensión.

No soy capaz de dar una solución de codificación vívida para ayudarlo a comprender cómo implementar svd y qué hace cada componente, pero la gente es increíble, aquí hay algunas publicaciones muy informativas que solía ponerme al día con el lado de la aplicación de SVD, incluso si saber cómo calcular a mano un problema 3by3 SVD .. :)

  1. Clase de análisis de datos de Coursera por Jeff Leek: video conferencia / notas de clase
  2. Una publicación estudiantil muy informativa
  3. Una publicación de la American Mathematical Society.
B.Mr.W.
fuente
La clase de Jeff Leek es muy buena para tener una idea de lo que puedes hacer con PCA. Lo bueno es que no entra en detalles matemáticos / estadísticos complejos (que se pueden encontrar en muchos otros lugares), sino que proporciona un enfoque práctico que muestra cómo usarlo realmente en los datos.
nico
1

En PCA desea describir los datos en menos variables. Puede obtener la misma información en menos variables que con todas las variables. Por ejemplo, las horas estudiadas y el puntaje de la prueba podrían estar correlacionados y no tenemos que incluir ambos.

En su ejemplo, supongamos que su objetivo es medir qué tan "bueno" es un estudiante / persona. Mirando todas estas variables, puede ser confuso ver cómo hacer esto. PCA nos permite ver claramente qué estudiantes son buenos / malos.

Si el primer componente principal explica la mayor parte de la variación de los datos, entonces esto es todo lo que necesitamos. Encontraría la correlación entre este componente y todas las variables. Las correlaciones "grandes" significan variables importantes. Por ejemplo, el primer componente podría estar fuertemente correlacionado con las horas estudiadas y el puntaje de la prueba. Entonces, los valores altos del primer componente indican valores altos de tiempo de estudio y puntaje de prueba.

pcaguy
fuente