Documente Academic
Documente Profesional
Documente Cultură
Data Mining
Analyse en Composantes Principales
W. Toussile
wilson.toussile@gmail.com
1 Département MSP
20/07/2020
1 Notions de base
7 Pratique de l’ACP
Section 1
Introduction
Introduction
Les données
Elles se présentent sous la forme d’une matrice X de dimensions n × p:
X = xij , (1)
1≤i≤n;1≤j≤p
Données de la variable j :
j
x
j
.1 n
.. ∈ R
x =
xnj
W. Toussile wilson.toussile@gmail.com (ENSP) Data Mining 20/07/2020 5 / 94
Introduction Notions de base Espace métrique des individus et inerties Espace métrique des variables Analyse en Composante
Les objectifs
Les espaces des individus et des variables sont en général de grande
dimension (p ≥ 3 ou n ≥ 3), rendant difficile toute représentation des
nuages (individus ou variables) dans le plan.
L’ objectif de l’ACP est de
I Condenser l’information contenu dans le tableau (de grandes
dimensions) par une analyse des corrélations linéaires entre les
variables et une visualisation graphique des distances entre les
individus;
I Dégager les liaisons entre variables et les ressemblances entre
individus;
Sous R
# Se trouve dans le package factoextra
require(factoextra)
require(dplyr)
# 1eres lignes
decathlon2 %>% head()
Sous Python
import pandas as pd
decathlon = pd.read_csv("decathlon.csv", sep=";",
index_col = 0)
print("Dimensions = ".format(decathlon.shape))
decathlon.head()
Section 2
Notions de base
Quelques définitions I
P 1
ωi > 0 et i ωi = 1 et en général, ωi =
n
Matrice des poids : D = diag(ω1 , · · · , ωn )
Quelques définitions II
V = t XDX − x t x = t YDY
0 0
ωi (xij − x j )(xij − x j )
P
avec [V]j,j 0 = i
Remarque :
I y = 0Rp
I kxi − xi 0 k2 = kyi − yi 0 k2
xij − x j
!
ωi (xij − x j )2
X
Z := , où sj2 :=
sj i,j i
Exemple I
Sous R
X = decathlon2[, 1:10]
Y = scale(X, scale = FALSE)
n = nrow(X)
D = diag(rep(1/n, n))
S_1 = diag(1/sqrt(diag(V)))
Z = Y%*%S_1
V = t(Y)%*%D%*%Y # Covariances
R = t(Z)%*%D%*%Z # Corrélations
M = diag(1/diag(V))
Exemple II
Sous Python
import sklearn
from sklearn.preprocessing import StandardScaler
X = decathlon.iloc[:, 0:10]
Y = StandardScaler(with_std = False).fit_transform(X)
Z = StandardScaler(with_std = True).fit_transform(X)
n = X.shape[0]
D = (1/n)*np.diag(np.ones(n))
M = np.diag(1/X.std())
V = Y.T.dot(D).dot(Y)
R = Z.T.dot(D).dot(Y)
Section 3
Remarque :
Proposition
1 XX
It = ωi ωi 0 kxi − xi 0 k2M .
2 i i0
1 XX 1 XX
ωi ωi 0 kxi − xi 0 k2M = ωi ωi 0 kxi − x + x − xi 0 k2M
2 i i0 2 i i0
= ...
It = tr (MV ) = tr (VM) .
Proof.
X X X
ωi kyi k2M = t
ωi tr yi t yi M
It = ωi yi Myi =
i i i
! !
X
= tr ωi yi t yi M = tr (VM) = tr (MV ) .
i
Rappels
tr (AB) = tr (BA)
tr (A + B) = tr (A) + tr (B)
tr (αA) = αtr (A) .
# Inertie total
(1/n)*sum(apply(Y, 1, function(yi) my.norm(yi, M)))
(1/(2*n*n))*sum(sapply(1:n, function(i)
return(sum(sapply(1:n, function(j)
return(my.norm(as.numeric(X[i, ])-as.numeric(X[j, ]), M)))
sum(diag(V%*%M))
Sous Python
import numpy as np
def myNorm(x, Mat = M):
return(x.dot(Mat).dot(x))
print((1/n)*np.sum(np.apply_along_axis(myNorm, 1, Y)))
print(np.sum(np.diag(V.dot(M))))
où
ybiF = PF (yi ).
Inertie expliquée par une droite : Soit ∆u une droite engendrée par
un vecteur M-normée u (t uMu = 1). On a
et
X X
I∆u ((yi , ωi )i ) = ωi kP∆u yi k2M = ωi t uMyi t yi Mu
i i
!
X
t
= uM ωi yi t yi Mu = t uMVMu
i
Décomposition de l’inertie I
Décomposition de l’inertie II
Preuve
1 Tout vecteur x ∈ Rp se décompose de façon unique comme
x = PF x + PF ⊥ x , avec hPF x , PF ⊥ x iM = 0. Il suffit alors
d’appliquer Pythagore à
X X
It = ωi kyi k2M = ωi kPF yi + PF ⊥ yi k2M .
i i
Section 4
Ainsi,
kyj k2D = sj2
0
L’angle θj,j 0 entre y j et y j est donné par
0
0
hy j , y j iD cov x j , x j
cos θj,j 0 = j = = [R]j,j 0 .
ky kD ky j 0 kD sj sj 0
Section 5
Le problème
Definition
On appelle sous-espace principal de dimension k tout sev de dimension
k solution du problème précédent.
Theorem
Soit Ek un sous-espace principal de dimension k < p. Alors tout
sous-espace principal de dimension k + 1 est sous la forme
Ek+1 = Ek ⊕ ∆uk+1 ,
Proof.
Il suffit de montrer que tout sev F de dimension k + 1 est d’inertie
IF ≤ IEk+1 . Soit donc F un sev de dimension k + 1. On a
dimEk⊥ + dimF = (p − k) + (k + 1) = p + 1, d’où Ek⊥ et F ont au
moins une direction commune 0Rp 6= u ∈ Ek⊥ ∩ F . Soit Fe un
supplémentaire de ∆u dans F : F = Fe ⊕ ∆u . Alors dimFe = k. On en
déduit IFe ≤ IEk . Par ailleurs, Iu ≤ Iuk+1 . Ainsi
Iu1 = t u1 MVMu1 .
Pb : maxkukM =1 t uMVMu.
Lagrangien : L (u, λ) = t uMVMu − λt uMu.
∇u L (u, λ) = 0 équiv. à VMu = λu. Donc u est un vecteur
propre de VM de valeur propre λ. En multipliant membres
l’égalité précédente par t uM, on obtient λ = Iu .
Iuj = λj .
Calcul
Proof.
des axes principaux IV
1 La matrice VM est M symétrique :
Composantes principales I
d’où
cij = t yi Muj .
Composantes principales II
C = YMU
Proposition
1 Les CP sont des combinaisons linéaires des variables de départ y j .
2 Les CP c j sont centrées, de variances λj et non-corrélées
deux-à-deux.
3 Les CP c 1 , · · · , c p sont vecteurs propres de la matrice YMt YD,
de valeurs propres associées λ1 , · · · , λp .
Composantes principales IV
Munissons l’espace des variables de la métrique D := diag (ωi )i .
Alors
0 0 0
hy j , y j iD = t y j Dy j = cov y j , y j
Composantes principales V
Composantes principales.
1. c j = YMu j = k Mu j k y k .
P
2.
c = t CD1 = t UMt YD1 = t UMy = 0.
0
h i
cov c j , c j = t
CDC = t UMt YDYMU = t UMVMU.
0
h i
cov c j , c j = t UMUdiag (λj ) = Id diag (λj ) .
Sous R
require(FactoMineR)
out_pca = PCA(X, scale.unit = TRUE, ncp = ncol(X))
out_pca$eig # Valeurs propres
summary(out_pca)
Sous Python
import numpy as np
from sklearn.decomposition import PCA
pca = PCA(n_components = 10)
pca.fit(X)
dir(pca)
Section 6
Le problème
ACP (t Y, M, D)
Proposition
1 Les valeurs propres non nulles de l’ACP (t Y, M, D) sont les
valeurs propres non nulles λ1 , · · · , λr de lACP (Y, D, M).
2 Les axes principaux de l’ACP (t Y, M, D) correspondant aux
valeurs propres λ1 , · · · , λr sont les facteurs principaux f 1 , · · · , f r
de l’ACP (Y, D, M).
Les t
√ composantes √ principales de l’ACP ( Y, M, D) sont
3
Proof.
Section 7
IEk λ1 + · · · + λk
= Pp .
I j=1 λj
k j 2
kPEk yi k2M
P
2 j=1 (ci )
cos (yi , PEk yi ) = =
kyi k2M
Pp j 2
j=1 (ci )
ωi (cik )2 ωi (cik )2
=P k )2
= ωi (fi k )2 .
λk i ω i (ci
ωi (cik )2
En général, lorsque > ωi , on considère que la
λk
contribution de l’individu i est importante.
Il est conseillé de retirer les individus pour lesquels les
contributions sont trop importantes, et de les réintégrer comme
individus supplémentaires
Les “outliers” peuvent être détectés sur les boîtes à moustaches
des composantes principales c 1 , · · · , c p ou des facteurs principaux
f 1, · · · , f p .
Pp k 2 Pp
ωi kyi k2M ωi k=1 (ci ) ωi (c k )2
= = Pk=1 i
I I k λk
Individus supplémentaires
Il s’agit des individus qui ne font pas partie de l’échantillon ayant servi
pour l’ACP, et qu’on représente sur les axes principaux.
Soit x ∈ Rp les données d’un individu supplémentaire. Ses
coordonnées dans le repère (x , u1 , · · · , up ) sont données par
hx − x , uk iM .
car d k = √1 c k .
λk
W. Toussile wilson.toussile@gmail.com (ENSP) Data Mining 20/07/2020 60 / 94
Introduction Notions de base Espace métrique des individus et inerties Espace métrique des variables Analyse en Composante
sphère unité Sn de Rn .
L’intersection de cette sphère unité et le premier plan principal est
dons un cercle unité appelé cercle des corrélations
PF2 z j est un point à l’intérieur du cercle des corrélations, et la
représentation est d’autant meilleure que PF2 z j est proche du
cercle des corrélations.
Note :
0
I La proximité des projections de z j et z j une forte corrélation
linéaire
I Des projections diamétralement opposés indiquent une corrélation
négative proche de −1
I Des projections presque orthogonales indiquent une faible
corrélation
e k = Pk pλj f j t uj .
Pour une dimension k fixé, posons Y j=1
où
kTv kD
kTkM,D := sup .
v ∈Rp kv kM
Section 8
Pratique de l’ACP
n o
La règle de Kaiser : kb = arg mink λk ≥ p1 j λj = pI
P
I
Interprétation I
Interprétation II
Pour une carte des variables : étudier les angles entre les
projections des variables en termes de covariance ou de corrélation
pour dégager éventuellement des groupes de variables.
Pour les cartes des individus : étudier les proximités ou oppositions
entre les points en termes de “comportement”, et dégager
éventuellement des groupes d’individus et les comportement
singuliers.
Faire une synthèse des informations et hypothèses principales
dégagées de la carte décrite.
Récapitulatif
Individus Variables
Espace Rp Rn
Données Y tY
Poids D = diag (ω
i ) M
1
Métrique M = diag sj2
D
À diagonaliser VM = t YDYM YMt YD
Valeurs propres λ1 ≥ λ2 ≥ · · · ≥ λr > 0 λ1 ≥ λ2 ≥ · · · ≥ λr > 0
Axes principaux u1 , · · · , up f 1, · · · , f p
CP c j = YMuj cek = t YDf k
k
FP f 1 , · · · , f k = √cλ u1 , · · · , ur
k
2
(cik )
Contribution de yi ωi λk
Section 9
Exemples
“iris” I
require(dplyr)
?iris
iris %>% head()
“iris” II
require(FactoMineR)
require(factoextra)
acp_iris = PCA(iris, scale.unit = TRUE,
ncp = 4, quali.sup = 5, graph = FALSE)
names(acp_iris) # Le contenu
“iris” III
# Éboulis des valeurs propres
fviz_screeplot(acp_iris, ncp = 4) + theme_bw()
Percentage of explained variances
Scree plot
60
40
20
0
1 2 3 4
Dimensions
“iris” IV
“iris” V
Individuals − PCA
2
Dim2 (22.9%)
Groups
1
setosa
0
versicolor
−1 virginica
−2
−2 0 2
Dim1 (73%)
“iris” VI
“iris” VII
PCA graph of variables
Dim 2 (22.85%)
1.0 Sepal.Width
0.5 Sepal.Length
Petal.Width
0.0
Petal.Length
−0.5
−1.0
−1.0 −0.5 0.0 0.5 1.0
Dim 1 (72.96%)
“iris” VIII
“iris” IX
3
−3 0
Dim.1 Dim.3
“iris” X
b = boxplot(acp_iris$ind$coord[, 2])
1
−2
“iris” XI
i_outliers = as.numeric(names(b$out))
“iris” XII
“iris” XIII
Individuals − PCA
3
2
Groups
Dim2 (21%)
1
setosa
0
versicolor
−1 virginica
−2
−3
−2 0 2
Dim1 (74.6%)
“iris” XIV
“iris” XV
PCA graph of variables
Dim 2 (20.98%)
1.0
Sepal.Width
0.5 Sepal.Length
Petal.Width
0.0
Petal.Length
−0.5
−1.0
−1.0 −0.5 0.0 0.5 1.0
Dim 1 (74.64%)
#fviz_pca_var(acp_iris, col.var="steelblue")+theme_minimal()
“iris” XVI
# Biplot
fviz_pca_biplot(acp_iris2, label = "var", axes = c(1, 2),
habillage = iris$Species[-i_outliers],
addEllipses = TRUE,
ellipse.level = 0.95) + theme_classic()
“iris” XVII
PCA − Biplot
Sepal.Width 132
3 16 118
2
Sepal.Length
Groups
Dim2 (21%)
1
Petal.Width
Petal.Length setosa
0 versicolor
−1 virginica
−2
61
−3
−2 0 2
Dim1 (74.6%)
“decathlon” I
“decathlon” II
L’ACP
fit_acp = PCA(decathelon, scale.unit = TRUE,
ncp = 5, quanti.sup = 11:12,
quali.sup = 13, graph = FALSE)
names(fit_acp) # Le contenu
fit_acp$eig # Les valeurs propres
“decathlon” III
Représentations graphiques
“decathlon” IV
# Représentation des individus
fviz_pca_ind(fit_acp, geom = "text", axes = c(1, 2),
habillage = decathlon$Competition,
addEllipses = TRUE,
ellipse.level = 0.95) + theme_classic()
# Biplot
fviz_pca_biplot(fit_acp, label = "var",
habillage = decathlon$Competition,
addEllipses = TRUE,
ellipse.level = 0.95) + theme_classic()
W. Toussile wilson.toussile@gmail.com (ENSP) Data Mining 20/07/2020 92 / 94
Introduction Notions de base Espace métrique des individus et inerties Espace métrique des variables Analyse en Composante
Section 10
Références
Biblio
Références