L’analyse en Composantes principales
Stéphane Canu
[Link]@[Link]
M8 - Principes du traitement de l’information
March 10, 2015
Plan
1 Nature des variables statistiques
2 Description mono variable
3 Description d’un couple de variables
4 Description d’un ensemble de variables
Tableaux de données
Résumé graphique des données
Résumé statistique des données : l’analyse en composantes principales
Stéphane Canu (INSA Rouen - ASI) ACP March 10, 2015 2 / 26
Analyse en composante principale (ACP)
X⇒ A.C.P. ⇒ (U, V , λ)
Les 3 étapes de l’ACP
1 centrer et réduire les données Xn = (X - un*mX)./(un*sX)
2 calculer les valeurs et vecteurs propres [V,λ] = eig(Xn’*Xn)
3 projeter les observations U = Xn*V
Xn =
-0.3393 -0.5775 0.9802 -0.4268 -0.0513 0.9483 0.4674
-1.5740 0.0188 -0.0172 0.8806 -0.7188 1.5195 -0.0684
0.5678 -1.0150 1.9092 1.0828 -1.3888 1.7471 -0.2692
-0.9404 0.5585 1.2807 -0.1368 -0.9082 1.4323 -0.0584
-0.5138
-0.9136
-1.2495
0.4148
-0.2863
-0.9377
1.3217
1.0695
1.6086
-0.8962
0.1055
0.1441
-1.0307
-0.7645
-1.7061
0.2355
0.8271
1.6852
-0.2256
0.7587
0.2501
La matrice des corrélations
-0.9139 0.2438 1.1964 -0.4372 -2.2392 1.0304 -0.1304
0.4414 -0.6329 1.1367 0.7691 -1.4089 1.4982 -0.2027
-0.9298 0.7957 1.0126 0.3820 -1.5871 0.5316 -0.1956
-0.6952 -0.4563 1.3876 0.3609 -1.2391 1.9481 -0.3715
-0.6289 0.6420 1.1921 -0.4564 -1.7554 0.4721 -0.2147
-0.6215
-1.6193
-0.3100
-0.0890
1.4032
1.1068
0.5022
0.9947
-0.9087
-1.2511
1.1956
2.1292
0.3328
-0.3633
Quand on considère
-0.6763
-0.7855
-0.1060
-0.2062
0.3007
1.6197
-0.7081
-0.1047
-1.2344
-2.1923
1.6665
1.0576
0.5152
-0.2072 la matrice des données
-0.5527 0.0951 0.8251 0.1652 -1.4881 0.5919 -0.0448
0.1821
-1.0216
-0.4625
0.3328
1.1065
1.6178
-0.0788
0.7603
-1.1373
-0.6325
1.6941
1.4086
0.2177
-0.0444 centrées réduites, l’ACP revient à
-0.7464 -0.4383 1.0400 -0.8900 -0.6159 0.7964 -0.5719
-0.8502
-0.7510
-1.6189
-0.9706
-0.3538
0.3582
0.8044
1.0655
-0.0720
0.4216
-0.1088
-0.3015
-0.8360
-1.5726
la recherche des vecteurs propres
-0.4739 -0.6319 0.6422 2.0299 -0.2603 -0.1102 -0.5091
-0.7330
-0.4330
-0.3950
-1.4785
-0.2020
0.0731
0.5043
1.9445
0.0663
0.0572
-0.8902
-0.3216
-0.2179
-1.3364
de la matrice des corrélations.
-0.2844 -0.8040 -0.5510 0.8029 0.4260 -1.1629 -1.4486
-0.6800 -0.4118 -0.5706 1.5380 0.4093 -0.0960 -0.9428
-0.6017 -1.1102 -0.3159 0.8827 1.2581 -0.9915 -0.3513
-0.4944
-0.4706
-1.5812
-1.4967
-0.8136
0.1321
0.8441
0.6719
1.5874
0.2776
-0.0908
-0.0711
-0.8191
-1.7956
X̄ = ones(n, 1) ∗ mean(X )
-1.2173
0.0359
-1.6905
-0.8376
-0.1295
-0.7469
0.9166
0.7333
0.3423
0.8639
-0.5926
-0.6880
-1.7682
-1.1263 S = ones(n, 1) ∗ std (X )
0.1118 -1.2214 -1.3014 1.6383 0.6306 -0.9105 -1.0789
0.4007
-0.2838
-1.4843
-0.9521
-1.1421
-0.9017
0.6611
0.7185
0.8225
0.3125
-0.7386
-0.0816
0.0907
-1.5057 Xn = (X − X̄ )./S
rho = n1 Xn0 ∗ Xn
0.3965 -1.1379 -0.5380 0.1953 1.0424 -0.7673 -1.0867
0.1059 0.0361 0.2630 1.2519 -0.0240 -0.7852 -1.4863
-0.6911 -0.6407 -0.2283 0.3998 0.7485 -0.0239 -1.0408
-2.2776 -1.1729 -0.2019 0.8760 0.5644 -0.1469 -0.6024
-0.1502 -0.5223 -1.1485 1.0422 0.7335 -1.5077 -1.1760
2.0272 1.4750 -0.9801 -1.9614 1.2820 -0.7261 1.3569 1.
0.1989 0.8576 -1.0152 -0.6927 0.4431 -0.7846 1.7169 0.63 1.
2.2220 1.0396 -0.5927 -0.4109 0.3165 -1.6929 0.9554 -0.49 -0.17 1.
1.1895 1.6842 -1.1238 -0.8307 0.3544 -0.9759 1.5552 -0.58 -0.77 0.21 1.
1.0515 1.6428 -0.7463 -1.5116 0.5674 -0.6314 1.3239 0.45 0.10 -0.78 -0.19 1.
1.8664 1.0513 -0.7221 -0.8922 1.1087 -0.2142 1.2243 -0.50 -0.17 0.81 0.16 -0.76 1.
1.5677 1.5059 -0.3269 -1.3851 -0.1779 -0.3927 0.4779 0.59 0.80 -0.14 -0.73 0.12 -0.05 1.
1.3562 1.8998 -0.2993 -1.1442 0.3210 0.3170 1.7762
0.2630 0.5303 -0.6793 -2.1539 1.6170 -0.4378 0.7714
1.1919 1.2938 0.3356 -1.5879 1.1011 -0.3599 1.5303
ACP en 2d : qu’est-ce que ce vecteur propre ?
le nuage de points avec la
moyenne (le centre du nuage)
(centrer et réduire les données)
Xn = (X - un*mX)./(un*sX)
ACP en 2d : qu’est-ce que ce vecteur propre ?
le nuage de points avec la
moyenne (le centre du nuage)
(centrer et réduire les données)
Xn = (X - un*mX)./(un*sX)
Le premier vecteur propre donne
l’axe principal
[V,λ] = eig(Xn’*Xn)
ACP en 2d : qu’est-ce que ce vecteur propre ?
le nuage de points avec la
moyenne (le centre du nuage)
(centrer et réduire les données)
Xn = (X - un*mX)./(un*sX)
Le premier vecteur propre donne
l’axe principal
[V,λ] = eig(Xn’*Xn)
Le second vecteur propre est
orthogonal
ACP : pourquoi rechercher des valeurs propres ?
La meilleur représentation linéaire du nuage de points est donnée par le
couple de vecteurs u ∈ IRn et v ∈ IRp permettant au mieux de reconstruire
la matrice X . Il sont alors solution du problème de minimisation suivant :
p
n X
X
min J(u, v) avec J(u, v) = (xij − ui vj )2
u,v
i j
v>
X − u uv>
aussi noté : J(u, v) = kX − uv> k2F
Résumé d’un tableau de données : résultat principal
Théorème (Eckart & Young, 1936)
La solution unique du problème d’optimisation suivant
min J(u, v) avec J(u, v) = kX − uv> k2F
u,v
est donnée par
v? et u? = X v ? ,
où v? est le vecteur propre normé associé à λ la plus grande
√ valeur propre
de la matrice X > X . De plus on a kv? k = 1 et ku? k = λ.
Démonstration : A l’optimum on a
∇u J(u, v) = −2X v + 2kvk2 u = 0
∇v J(u, v) = −2X > u + 2kuk2 v = 0
Résumé d’un tableau de données : calculs
La fonction cout1 peut se réécrire :
X p
n X X p
n X p
n X
X X n Xp
2
(xij − ui vj ) = xij2
−2 xij ui vj + (ui vj )2
i j i j i j i j
n
XXp n
X X p Xn X p
= xij2 − 2 xij vj ui + ui2 vj2
i j i j i j
p
n X
X
= xij2 − 2(X v)> u + kuk2 kvk2
i j
et donc
min kX − uv> k2F est analogue à min −2(X v)> u + kuk2 kvk2
u,v | {z } u,v | {z }
J(u,v) J (u,v)
1
qui est la norme de Frobenius de la matrice des différences J(u, v) = kX − uv> k2F
Minimisation d’une fonction de plusieurs variables
min J(u, v) = kX − uv> k2F
u,v
Definition (Gradient)
soit F une fonction de plusieurs (d ) variables :
F : IRd 7−→ IR
x −→ F (x)
on appelle gradient de F au point x la fonction des dérivées partielles
∇x F : IRd 7−→ IRd
>
∂F ∂F ∂F
x −→ ∇x F (x) = ∂x1 (x), . . . , ∂xi (x), . . . , ∂x (x)
d
Condition d’optimalité
(u ? , v ? ) est solution du problème de minimisation ssi le gradient de la
fonction J s’annule en ce point
Minimisation d’une fonction de plusieurs variables
Exemple
min J(x, y ) = 2(x − a)2 + (y − b)2
x,y
Méthode de résolution du problème :
1 calcul du gradient ∇x F (x, y )
2 résolution des équations ∇x F (x ? , y ? ) = 0 (2 équations à 2 inconnues)
Calcul du gradient
Minimiser le cout c’est trouver u et v qui annulent le gradient :
∇u J (u) = 0
min J(u, v) = kX − uv> k2F ⇔
u,v ∇v J (v) = 0
pour le cout :
X p
n X n
X Xp n
X p
X
J(u, v) = xij2 − 2 xij vj ui + ui2 vj2
i j i j i j
le gradient s’écrit
p p
∂J(u, v) X X
vj2
= −2 xij vj + 2ui
∂ui
j j
n n
∂J(u, v) X X
ui2
= −2 xij ui + 2vj
∂vj
i i
Ecriture matricielle du gradient
∇u J(u) = −2X v + 2kvk2 u
∇v J(v) = −2X > u + 2kuk2 v
minu,v kX − uv> k2F
Les conditions d’optimalité s’écrivent :
∇u J (u) = 0 ⇔ −X v + kvk2 u = 0
∇v J (v) = 0 ⇔ −X > u + kuk2 v = 0
On en déduit :
X v = kvk2 u
⇒ X > X v = kvk2 X > u = kvk2 kuk2 v
X > u = kuk2 v | {z }
λ
La solution est donc donnée par un vecteur propre v de la matrice X > X .
lequel ?
Quel vecteur propre choisir ?
A l’otimum
J (u, v) = −2(X v)> u + kuk2 kvk2 et X v = kvk2 u
soit
J (u, v) = −2kvk2 u> u + kuk2 kvk2
= −2kvk2 kuk2 + kuk2 kvk2
= −kuk2 kvk2 = −λ
le cout c’est la valeur propre .
La solution du problème est donc donnée par le vecteur propre associé à la
plus grande valeur propre de la matrice X > X car :
∇J (v) = 0 ⇔ X > X v − λv = 0 avec J(u, v) = kX k2 − λ
et l’on sait que toutes les valeurs propres de la matrice symétrique définie
positive X > X sont positives.
et la suite.. On itere le processus
Construisons la matrice des résidus R = X − uv>
R > R admet les mêmes valeurs propres que X > X .
...à l’exception de la plus grande qui devient zéro.
en posant X > X v = λv et X > X v2 = λ2 v2 et λ2 < λ
on a : R > Rv = (X − uv> )> (X − uv> )v
= X > X v − 2vu> X v + vu> uv> v
= λv − 2kuk2 v + kuk2 kvk2 v
= λv − kuk2 v =0
car u = X v, kvk2 = 1 et kuk2 = kX vk2 = v> X > X v = λ
et
R > Rv2 = (X − uv> )> (X − uv> )v2
= X > X v2 − 2X > uv> v2 + vu> uv> v2
= λ2 v2
car v> v2 = 0 puisque les vecteurs propres sont orthogonaux entre eux.
Les valeurs propres et vecteurs propres en 5 lignes
1 soit X la matrice des observations
X (:,i)−µi
2 Xr est la matrice des données centrées réduites Xr (:, i) = σi
3 on calcule les valeurs et vecteurs propres de la matrice de covariance
Xr > Xr
4 on visualise les observations en les projetant sur les vecteurs propres
associés aux plus grandes valeurs propres (typiquement les 2 plus
grandes)
5 on visualise aussi les variables
L’analyse en composantes principales (ACP)
Donc en résumé, si l’on cherche le sous espace V de rang k qui
« ressemble » le plus aux données X il faut calculer les k vecteurs
proposes correspondant aux k plus grandes valeurs propres.
[n,p]=size(X);
Xn = (X - ones(n,1)*mean(X))./(ones(n,1)*std(X));
[v,d] = eig(Xn’*Xn); % Calcul des valeurs propres
vp = sort(diag(d),’descend’); % on ordonne les valeurs propres
[vp 100*cumsum(vp)/sum(vp)], % affichage des valeurs propres
216.9681 52.53
125.3473 82.89
21.1190 88.00
16.5800 92.01
14.5963 95.55
10.8213 98.17
7.5682 100.00
v =
0.06 0.14 -0.41 -0.16 -0.75 0.05 0.44
0.53 -0.38 0.44 0.24 -0.07 0.38 0.38
-0.28 -0.68 -0.33 -0.01 -0.15 0.42 -0.36
0.13 -0.19 0.49 -0.48 -0.44 -0.34 -0.38
0.24 -0.46 -0.33 -0.40 0.38 -0.42 0.34
0.57 0.31 -0.24 -0.40 0.16 0.44 -0.35
-0.47 0.07 0.31 -0.58 0.17 0.41 0.36
L’analyse en composantes principales (ACP)
Donc en résumé, si l’on cherche le sous espace V de rang k qui
« ressemble » le plus aux données X il faut calculer les k vecteurs
proposes correspondant aux k plus grandes valeurs propres.
[n,p]=size(X);
Xn = (X - ones(n,1)*mean(X))./(ones(n,1)*std(X));
[v,d] = eig(Xn’*Xn); % Calcul des valeurs propres
vp = sort(diag(d),’descend’); % on ordonne les valeurs propres
[vp 100*cumsum(vp)/sum(vp)], % affichage des valeurs propres
216.9681 52.53
125.3473 82.89
21.1190 88.00
16.5800 92.01
14.5963 95.55
10.8213 98.17
7.5682 100.00
v =
0.06 0.14 -0.41 -0.16 -0.75 0.05 0.44
0.53 -0.38 0.44 0.24 -0.07 0.38 0.38
-0.28 -0.68 -0.33 -0.01 -0.15 0.42 -0.36
0.13 -0.19 0.49 -0.48 -0.44 -0.34 -0.38
0.24 -0.46 -0.33 -0.40 0.38 -0.42 0.34
0.57 0.31 -0.24 -0.40 0.16 0.44 -0.35
-0.47 0.07 0.31 -0.58 0.17 0.41 0.36
La représentation des individus et des variables par l’ACP
Facteurs : les axes factoriels v, λ
Xn> Xn v = λv et kvk = 1
Individus : les composante principale qui sont les projection des
individus
u = Xn v
Variables : calcul des corrélations entre variables observées
normalisées Xn (centrées réduites) et les composantes
principales u.
√
Xn> u Xn> Xn v λ λ
cor(Xn , u) = √ =√ = √ √ v= √ v
n kuk n kuk n λ n
car pour toutes les variables kX•j k2 = n et kuk2 = λ
[V,D] = eig(Xn’*Xn);
U = Xn*V;
% les nouvelles variables
plot(U(:,1),U(:,2),’o’);
plot(U(:,1),U(:,3),’o’);
plot(U(:,2),U(:,3),’o’);
plot(U(:,4),U(:,5),’o’);
% le role des variables
Vn = (V*sqrt(D(1:p,1:p))/sqrt(n));
plot(Vn(:,1),Vn(:,2),’*’);
plot(Vn(:,1),Vn(:,3),’*’);
plot(Vn(:,2),Vn(:,3),’*’);
L’ACP en matlab
On centre et on réduit les données .
Fonction Vn , U, λ ← ACP(X , k)
X = (X − un ∗ mean(X ))./(un ∗ std(X ))
(V , λ) = eig(X’*X,k) ou (U, V , µ) = svd(X,k)
U = X ∗ V√
√ √
Vn = V ∗ λ/ n ou Vn = V ∗ µ/ n
on projette les données sur le sous espace engendré par les k vecteurs
propres associés aux k plus grandes valeurs propres
et on calcule les corrélations entre les observation et ces nouvelles variables.
L’ACP reconstruit la matrice des données
Meilleur approximation de rang k
Soit X une matrice. La meilleure approximation de rang k de X , la matrice
Ak minimisant le critère suivant :
min kX − Ak k2F avec rang(Ak ) = k
Ak
s’obtient à l’aide des k vecteurs propres vi , i = 1, k associées aux k plus
grandes valeurs propres de la matrice X > X de la manière suivante :
Ak = Uk Vk>
où Vk est la matrice des vecteurs propres vi , i = 1, k et Uk est la matrice
des vecteurs ui = X vi , i = 1, k et donc Ak = XVk Vk>
l’erreur d’approximation est donnée par la somme des valeurs propres
restantes :
X n
2
kX − Ak kF = λi
i=k+1
L’ACP reconstruit la matrice des données
Jk = kX − Uk Vk> k2F k = 1, p
J(1) = (sum(sum(abs(Xn).^2)));
for k=1:p
J(k+1) = norm(Xn - (U(:,1:k)*D(1:k,1:k)*(V(:,1:k)’))));
end
figure(5)
plot(J/J(1));
hold on
title(’Erreur de reconstruction par ACP’)
plot(J/J(1),’o’);
hold off
Avec les deux plus grandes valeur propres, on reconstruit plus de 80 % de
la matrice des données (ébouli des valeurs propres selon Baccini et Besse)
observations X = Information Ak + Bruit
Plus loin sur le même principe...
D’autres applications possible de l’ACP :
I compression d’image
D’autres analyses à base d’analyse spectrale
I sur des tableaux de distance
I Tables de contingences : l’analyse factorielle des correspondances
(AFC)
I L’analyse canonique (AC) : comparaison de deux groupes de variables
I L’analyse des correspondances multiples, l’analyse discriminates
D’autres développements :
I ACP et modèle probabiliste
I ACP non linéaire,
I ACP généralisée
I ACP parcimonieuse
Conclusion
Pourquoi faire une analyse en composantes principale (ACP)
I permet de représenter les individus
I permet de représenter les variables
I permet de compresser les données et d’éliminer du bruit
Comment faire une L’analyse en composantes principale (ACP)
I réduire et centrer les données Xr
I calculer la matrice des correlations Xr > Xr
I en extraire les valeurs et les vecteurs propres V
I reconstruire les nouvelles variables U = XrV
I choisir k le nombre de facteurs significatifs k
Méthode exploratrice
I complexe dans sa formulation
I facile dans sa mise en œuvre (5 lignes de code)
Repéres bibliographiques
Statistique descriptive multidimensionnelle : Techniques factorielles de
base Baccini, Alain et Besse, Philippe (UPS. Université Paul Sabatier,
Toulouse 3. LSP. Laboratoire de statistique et probabilités. France)
[Link]
le cours de l’UTC sur l’ACP (G. Govaert)
[Link]
un tutorial de CMU sur l’ACP
[Link]
sur wikipedia
[Link]
Rappel sur les valeurs propres
soit Σ une matrice carrée symétrique définie positive (Σ = X > X ) de
dimension p. Il existe :
p réels positifs λi , i = 1, p et
p vecteurs de IRp , vi , i = 1, p
tels que
Σvi = λi vi
quelques faits à propos des valeurs et des vecteurs propres
par convention on ordonne les valeurs propres λi ≤ λi−1 , i = 2, p
par convention les vecteurs propres sont normés vi> vi = 1
les vecteurs propres sont orthogonaux entre eux : vi> vj = 0 i 6= j
la matrice des vecteurs propres V forme une base de IRp
décomposition spectrale : Σ = pi=1 λi vi vi>
P
on les calcule en utilisant un programme ([V,D] = eig(Σ))
X = randn(10,5)
X =
-0.6416 -0.3934 -0.7313 0.9820 0.5524
0.8415 2.1730 0.3442 1.6411 0.7336
0.6521 0.5006 3.4307 -0.5842 -1.6001
0.1848
0.3635
-0.2535
0.5542
0.3812
1.9298
-0.8544
0.6564
-0.3328
0.6291
Sv = λv
0.5890 -0.2903 1.5685 -1.6603 -0.5648
0.5153 -0.4606 0.2263 1.6934 -1.0449
0.9598 1.2378 -2.0753 0.5395 -0.4543
1.9332 2.2013 -0.2789 0.2030 -1.4092
-0.0956 -2.0578 -0.9055 -2.3387 1.0096
S = X’*X
S = S*V(:,1) - D(1,1)*V(:,1)
6.9914 7.7941 2.3642 1.4789 -4.7412
7.7941
2.3642
16.4077
1.8471
1.8471
24.0085
9.0969
-2.4957
-4.0880
-5.2547
= 1.0e-13 *
1.4789 9.0969 -2.4957 16.5856 -0.3456
-4.7412 -4.0880 -5.2547 -0.3456 8.5323 0
[V,D] = eig(S) -0.7105
V =
-0.8033 0.0653 0.4722 0.0324 -0.3555
0.5684
0.4619 0.4924 0.2197 0.3078 -0.6334
-0.0481
-0.2109
0.1162
-0.3453
-0.3922
-0.6437
-0.7853
0.5158
-0.4623
-0.3948
0.5684
-0.3074 0.7877 -0.4008 0.1468 0.3206
0
D =
1.2257 0 0 0 0
0 4.9599 0 0 0
0
0
0
0
10.6614
0
0
25.8086
0
0
S - V*D*V’;
0 0 0 0 29.8698
= -5.6843e-14 *
diag(D)
D = ...
1.2257
4.9599
10.6614
25.8086
29.8698