Contenu du cours
Analyse de Cluster
Analyse de Cluster
Clustering K-Means
Le clustering K-means est l'algorithme de clustering le plus populaire utilisé pour regrouper des points de données similaires dans un ensemble de données. L'algorithme fonctionne en sélectionnant d'abord une valeur k, qui représente le nombre de clusters ou de groupes que nous voulons identifier dans les données.
Décrivons brièvement toutes les étapes du fonctionnement de cet algorithme:
Étape 1. L'algorithme initialise k points aléatoires dans l'ensemble de données, appelés centroïdes;
Étape 2. Chaque point de données est ensuite assigné au centroïde le plus proche en fonction d'une métrique de distance, telle que la distance euclidienne. Ce processus crée k clusters, chaque cluster étant constitué des points de données les plus proches du centroïde ;
Étape 3. Les centroïdes sont déplacés vers le centre de chaque cluster ;
Étape 4. Les étapes 2 et 3 sont répétées. L'algorithme met à jour de manière itérative les centroïdes et réassigne les points de données jusqu'à la convergence, lorsque les centroïdes ne bougent plus.
Nous pouvons voir que cet algorithme est assez simple et intuitif, mais il présente quelques inconvénients majeurs :
- nous devons choisir manuellement le nombre de clusters ;
- l'algorithme dépend des valeurs initiales des centroïdes ;
- l'algorithme est fortement affecté par les valeurs aberrantes.
Regardons l'implémentation de K-means en Python :
from sklearn.cluster import KMeans import numpy as np import matplotlib.pyplot as plt import warnings warnings.filterwarnings('ignore') # Create toy dataset to show K-means clustering model X = np.array([[1, 3], [2, 1], [1, 5], [8, 4], [11, 3], [15, 0], [6,1], [10,3], [3,7], [4,5], [12,7]]) # Fit K-means model for 2 clusters kmeans = KMeans(n_clusters=2).fit(X) # Print labels for train data print('Train labels are: ', kmeans.labels_) # Print coordinates of cluster centers print('Cluster centers are: ', kmeans.cluster_centers_) # Visualize the results of clustering fig, axes = plt.subplots(1, 2) axes[0].scatter(X[:, 0], X[:, 1], c=kmeans.labels_, s=50, cmap='tab20b') axes[0].scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], c='red', s=100) axes[0].set_title('Train data points') # Provide predictions for new data predicted_labels = kmeans.predict([[10, 5], [4, 2], [3, 3], [6, 3]]) print('Predicted labels are: ', predicted_labels) # Visualize prediction results axes[1].scatter([10, 4, 3, 6], [5, 2, 3, 3], c=predicted_labels, s=50, cmap='tab20b') axes[1].scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], c='red', s=100) axes[1].set_title('Test data points')
Dans le code ci-dessus, nous avons utilisé les éléments suivants :
- La classe
Kmeans
desklearn. cluster
. Le paramètren_clusters
détermine le nombre de clusters dans les données ; - La méthode
.fit(X)
de la classeKmeans
ajuste notre modèle - détermine les clusters et leurs centres selon les données X ; - L'attribut
.labels_
de la classeKMeans
stocke les numéros de cluster pour chaque échantillon de données d'entraînement (0 cluster, 1 cluster, 2 cluster,...); - L'attribut
.cluster_centers_
de la classeKMeans
stocke les coordonnées des centres de clusters ajustés par l'algorithme ; - La méthode
.predict()
de la classeKmeans
est utilisée pour prédire les étiquettes de nouveaux points.
Merci pour vos commentaires !