######################################################### # UE7 Statistiques, Master SV, 2018 # Application de l'algorithme des nuees dynamiques (K-means) ######################################################### # k-means basics----------------------- # recuperation des donnees library(datasets) head(iris) # Plot des donnees Longueur x largeur des petales library(ggplot2) # ce plot se base sur la connaissance des especes ggplot(iris, aes(Petal.Length, Petal.Width, color = Species)) + geom_point() # et celui-là les ignore ! ggplot(iris, aes(Petal.Length, Petal.Width, color = 1)) + geom_point() # On donne une valeur initiale pour le générateur aleatoire set.seed(20) # On applique l'algorithme Hartigan-Wong (par defaut) # nstart specifie le nombre d'essai avec des centres initiaux differents irisCluster <- kmeans(iris[, 3:4], 3, algorithm = "Hartigan-Wong", nstart = 20) # resultat irisCluster # On comparer ici le resultat de l'algorithme avec les veritables assignations # on constate qu'il y a des erreurs. table(irisCluster$cluster, iris$Species) # On plot le resultat des la classification a comparer avec le plot des especes irisCluster$cluster <- as.factor(irisCluster$cluster) ggplot(iris, aes(Petal.Length, Petal.Width, color = irisCluster$cluster)) + geom_point() # et maintenant une super visualisation--------- # install.packages("animation") library(animation) kmeans.ani(iris[, 3:4], 3) # beaucoup, beaucoup, plus de details sur : #https://www.guru99.com/r-k-means-clustering.html # Aide à l'identification détection du nombre optimal de groupes ------------------ # Evaluer la proportion d'inertie expliquée inertie.expl <- rep(0,times=10) for (k in 2:10){ clus <-kmeans(iris[, 3:4],centers=k,nstart=5) inertie.expl[k] <-clus$betweenss/clus$totss } #graphique : 3 est bien l'optimum... plot(1:10,inertie.expl,type="b",xlab="Nb. de groupes",ylab="% inertie expliquée") #------------------------ THE END ----------------------------#