Projet “K-Means”
Ruggero G. Pensa
16 novembre 2006
1 Clustering
Le principe du clustering est de diviser les donn´ees en plusieurs sous-ensembles.
Comme le calcul de tous les sous-ensembles possibles n’est pas faisable, on uti-
lise des heuristiques sous la forme d’optimisation it´erative de la fonction ob-
jectif. Chaque algorithme poss`ede un scema de relocalisation qui r´eassigne
it´erativement les objets parmi les Kclasses.
Dans la m´ethode du k-means, une classe est repr´esent´ee par son centro¨ıde,
qui est une moyenne (souvent pond´er´ee) des objets appartenant `a cette classe.
On consid´erera une matrice de donn´ees comme celle de la Table 1, o`u les
valeurs de Cvariables (par exemples, des propri´et´es ´electriques), sont stock´ees
pour un ensemble de Lobjets (par exemple, des mat´eriaux). La case pij repr´esente
la valeur de la variable pjpour l’objet oi. Chaque objet oipeut ˆetre repr´esent´e
comme un vecteur `a Ccomposantes (pi1, . . . , piC ). On rappelle que, en langage
C, si mat[L][C] est un tableau `a deux dimension repr´esentant la matrice de
donn´ees, mat[i] est un tableau de taille C, et mat[i][j] contient la valeur de
la j-i`eme composante du i-i`eme tableau.
O|P p1. . . pj. . . pC
o1p11 . . . p1j. . . p1C
.
.
.. . . . . . . . . . . . . . .
oipi1. . . pij . . . piC
.
.
.. . . . . . . . . . . . . . .
oLpL1. . . pLj . . . pLC
Tab. 1 – Un tableau de donn´ees `a Llignes et Ccolonnes
1.1 La m´ethode K-Means
L’algorithme des k-means, est de loin l’outil le plus populaire utilis´e dans
les applications scientifiques et industrielles de clustering. Le nom d´erive du fait
que, pour repr´esenter chacune des Kclasses Ck, on utilise la moyenne (ou la
moyenne pond´er´ee) πkde ses points, appel´ee centro¨ıde (ou centre de masse).
Chacune des Ccomposantes du vecteur πkest calcul´ee par :
πkj =1
|Ck|X
oiCk
pij
1
Dans le cas de donn´ees num´eriques, cela donne un sens g´eom´etrique et statistique
`a la m´ethode. L’inertie intra-classe constitue le crit`ere `a optimiser. Elle est
d´efinie comme la moyenne des carr´es des distances des objets de la classe au
centre de gravit´e de celle-ci. On cherche ainsi `a construire des classes compactes.
L’inertie intra-classe associ´ee `a la classe Cks’´ecrit formellement
Ik=1
|Ck|X
oiCk
d2(oi, πk)
L’objectif est alors de minimiser la somme de l’inertie intra-classe sur l’ensemble
des classes. L’algorithme proc`ede en deux ´etapes : dans la premi`ere phase, on
r´eassigne tous les objets au centro¨ıde le plus proche, et dans la deuxi`eme phase,
on recalcule les centro¨ıdes des classes qui ont ´et´e modifi´ees. Pour mesurer la
proximit´e entre un centro¨ıde et un objets, on calculera une distance entre ce
deux vecteurs. On pourra utiliser, par exemple, la distance euclidienne, calcul´ee
de la mani`ere suivante :
d(oi, πk) = v
u
u
t
C
X
j=1
(pij πkj )2
Les deux phases sont it´erativement r´ep´et´ees jusqu’`a ce qu’un crit`ere d’arrˆet
soit atteint (par exemple, si aucune modification n’a eu lieu, ou si le nombre
maximum d’it´erations a ´et´e atteint).
Les principaux probl`emes de l’approche des k-means comme des autres ap-
proches partitionnelles, sont l’influence de la partition initiale (qui est souvent
choisie de fa¸con al´eatoire), et le choix du param`etre Kqui n’est pas toujours
´evident.
Soit P0={C1, . . . , Ck, . . . , CK}
ep´eter
Affectation : g´en´erer une nouvelle partition en assignant chaque objet au
groupe dont le centre de gravit´e est le plus proche
Repr´esentation : calculer les centres de gravit´e associ´es `a la nouvelle
partition
jusqu’`a convergence de l’algorithme vers une partition stable;
Algorithm 1: K-means
1.2 ´
Evaluation d’une partition
Un crit`ere g´en´eral pour ´evaluer les esultats d’un clustering consiste `a com-
parer la partition calcul´ee avec une partition “correcte”. Cela signifie que les
instances des donn´ees sont d´ej`a associ´ees `a des ´etiquettes jug´ees correctes, et que
l’on va pouvoir quantifier la conformit´e entre ´etiquettes calcul´ees et ´etiquettes
correctes. Une mesure classique est l’indice de Rand pour ´evaluer la conformit´e
entre deux partitions de L´el´ements.
Si C={C1. . . Cs}est la structure issue de la classification et que P=
{P1. . . Pt}est une partition pr´ed´efinie, chaque paire de points peut ˆetre affect´ee
au mˆeme cluster ou `a deux clusters diff´erents. Soit ale nombre de paires ap-
partenant au mˆeme cluster de Cet au mˆeme cluster de P. Soit ble nombre de
2
paires dont les points appartiennent `a deux clusters diff´erents de Cet `a deux
clusters diff´erents de P. La conformit´e entre Cet Ppeut ˆetre estim´ee au moyen
de la formule :
Rand(C,P) = a+b
L·(L1)/2
Cet indice prend des valeurs entre 0 et 1 et il est maximis´e lorsque s=t.
Nous utilisons l’indice de Rand pour calculer la pr´ecision dans nos exp´eriences.
2 Description du projet
Il s’agit ici de mettre en œuvre un vrai processus exp´erimentale pour tes-
ter l’efficacit´e d’un algorithme. Le processus est standard, et consiste `a calculer
l’indice de Rand pour un ensemble de jeu de donn´ees. L’initialisation de l’algo-
rithme ´etant al´eatoire, on mesurera la moyenne et l’´ecart-type des valeurs des
indices de Rand pour un ensemble de 100 ex´ecutions de l’algorithme. L’indice de
Rand est calcul´e entre une partition exacte (c’est-`a-dire, une partition valid´ee
par un expert) et la partition produite par l’algorithme. Une bonne partition
devrait avoir un indice de Rand proche de 1. On peut affirmer que l’algorithme
fonctionne bien, lorsque l’´ecart-type est petit par rapport `a la moyenne. On
pourra tester aussi d’autres types de param`etres, par exemple le nombre moyen
d’it´erations n´ecessaires `a l’algorithme pour atteindre la stabilit´e.
Le projet se d´eroule de la mani`ere suivante :
1. Codage de l’algorithme : dans cette phase on se contentera de coder les
fonction n´ecessaires au bon fonctionnement de l’algorithme. Une distance
de type euclidien est suffisante. On pourra chercher sur le net ou dans un
bouquin le pseudo-code de l’algorithme k-means.
2. Test de l’algorithme sur un petit jeu de donn´ees : on testera l’al-
gorithme sur un petit jeu de donn´ees pour pouvoir d´eboguer le code.
3. Ex´ecution du protocole de test : on ex´ecutera le protocole standard
pour mesurer les indices demand´es.
4. ´
Evaluation des esultats : on comparera les r´esultats sur les diff´erents
jeu de donn´ees.
5. ´
Evaluation d’autres types de distances : on s’int´eressera au codage
de distances autres que la distances euclidienne (chercher, par exemple,
l’algorithme “spherical k-means”.
6. Comparaison des r´esultats : dans quelle mesure la distance influence
le comportement de l’algorithme ?
7. Complexit´e de l’algorithme : quelle est la complexit´e de l’algorithme
k-means ?
2.1 Codage de l’algorithme
Un certain nombre de fonctions a d´ej`a ´et´e coe. Elles se trouvent dans l’ar-
chive kmeans.zip disponible sur ce site web :
http ://eurise.univ-st-etienne.fr/~pensa/prog-L2-PCPA/Projet
3
Il faut t´el´echarger l’archive est le d´ecomprimer avec la commande :
unzip kmeans.zip
Un r´epertoire appel´e kmeans sera cr´e´e. Dans ce r´epertoire il y le code source du
projet. Il est ainsi structur´e :
fichiers.c : fonctions pour l’ouverture des fichiers ;
fichiers.h : header de fichiers.c ;
outils.c : fonctions d’inerˆet g´en´eral (g´en´erateur de nombres al´eatoires) ;
outils.h : header de outils.c ;
kmeans.c : fonctions de l’algorithme ;
kmeand.h : entˆete de l’algorithme ;
main.c : fonction main de l’algorithme k-means ;
rand.c : programme pour le calcul de l’indice de Rand.
Pour compiler il suffit d’utiliser la commande make :
make all : pour tout compiler ;
make kmeans : pour compiler l’algorithme k-means ;
make rand : pour calculer le programme pour le calcul de l’indice de Rand ;
make clean : pour nettoyer le r´epertoire (toujours conseill´e lorsque l’on
modifie un ou plusieurs fichiers).
2.2 Ex´ecution de l’algorithme
Une fois le programme compil´e, deux ex´ecutables sont g´en´er´es :
kmeans : pour ex´ecuter l’algorithme k-means ;
rand : pour ex´ecuter le programme pour le calcul de l’indice de Rand.
Pour ex´ecuter l’algorithme (par exemple sur le fichier test.txt avec K= 2) on
utilisera la commande suivante :
./kmeans test.txt testres.txt 2
Le fichier testres.txt contiendra alors les ´etiquettes des classes pour chaque
objet. Pour ´evaluer l’indice de Rand, on pourra utiliser la commande rand de
la mani`ere suivante :
./rand testres.txt testclass.txt
2.3 Ex´ecution du protocole de test
Dans le r´epertoire kmeans/test on trouvera les fichiers correspondant aux
diff´erents jeux de donn´ees. Les jeux de donn´ees sont les suivants : iris,glass,
diabetes,ionosphere,heart,waveform. Pour chaque jeux de donn´ees on aura trois
fichiers :
fichier jeudedonnees.txt contenant la matrice de donn´ees ;
fichier jeudedonnees number.txt contenant le nombre de classes `a pro-
duire ;
4
fichier jeudedonneesclass.txt contenant la partition “correcte” du jeu
de donn´ees.
Pour faciliter l’ex´ecution sur les jeux de donn´ees de test, on pourra utiliser un
certain nombre de scripts (contenus dans le r´epertoire kmeans).
tester.sh : pour ex´ecuter un certain nombre de fois l’algorithme k-means
sur un jeu de donn´ees ;
valider.sh : pour ´evaluer l’indice de Rand sur l’ensemble de r´esultats
pour un jeu de donn´ees ;
lancer test.sh : pour lancer l’ensemble des tests.
Par exemple, pour ex´ecuter 100 fois l’algorithme k-means sur le jeu de donn´ees
iris.txt avec K= 2, on utilisera la commande suivante :
./tester.sh iris 2 100
La commande cr´ee d’abord un r´epertoire iris dans kmeans/test. Ensuite
elle g´en`ere dans le r´epertoire kmeans/test/iris 100 fichiers nomm´es iris out i.txt
(i= 1..100), contenant les 100 partitions et un fichier iris res.txt (dans le
mˆeme r´epertoire) contenant, pour chaque ex´ecution, ses statistiques.
Pour ´evaluer l’indice de Rand sur les 100 r´esultats de l’algorithme k-means
sur le jeu de donn´ees iris.txt, on utilisera la commande suivante :
./valider.sh iris 100
La commande g´en`ere un fichier iris rand.txt dans le r´epertoire kmeans/test/iris
qui contient la valeur de l’indice de Rand pour chacune de 100 partitions pro-
duites.
Pour tester l’algorithme sur l’ensemble de six jeux de donn´ees et pour en
valider les r´esultats, il suffit de lancer la commande :
./lancer test.sh
qui utilise les deux scripts pr´ec´edents sur les six jeux de donn´ees.
3 Informations pratiques
Le travail par groupes de deux personnes au maximum est fortement conseill´e.
Chaque groupe a `a disposition quatre semaines pour terminer le projet. Les
deux derni`eres s´eances de TP seront consacr´ees `a la mise au point du projet.
Il est fortement conseill´e d’utiliser une bonne heure de la premi`ere s´eance pour
comprendre le code et la structure de donn´ees, et pour chercher des exemples
d’algorithme. Ensuite, il faut pr´evoir une heure dans la deuxi`eme s´eance pour
lancer les tests et r´ecup´erer les r´esultats.
La date ultime pour la remise du dossier est le 22 d´ecembre 2006. On
n’acceptera que des dossiers en forme ´electronique, et ils devront contenir
les parties suivantes :
5
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !