Comment puis-je interpréter ce que je retire de l'ACP?

14

Dans le cadre d'une mission universitaire, je dois effectuer un prétraitement des données sur un ensemble de données brutes assez vaste et multivarié (> 10). Je ne suis pas un statisticien dans aucun sens du mot, donc je suis un peu confus quant à ce qui se passe. Je m'excuse d'avance pour ce qui est probablement une question ridiculement simple - ma tête tourne après avoir regardé diverses réponses et essayé de parcourir les statistiques.

J'ai lu ça:

  • PCA me permet de réduire la dimensionnalité de mes données
  • Il le fait en fusionnant / supprimant des attributs / dimensions qui corrèlent beaucoup (et sont donc un peu inutiles)
  • Il le fait en trouvant des vecteurs propres sur les données de covariance (grâce à un joli tutoriel que j'ai suivi pour l'apprendre)

Qui est genial.

Cependant, j'ai vraiment du mal à voir comment je peux l'appliquer pratiquement à mes données. Par exemple (ce n'est pas l'ensemble de données que j'utiliserai, mais une tentative d'exemple décent avec lequel les gens peuvent travailler), si je devais avoir un ensemble de données avec quelque chose comme ...

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

Je ne sais pas trop comment j'interpréterais les résultats.

La plupart des didacticiels que j'ai vus en ligne semblent me donner une vision très mathématique de l'ACP. J'ai fait des recherches à ce sujet et je les ai suivies - mais je ne suis pas encore tout à fait sûr de ce que cela signifie pour moi, qui essaie simplement d'extraire une certaine forme de sens de cette pile de données que j'ai devant moi.

Simplement effectuer PCA sur mes données (en utilisant un package de statistiques) crache une matrice de nombres NxN (où N est le nombre de dimensions originales), ce qui est entièrement grec pour moi.

Comment puis-je faire de l'APC et prendre ce que j'obtiens d'une manière que je peux ensuite mettre en anglais simple en termes de dimensions d'origine?

