Contenu du cours
Analyse de Cluster
Analyse de Cluster
Regroupement par Déplacement de la Moyenne
Mean shift est l'algorithme de clustering basé sur la densité le plus simple. En termes simples, "mean shift" équivaut à "déplacement itératif vers la moyenne". Dans l'algorithme, chaque point de données est déplacé vers la "moyenne régionale" étape par étape, et l'emplacement de la destination finale de chaque point représente le cluster auquel il appartient. L'algorithme consiste en les étapes suivantes :
Étape 1. Pour chaque point de données, vous devez créer une fenêtre glissante avec un rayon spécifié (largeur de bande);
Étape 2. Déplacez chacune des fenêtres coulissantes vers des régions de plus haute densité en déplaçant son centroïde vers la moyenne des points de données à l'intérieur de la fenêtre. Cette étape sera répétée jusqu'à ce qu'il n'y ait plus d'augmentation du nombre de points dans la fenêtre coulissante ou que le centroïde cesse de bouger;
Étape 3. Sélection des fenêtres coulissantes par fusion des fenêtres qui se chevauchent. Lorsque plusieurs fenêtres se chevauchent, la fenêtre contenant le plus de points est conservée, et les autres sont fusionnées avec elle;
Étape 4. Assignez les points de données à la fenêtre coulissante où ils se trouvent. Si le point de données est en dehors de la fenêtre, assignez-le à la fenêtre la plus proche.
Le décalage moyen déplace les fenêtres vers une région de densité plus élevée en déplaçant leur centroïde (centre de la fenêtre coulissante) vers la moyenne des points de données à l'intérieur de la fenêtre coulissante.
Ainsi, l'algorithme de décalage moyen est très similaire à l'algorithme des K-means : il fonctionne également sur la moyenne des points et ne peut fonctionner que sur des clusters isolés. Mais il y a une différence significative : l'algorithme n'a pas besoin de définir manuellement le nombre de clusters.
Regardons l'exemple d'utilisation du clustering par décalage moyen en Python :
from sklearn.cluster import MeanShift import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_blobs, make_moons # Create dataset for clustering X, y = make_blobs(n_samples=500, cluster_std=1, centers=4 ) transformation = [[0.6, -0.6], [-0.4, 0.8]] X_aniso = np.matmul(X, transformation) # Train Mean Shift model on blobs dataset and visualize the results blobs_clustering = MeanShift(bandwidth=2).fit(X_aniso) fig, axes = plt.subplots(1, 2) axes[0].scatter(X[:, 0], X[:, 1], c=blobs_clustering.labels_, s=50, cmap='tab20b') axes[0].set_title('Clustered anizo blobs data') axes[1].scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='tab20b') axes[1].set_title('Real anizo blobs data')
Voyons comment l'algorithme de décalage moyen va gérer le jeu de données des lunes :
from sklearn.datasets import make_moons import matplotlib.pyplot as plt from sklearn.cluster import MeanShift # Create moons dataset for clustering X, y = make_moons(n_samples=500) # Fit Mean Shift model on moons dataset and visualize the results moons_clustering = MeanShift(bandwidth=0.7).fit(X) fig,axes = plt.subplots(1,2) axes[0].scatter(X[:, 0], X[:, 1], c=moons_clustering.labels_, s=50, cmap='tab20b') axes[0].set_title('Clustered moons data') axes[1].scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='tab20b') axes[1].set_title('Real moons data')
Dans le code ci-dessus, nous utilisons la classe MeanShift
pour créer le modèle : le paramètre bandwidth
définit le rayon dans lequel la valeur moyenne est calculée.
Remarque
Dans la classe
MeanShift
, vous pouvez utiliser la méthode.predict()
pour faire des prédictions basées sur un modèle déjà entraîné.
Merci pour vos commentaires !