Comment obtenir des «valeurs propres» (pourcentages de variance expliquée) de vecteurs qui ne sont pas des vecteurs propres de l'ACP?

10

Je voudrais comprendre comment je peux obtenir le pourcentage de variance d'un ensemble de données, non pas dans l'espace de coordonnées fourni par PCA, mais contre un ensemble légèrement différent de vecteurs (tournés).

entrez la description de l'image ici

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

Donc, fondamentalement, je sais que la variance de l'ensemble de données le long de chacun des axes rouges, donnée par PCA, est représentée par les valeurs propres. Mais comment pourrais-je obtenir les variances équivalentes, totalisant le même montant, mais projeté les deux axes différents en vert, qui sont une rotation par pi / 10 des axes principaux des composants. IE étant donné deux vecteurs unitaires orthogonaux depuis l'origine, comment puis-je obtenir la variance d'un ensemble de données le long de chacun de ces axes arbitraires (mais orthogonaux), de telle sorte que toute la variance soit prise en compte (c'est-à-dire que les «valeurs propres» soient égales à celles de PCA).

Thomas Browne
la source

Réponses:

7

Si les vecteurs sont orthogonaux, vous pouvez simplement prendre la variance de la projection scalaire des données sur chaque vecteur. Supposons que nous ayons une matrice de données ( points x dimensions) et un ensemble de vecteurs de colonne orthonormés . Supposons que les données sont centrées. La variance des données selon la direction de chaque vecteur est donnée par .Xnd{v1,...,vk}viVar(Xvi)

S'il y a autant de vecteurs que de dimensions d'origine ( ), la somme des variances des projections sera égale à la somme des variances le long des dimensions d'origine. Mais, s'il y a moins de vecteurs que les dimensions d'origine ( ), la somme des variances sera généralement inférieure à celle de l'ACP. Une façon de penser à l'ACP est qu'elle maximise cette quantité même (sous réserve que les vecteurs soient orthogonaux).k=dk<d

Vous pouvez également vouloir calculer (la fraction de variance expliquée), qui est souvent utilisée pour mesurer dans quelle mesure un nombre donné de dimensions PCA représente les données. Soit la somme des variances le long de chaque dimension d'origine des données. Alors:R2S

R2=1Si=1kVar(Xvi)

Il s'agit simplement du rapport des variances sommées des projections et des variances sommées le long des dimensions d'origine.

Une autre façon de penser à est qu'il mesure la qualité de l'ajustement si nous essayons de reconstruire les données à partir des projections. Il prend alors la forme familière utilisée pour d'autres modèles (par exemple la régression). Supposons que le ème point de données soit un vecteur ligne . Stocker chacun des vecteurs de base le long des colonnes de la matrice . La projection du ème point de données sur tous les vecteurs de est donnée par . Lorsqu'il y a moins de vecteurs que les dimensions d'origine (R2ix(i)ViVp(i)=x(i)Vk<d), nous pouvons considérer cela comme une cartographie linéaire des données dans un espace à dimensionnalité réduite. On peut reconstituer approximativement le point de données à partir de la faible représentation dimensionnelle en arrière de mappage dans l'espace de données d' origine: . L'erreur de reconstruction quadratique moyenne est la distance euclidienne quadratique moyenne entre chaque point de données d'origine et sa reconstruction:x^(i)=p(i)VT

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

La qualité de l'ajustement est définie de la même manière que pour les autres modèles (c'est-à-dire comme un moins la fraction de variance inexpliquée). Étant donné l'erreur quadratique moyenne du modèle ( ) et la variance totale de la quantité modélisée ( ), . Dans le cadre de notre reconstruction de données, l'erreur quadratique moyenne est (l'erreur de reconstruction). La variance totale est (la somme des variances le long de chaque dimension des données). Alors:R2MSEVartotalR2=1MSE/VartotalES

R2=1ES

S est également égal à la distance euclidienne quadratique moyenne de chaque point de données à la moyenne de tous les points de données, nous pouvons donc également penser à comme comparant l'erreur de reconstruction à celle du `` pire modèle '' qui renvoie toujours la signifie que la reconstruction.R2

Les deux expressions pour sont équivalentes. Comme ci-dessus, s'il y a autant de vecteurs que de dimensions d'origine ( ) alors sera un. Mais, si , sera généralement inférieur à celui de PCA. Une autre façon de penser à l'ACP est qu'elle minimise l'erreur de reconstruction au carré.R2k=dR2k<dR2

user20160
la source
+1, explication très claire. Je veux seulement mentionner, pour être complet, que est ce que vous avez écrit, c'est seulement si " " nous comprenons la reconstruction via le même qui a été utilisé pour la projection. En général, pour un vecteur de projection arbitraire , il y aura une meilleure reconstruction, donnant un plus élevé . J'ai une réponse où je l'explique en détail . Je conviens cependant que pour cette question particulière, ce que vous avez écrit est exactement ce dont vous avez besoin. R2try[ing] to reconstruct the data from the projectionsVvR2
amoeba
Oui, c'est un bon point et une belle explication
user20160
Et si je n'ai pas de matrice de données, mais juste une matrice de covariance? La somme de la diagonale de la matrice de covariance me donne la variance totale, et si je devais appliquer l'ACP à cette matrice de covariance, les valeurs propres donneraient la variance le long de chaque nouvelle direction, de sorte que la variance expliquée soit la valeur propre / variance totale. Mais quels sont mes vecteurs ne sont pas des vecteurs propres?
Confondu le
... Pour autant que je sache, si nous commençons avec une matrice de covariance C , alors dans ce cas il faut prendre | Cv_i | / sum (diag ( C )) pour obtenir le pourcentage de variance expliqué.
Confondu le