Les instructions R
☆ Regardez d’abord les slides sur la classification mixte (cours_classification_mixte.pdf)
☆ Nous allons reproduire les instructions des slides sur le même fichier. Exécutez :
fileName="https://pmbo-sd.fr/STID/Data_mining/classif_mixte_ndp.txt"
X=as.matrix(read.delim(fileName,header=F,sep=" "))
dim(X)
[1] 702 2
head(X)
V1 V2
[1,] 1.0220451 3.488415
[2,] 0.8809155 3.184187
[3,] 0.6734522 3.209055
[4,] 0.1658746 3.465464
[5,] 1.0487977 3.954961
[6,] 0.9535033 3.167158
plot(X)
Classification mixte sur ce fichier : complétez maintenant les instructions suivantes :
q=50
classif=...
Comment obtenir les coordonnées des centres de classe ? La fonction
names
permet de connaître le contenu de l’objet
classif
:
names(classif)
[1] "cluster" "centers" "totss" "withinss" "tot.withinss"
[6] "betweenss" "size" "iter" "ifault"
Ajoutez alors les centres de classes sur le graphique :
points(.......,pch=19,cex=2)
Pour la CAH sur les centres de classes, les centres doivent être
pondérés par l’effectif (i.e. la taille) des classes (option
member
) :
cah=hclust(dist(.......),method="ward.D2",members=.......)
plot(cah,hang=-1)
plot(rev(cah$height),type="b")
L’observation de l’arbre et du graphique des sauts devrait montrer que le nombre de classes q=8 est optimal. (l’initialisation de kmeans étant aléatoire, vous pouvez avoir un résultat légèrement différent).
Complétez :
q=8
classif2=......
On stocke alors les centres (des centres !) dans
moyennes
:
moyennes=aggregate(......,list(......),mean)[,-1]
Pour affecter chaque observation initiale aux centres obtenus (i.e. au plus proche centre voisin suivant la distance euclidienne), l’astuce est d’utiliser kmeans en forçant le nombre d’itérations à 1 :
classif_finale=kmeans(X,moyennes,iter.max=1)
Ne tenez pas compte du warning>
. L’objet
classif_finale
contient la classification finale. Pour le
vérifier, affichez de nouveau le fichier initial avec une couleur par
classe :
par(bg="slategray2")
plot(X,col=classif_finale$cluster,pch=19)
par(bg="white")
Application
Le fichier …
Importez ce fichier, qui contient 100 000 vecteurs en dimension 5
fileName="https://pmbo-sd.fr/STID/Data_mining/spk_multilingual_compressed.txt"
X=as.matrix(read.delim(fileName,
header=F,sep=" ",colClasses = rep("numeric",5)))
dim(X)
[1] 100000 5
head(X)
V1 V2 V3 V4 V5
[1,] -1.5713 -2.5440 -1.2584 1.0412 -0.3647
[2,] -0.7906 -3.3046 1.3623 3.5901 1.5583
[3,] -1.5012 -2.6322 -1.1317 1.6858 -0.3960
[4,] -2.1227 -2.5228 -1.9144 1.8074 -1.6246
[5,] -1.2154 -3.2183 -2.5587 3.1821 -0.9176
[6,] -1.7773 -2.2749 -0.9037 2.0447 0.1175
Attention ! Ce fichier est en dimension 5. Impossible de le
visualiser par plot
☆ Effectuez une classification mixte sur ce fichier (pas besoin de le centre-réduire).
Analyse
Quel nombre de classes avez-vous choisi ? Si vous ne vous êtes pas trompé, ce devrait être 4.
Chaque observation de ce fichier est une représentation vectorielle (compressée en dimension 5) d’un extrait de voix, de 2 à 5 secondes.
25% de ces extraits de voix sont en chinois, 25% en persan, 25% en anglais et 25% en arabe.
Pour comparer votre classification et les langues parlées, exécutez :
language=rep(c("chinese","persian","english","arabic"),each=25000)
table(classif_finale$cluster,language)
Comme vous devez le constater, il y a pour chaque langue une classe dominante.
Si l’on associe à chacune des 4 classes une langue prédite, quelle sera le taux de précision de la prédiction (ou le taux d’erreur = 1 - taux de précision) ? Exécutez …
w=table(classif_finale$cluster,language)
w
… puis, à partir de w
, en associant à chaque classe 1,
2, 3, 4 la langue de plus grand effectif, essayez de calculer ces
taux.
Bilan
Gardez à l’esprit …- que cette prédiction est effectuée sur des segments de voix très courts (2 à 5 secondes), parfois enregistrés dans un environnement bruité,
- qu’elle est effectuée sur des vecteurs compressés en dimension 5, pour limiter la taille du fichier (la représentation initiale est en dimension 256),
- que la distance euclidienne utilisée pour cette classification n’est pas optimale avec ces représentations de voix,
- qu”une classification n’est pas la méthode prédictive optimale. Des taux de précision supérieurs à 99% peuvent être obtenus avec des méthodes optimisées pour ces segments de voix.