nitsua
la source
3
Votre exemple de données montre un mélange de types de données: le sexe est dichotomique, l'âge est ordinale, les 3 autres sont intervalle (et ceux qui sont dans des unités différentes). Faire une PCA linéaire est bon pour les données d'intervalle (mais vous devez d'abord normaliser z ces variables, en raison des unités). On peut se demander si l'ACP est appropriée pour les données binaires ou dichotomiques . Vous ne devez pas utiliser de données ordinales dans PCA linéaire. Mais la principale question avec vos données d' exemple: pourquoi tout faire PCA avec elle; quel sens cela pourrait-il avoir dans ce cas?
ttnphns
Ce pdf est utile pour l' application de PCA . Les autres articles ici décrivent bien la "signification" de vos résultats PCA.
Ams
(Veuillez me corriger si je me trompe) Je pense que l'ACP est / peut être très utile pour aider à trouver des tendances dans les données et à déterminer quels attributs peuvent se rapporter à quels (ce qui, je suppose, à la fin conduirait à déterminer motifs similaires). Mon affectation précise que j'ai cet ensemble de données massif et que je n'ai qu'à appliquer le clustering et les classificateurs, et l'une des étapes qu'il considère comme vitales pour le prétraitement est PCA. Serait-il utile si j'essayais d'extraire des attributs de second ordre de l'ensemble de données que je dois essayer de les obtenir tous dans des données d'intervalle?
nitsua
3
Je ne peux que vous recommander, pour le moment, d'en savoir plus sur PCA (sur ce site aussi). De nombreuses incertitudes disparaîtront sûrement.
ttnphns
Beaucoup de liens fins ci-dessus, voici un court exemple qui "pourrait" vous donner une bonne idée de l'ACP en termes de régression, avec un exemple pratique et très peu, voire pas du tout, de termes techniques. sites.stat.psu.edu/~ajw13/stat505/fa06/16_princomp/...
Léviathan

Réponses:

15

Les pages 13 à 20 du didacticiel que vous avez publié fournissent une explication géométrique très intuitive de la façon dont PCA est utilisé pour la réduction de dimensionnalité.

La matrice 13x13 que vous mentionnez est probablement la matrice de «chargement» ou de «rotation» (je suppose que vos données d'origine comportaient 13 variables?) Qui peuvent être interprétées de deux manières (équivalentes):

  1. Les colonnes (valeurs absolues des) de votre matrice de chargement décrivent dans quelle mesure chaque variable «contribue» proportionnellement à chaque composant.

  2. La matrice de rotation fait pivoter vos données sur la base définie par votre matrice de rotation. Donc, si vous avez des données 2D et multipliez vos données par votre matrice de rotation, votre nouvel axe X sera le premier composant principal et le nouvel axe Y sera le deuxième composant principal.

EDIT: Cette question est souvent posée, donc je vais simplement présenter une explication visuelle détaillée de ce qui se passe lorsque nous utilisons l'ACP pour la réduction de la dimensionnalité.

Considérons un échantillon de 50 points générés à partir de y = x + bruit. Le premier composant principal se trouvera le long de la ligne y = x et le deuxième composant se trouvera le long de la ligne y = -x, comme indiqué ci-dessous.

entrez la description de l'image ici

Le rapport d'aspect gâche un peu, mais croyez-moi, les composants sont orthogonaux. L'application de PCA fera pivoter nos données afin que les composants deviennent les axes x et y:

entrez la description de l'image ici

Les données avant la transformation sont des cercles, les données après sont des croix. Dans cet exemple particulier, les données n'ont pas été tournées autant qu'elles ont été inversées sur la ligne y = -2x, mais nous aurions pu tout aussi facilement inverser l'axe y pour en faire une rotation sans perte de généralité comme décrit ici .

La majeure partie de la variance, c'est-à-dire les informations contenues dans les données, est répartie le long de la première composante principale (qui est représentée par l'axe des x après avoir transformé les données). Il y a une petite variation le long du deuxième composant (maintenant l'axe des y), mais nous pouvons supprimer ce composant entièrement sans perte significative d'informations . Donc, pour réduire cela de deux dimensions en 1, nous avons laissé la projection des données sur le premier composant principal décrire complètement nos données.

entrez la description de l'image ici

Nous pouvons récupérer partiellement nos données d'origine en les faisant pivoter (ok, en les projetant) sur les axes d'origine.

entrez la description de l'image ici

Les points bleu foncé sont les données "récupérées", tandis que les points vides sont les données d'origine. Comme vous pouvez le voir, nous avons perdu une partie des informations des données d'origine, en particulier la variance dans la direction de la deuxième composante principale. Mais à de nombreuses fins, cette description compressée (en utilisant la projection le long du premier composant principal) peut répondre à nos besoins.

Voici le code que j'ai utilisé pour générer cet exemple au cas où vous voudriez le répliquer vous-même. Si vous réduisez la variance de la composante de bruit sur la deuxième ligne, la quantité de données perdues par la transformation PCA diminuera également car les données convergeront vers la première composante 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)
David Marx
la source
5
David, s'il vous plaît, abstenez-vous d'utiliser les termes "matrice de rotation" (alias vecteurs propres) et "matrice de chargement" de manière interchangeable. Pour la pureté et pour ne pas induire les gens en erreur. Les charges dans PCA sont des vecteurs propres après normalisation par leurs valeurs propres. Je vous remercie.
ttnphns
3
@ttphns Je pense que cela dépend complètement du paquet que vous utilisez. Ces termes sont souvent totalement interchangeables. Considérez l'utilisation des "chargements" ici: utdallas.edu/~herve/abdi-awPCA2010.pdf . Référencez également la fonction R prcompoù la matrice de charges est juste la matrice dont les colonnes sont des vecteurs propres unitaires. Je pense que vous êtes inutilement technique et, dans la plupart des cas, je pense que ces termes sont utilisés de manière interchangeable.
David Marx
4
Désolé, mais je ne suis pas d'accord. Raison: rappelez-vous que les chargements sont à la fois significatifs (et dans le même sens!) Pour l'ACP et l'analyse factorielle. Les charges sont directement comparables aux corrélations / covariances. Les vecteurs propres sont les cosinus de rotation. En analyse factorielle, de nombreuses méthodes ne traitent pas de rotation ( en phase d'extraction). Ainsi, mélanger les deux termes est effectivement trompeur pour les étudiants et devrait être évité.
ttnphns
Petit point: l'orthographe correcte est toujours et seulement "principale", pas "principe". J'ai édité en conséquence, mais une image que je ne peux pas éditer.
Nick Cox
1
Peut être trouvé un autre visuel ici setosa.io/ev/principal-component-analysis
SIslam
2

Je dirais que votre question est une question qualifiée non seulement dans cross validatedmais aussi dans stack overflow, où l'on vous dira comment mettre en œuvre la réduction de dimension dans R (.. etc.) pour vous aider efficacement à identifier quelle colonne / variable contribue le mieux à la variance de l'ensemble de données.

La PCA (analyse en composantes principales) a les mêmes fonctionnalités que la SVD (décomposition en valeurs singulières), et elles sont en fait exactement le même processus après avoir appliqué scale/ la transformation z à l'ensemble de données.

Voici quelques ressources que vous pouvez parcourir en une demi-heure pour mieux comprendre.

Je ne suis pas capable de donner une solution de codage vivante pour vous aider à comprendre comment implémenter svd et ce que fait chaque composant, mais les gens sont géniaux, voici quelques articles très informatifs que j'ai utilisés pour rattraper le côté application de SVD même si je savoir comment calculer un problème SVD 3by3 .. :)

  1. Cours d'analyse de données Coursera par Jeff Leek: conférence vidéo / notes de cours
  2. Un article étudiant très informatif
  3. Un article de l'American Mathematical Society.
B.Mr.W.
la source
La classe de Jeff Leek est très bonne pour avoir une idée de ce que vous pouvez faire avec PCA. La bonne chose est qu'il n'entre pas dans les détails mathématiques / statistiques complexes (qui peuvent être trouvés dans de nombreux autres endroits) mais fournit plutôt une approche pratique montrant comment vraiment l'utiliser sur les données.
nico
1

Dans PCA, vous voulez décrire les données en moins de variables. Vous pouvez obtenir les mêmes informations dans moins de variables qu'avec toutes les variables. Par exemple, les heures étudiées et le score au test peuvent être corrélés et nous n'avons pas à inclure les deux.

Dans votre exemple, disons que votre objectif est de mesurer la «qualité» d'un étudiant / d'une personne. En regardant toutes ces variables, il peut être déroutant de voir comment procéder. L'ACP nous permet de voir clairement quels élèves sont bons / mauvais.

Si le premier composant principal explique la majeure partie de la variation des données, alors c'est tout ce dont nous avons besoin. Vous trouveriez la corrélation entre ce composant et toutes les variables. Les «grandes» corrélations signifient des variables importantes. Par exemple, la première composante pourrait être fortement corrélée avec les heures étudiées et le score au test. Des valeurs élevées du premier composant indiquent donc des valeurs élevées de temps d'étude et de score de test.

pcaguy
la source