- Le but de ce travail pratique est d'implémenter la méthode des k-moyennes pour
partitionner des données de façon non supervisée.
# Le partitionnement de données
De façon générale, le partitionnement de données consiste à grouper des données
en clusters de façon à ce que les éléments d'un même groupe soient proches les
uns des autres ou d'un élément virtuel représentant l'élément "moyen" de
la partition.
uns des autres ou d'un élément virtuel représentant l'élément "moyen" de la
partition.
# Méthode des k-moyennes (k-means)
# Méthodes des k-moyennes
Dans ce travail vous devrez implémenter l'algorithme k-moyennes (k-means en anglais)
qui permet de partionner un groupe de données par rapport à une metrique définie.
Ce processus de regroupement de données s'effectue de manière non-supervisée, c'est-à-dire que l'algorithme utilisé s'applique sur des données non-étiquetées
et sans avoir recours à un retour externe sur ses résultats.
La méthode des k-moyennes est un algortihme permettant de partitionner
un ensemble de données par rapport à une métrique prédéfinie.
## Données
Les éléments de l'univers doivent être représentables sous forme
de vecteurs de valeurs
naturelles (éléments de $\mathbb{N}^n$)
ou réelles (éléments de $\mathbb{R}^n$) .
## Fonctions à faire
- definir centroide aleatoirement (3)
- calcul dst euclidienne centre - pt
- calcul de la moyenne
- lire le fichier
- place les closteur (ou et nombre)
# Énoncé
À partir d'un fichier contenant des points à 2 dimensions, implémenter l'algorithme k-moyennes et visualiser les différents clusters créés.
## Fonction distance
Afin de quantifier la proximité de deux éléments entre eux, nous avons
besoin de définir une fonction distance, qui sera notre métrique.
...
...
@@ -57,35 +50,34 @@ $$d(x,y)$$
Une grande valeur de retour indiquera que $x$ et $y$ sont éloignés.
Inversément, une petite valeur de retour indiquera qu'ils sont proches.
## Algorithme
### distance euclidienne
## Distance euclidienne
- calculer la distance entre un point a l'aide de la dst euclidienne et les centroides : sqrt((x2-x1)^2 + (y2-y1)^2) = sqrt((x-y)^2)
- comparer les dst qui séparent le point aux centroides
- assigner le point au centroide le plus proche
- faire ca pour tous les points
### distance de Manhattan
## Distance de Manhattan
- calculer la distance entre un point a l'aide de la dst euclidienne et les centroides : |(x2 - x1)| + |(y2-y1)|
- comparer les dst qui séparent le point aux centroides
- assigner le point au centroide le plus proche
- faire ca pour tous les points
# Implémentation
## Type de données
Cet algorithme peut s'appliquer facilement à tous types de données
pouvant être représentées sous forme de vecteurs de valeurs.
Cependant, nous avons décidé de limiter nos tests aux vecteurs à valeurs
naturelles, en 2 dimensions, pour en simplifier la visualisation
et la vérification de notre algorithme.
## Fonctions à implémenter
Votre programme doit implémenter les fonctions suivantes :
- Définir _k_ centroide aleatoirement
- Calculer la distance euclidienne entre le centre d'un centroide et d'un point
- Calculer la nouvelle position d'un centroide (à partir de la moyenne des points)
- Lire un fichier contenant des points
- Déterminer les points appartenant aux closters
- Déterminer le K optimal (Elbow optimal, silhouette method, ...)
$$v \in \mathbb{N}^2$$
Ainsi que les structures ci-dessous :
### structure de donnée
```c
typedefstruct_cluster{
point*centroid;
intcolor;
}cluster;
typedefstruct_point{
...
...
@@ -102,16 +94,7 @@ typedef struct _kmeans {
clusterclusters_array[k];
point**points_array;
}kmeans;
**BONUS 1** : étendre l'implémentation pour pouvoir utiliser des vecteurs
à $n$ dimensions avec $n$ passé en paramètre au début de la procédure.
**BONUS 2** : implémentation de l'algorithme PCA pour la visualisation
de vecteurs à plus de 2 dimensions.
## Algorithme
**A FAIRE**
```
### centroides
- placer des centroides aléatoirement
...
...
@@ -120,6 +103,26 @@ de vecteurs à plus de 2 dimensions.
- changer les cordonnées des centroides
- répeter les actions jusqu'à que les cordonnées du centroides ne change pas
## Type de données
Cet algorithme peut s'appliquer facilement à tous types de données
pouvant être représentées sous forme de vecteurs de valeurs.
Cependant, nous avons décidé de limiter nos tests aux vecteurs à valeurs
naturelles, en 2 dimensions, pour en simplifier la visualisation
et la vérification de notre algorithme.
$$v \in \mathbb{N}^2$$
# Bonus
**BONUS 1** : étendre l'implémentation pour pouvoir utiliser des vecteurs
à $n$ dimensions avec $n$ passé en paramètre au début de la procédure.
**BONUS 2** : implémentation de l'algorithme PCA pour la visualisation
de vecteurs à plus de 2 dimensions.
## Interface utilisateur
Le programme fonctionnera entièrement en ligne de commande, avec possibilité