Classification mixte

pmbo


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.

  • ☆☆☆