PCA calcule les vecteurs propres de la matrice de covariance ("axes principaux") et les trie en fonction de leurs valeurs propres (quantité de variance expliquée). Les données centrées peuvent ensuite être projetées sur ces axes principaux pour produire des composantes principales ("scores"). Aux fins de la réduction de la dimensionnalité, il est possible de ne conserver qu'un sous-ensemble de composants principaux et d'éliminer le reste. (Voir ici pour l'introduction d' un profane à la PCA .)
Soit la matrice de données avec lignes (points de données) et colonnes (variables ou entités). Après avoir soustrait le vecteur moyen de chaque ligne, nous obtenons la centrée matrice de données . Soit la matrice de certains vecteurs propres que nous voulons utiliser; ce sont le plus souvent les vecteurs propres avec les plus grandes valeurs propres. Alors la matrice des projections PCA ("scores") sera simplement donnée par . n×pnpXrawn×pnpμXVp×kkkn×kZ=XV
Ceci est illustré sur la figure ci-dessous: la première sous-parcelle affiche des données centrées (les mêmes que celles que j'utilise dans mes animations dans le fil lié) et ses projections sur le premier axe principal. La deuxième sous-parcelle ne montre que les valeurs de cette projection; la dimensionnalité a été réduite de deux à un:
Afin de pouvoir reconstituer les deux variables d'origine à partir de cette composante principale, nous pouvons le relier à dimensions avec . En effet, les valeurs de chaque PC doivent être placées sur le même vecteur que celui utilisé pour la projection; compare les sous-parcelles 1 et 3. Le résultat est alors donné par . Je l'affiche sur la troisième intrigue secondaire ci-dessus. Pour obtenir la reconstruction finale , nous devons ajouter le vecteur moyen à celui-ci:pV⊤X^=ZV⊤=XVV⊤X^rawμ
PCA reconstruction=PC scores⋅Eigenvectors⊤+Mean
Notez que l'on peut aller directement de la première sous-parcelle à la troisième en multipliant avec la matrice ; cela s'appelle une matrice de projection . Si tous les vecteurs propres sont utilisés, alors est la matrice identité (aucune réduction de dimensionnalité n’est effectuée, la "reconstruction" est donc parfaite). Si seul un sous-ensemble de vecteurs propres est utilisé, ce n'est pas une identité.XVV⊤pVV⊤
Cela fonctionne pour un point arbitraire dans l’espace PC; il peut être mappé sur l'espace d'origine via .zx^=zV⊤
Jeter (enlever) les principaux ordinateurs
Parfois, on veut jeter (enlever) un ou plusieurs des principaux ordinateurs et garder le reste, au lieu de garder les principaux et laisser de côté (comme ci-dessus). Dans ce cas, toutes les formules restent exactement les mêmes , mais devrait contenir tous les axes principaux à l' exception de ceux que l'on souhaite ignorer. En d'autres termes, devrait toujours inclure tous les PC que l'on veut garder.VV
Mise en garde à propos de la PCA sur la corrélation
Lorsque l'ACP est effectuée sur la matrice de corrélation (et non sur la matrice de covariance), les données brutes sont non seulement centrées en soustrayant mais également mises à l'échelle en divisant chaque colonne par son écart type . Dans ce cas, pour reconstruire les données d'origine, il faut redimensionner les colonnes de avec et ensuite seulement rajouter le vecteur moyen .XrawμσiX^σiμ
Exemple de traitement d'image
Ce sujet est souvent abordé dans le contexte du traitement d'images. Considérez Lenna - l’une des images standard dans la littérature sur le traitement des images (suivez les liens pour trouver sa provenance). Ci-dessous, à gauche, la variante en niveaux de gris de cette image (fichier disponible ici ).512×512
Nous pouvons traiter cette image en niveaux de gris comme une matrice de données . J'exécute la PCA et calcule utilisant les 50 premiers composants principaux. Le résultat est affiché à droite.512×512XrawX^raw
Revenir en SVD
La PCA est très étroitement liée à la décomposition en valeurs singulières (SVD), voir
Relation entre la SVD et la PCA. Comment utiliser SVD pour effectuer une PCA? pour plus de détails. Si une matrice est SVD-ed sous la forme , on sélectionne un vecteur de dimension qui représente le point dans l' espace "réduit". de dimensions, puis pour le mapper à dimensions, il faut le multiplier par .n×pXX=USV⊤kzUkpS⊤1:k,1:kV⊤:,1:k
Exemples dans R, Matlab, Python et Stata
Je vais effectuer une ACP sur les données de l’iris de Fisher , puis la reconstruire en utilisant les deux premières composantes principales. Je fais de la PCA sur la matrice de covariance, pas sur la matrice de corrélation, c’est-à-dire que je ne mets pas à l’échelle les variables ici. Mais je dois encore ajouter la moyenne en arrière. Certains paquets, comme Stata, s'en occupent grâce à la syntaxe standard. Merci à @StasK et @Kodiologist pour leur aide concernant le code.
Nous allons vérifier la reconstruction du premier point de donnée, qui est:
5.1 3.5 1.4 0.2
Matlab
load fisheriris
X = meas;
mu = mean(X);
[eigenvectors, scores] = pca(X);
nComp = 2;
Xhat = scores(:,1:nComp) * eigenvectors(:,1:nComp)';
Xhat = bsxfun(@plus, Xhat, mu);
Xhat(1,:)
Sortie:
5.083 3.5174 1.4032 0.21353
R
X = iris[,1:4]
mu = colMeans(X)
Xpca = prcomp(X)
nComp = 2
Xhat = Xpca$x[,1:nComp] %*% t(Xpca$rotation[,1:nComp])
Xhat = scale(Xhat, center = -mu, scale = FALSE)
Xhat[1,]
Sortie:
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.0830390 3.5174139 1.4032137 0.2135317
Voir aussi la réponse ci-dessous pour un exemple R reconstitué de reconstruction d'images en PCA .
Python
import numpy as np
import sklearn.datasets, sklearn.decomposition
X = sklearn.datasets.load_iris().data
mu = np.mean(X, axis=0)
pca = sklearn.decomposition.PCA()
pca.fit(X)
nComp = 2
Xhat = np.dot(pca.transform(X)[:,:nComp], pca.components_[:nComp,:])
Xhat += mu
print(Xhat[0,])
Sortie:
[ 5.08718247 3.51315614 1.4020428 0.21105556]
Notez que cela diffère légèrement des résultats dans d'autres langues. En effet, la version Python du jeu de données Iris contient des erreurs .
Stata
webuse iris, clear
pca sep* pet*, components(2) covariance
predict _seplen _sepwid _petlen _petwid, fit
list in 1
iris seplen sepwid petlen petwid _seplen _sepwid _petlen _petwid
setosa 5.1 3.5 1.4 0.2 5.083039 3.517414 1.403214 .2135317