Introduction
Dans ce laboratoire, nous allons comparer deux algorithmes de clustering : K-Means et MiniBatchKMeans. K-Means est un algorithme de clustering populaire largement utilisé en apprentissage automatique. MiniBatchKMeans est une variante de K-Means qui est plus rapide mais donne des résultats légèrement différents. Nous allons regrouper un ensemble de données à l'aide des deux algorithmes et tracer les résultats. Nous allons également tracer les points qui sont étiquetés différemment entre les deux algorithmes.
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder à Jupyter Notebook pour la pratique.
Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez des commentaires après la session et nous réglerons rapidement le problème pour vous.
Générer les données
Nous commençons par générer les grappes de données à regrouper.
import numpy as np
from sklearn.datasets import make_blobs
np.random.seed(0)
batch_size = 45
centers = [[1, 1], [-1, -1], [1, -1]]
n_clusters = len(centers)
X, labels_true = make_blobs(n_samples=3000, centers=centers, cluster_std=0.7)
Calculer le regroupement avec KMeans
Nous allons calculer le regroupement avec KMeans.
import time
from sklearn.cluster import KMeans
k_means = KMeans(init="k-means++", n_clusters=3, n_init=10)
t0 = time.time()
k_means.fit(X)
t_batch = time.time() - t0
Calculer le regroupement avec MiniBatchKMeans
Nous allons calculer le regroupement avec MiniBatchKMeans.
from sklearn.cluster import MiniBatchKMeans
mbk = MiniBatchKMeans(
init="k-means++",
n_clusters=3,
batch_size=batch_size,
n_init=10,
max_no_improvement=10,
verbose=0,
)
t0 = time.time()
mbk.fit(X)
t_mini_batch = time.time() - t0
Établissement de la parité entre les groupes
Nous souhaitons avoir la même couleur pour le même groupe avec les algorithmes MiniBatchKMeans et KMeans. Associons les centres de groupe les uns aux autres en fonction de la distance la plus courte.
from sklearn.metrics.pairwise import pairwise_distances_argmin
k_means_cluster_centers = k_means.cluster_centers_
order = pairwise_distances_argmin(k_means.cluster_centers_, mbk.cluster_centers_)
mbk_means_cluster_centers = mbk.cluster_centers_[order]
k_means_labels = pairwise_distances_argmin(X, k_means_cluster_centers)
mbk_means_labels = pairwise_distances_argmin(X, mbk_means_cluster_centers)
Tracer les résultats
Nous allons tracer les résultats.
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(8, 3))
fig.subplots_adjust(left=0.02, right=0.98, bottom=0.05, top=0.9)
colors = ["#4EACC5", "#FF9C34", "#4E9A06"]
## KMeans
ax = fig.add_subplot(1, 3, 1)
for k, col in zip(range(n_clusters), colors):
my_members = k_means_labels == k
cluster_center = k_means_cluster_centers[k]
ax.plot(X[my_members, 0], X[my_members, 1], "w", markerfacecolor=col, marker=".")
ax.plot(
cluster_center[0],
cluster_center[1],
"o",
markerfacecolor=col,
markeredgecolor="k",
markersize=6,
)
ax.set_title("KMeans")
ax.set_xticks(())
ax.set_yticks(())
plt.text(-3.5, 1.8, "temps d'entraînement: %.2fs\ninertie: %f" % (t_batch, k_means.inertia_))
## MiniBatchKMeans
ax = fig.add_subplot(1, 3, 2)
for k, col in zip(range(n_clusters), colors):
my_members = mbk_means_labels == k
cluster_center = mbk_means_cluster_centers[k]
ax.plot(X[my_members, 0], X[my_members, 1], "w", markerfacecolor=col, marker=".")
ax.plot(
cluster_center[0],
cluster_center[1],
"o",
markerfacecolor=col,
markeredgecolor="k",
markersize=6,
)
ax.set_title("MiniBatchKMeans")
ax.set_xticks(())
ax.set_yticks(())
plt.text(-3.5, 1.8, "temps d'entraînement: %.2fs\ninertie: %f" % (t_mini_batch, mbk.inertia_))
## Initialiser les différents tableaux à False
different = mbk_means_labels == 4
ax = fig.add_subplot(1, 3, 3)
for k in range(n_clusters):
different += (k_means_labels == k)!= (mbk_means_labels == k)
identical = np.logical_not(different)
ax.plot(X[identical, 0], X[identical, 1], "w", markerfacecolor="#bbbbbb", marker=".")
ax.plot(X[different, 0], X[different, 1], "w", markerfacecolor="m", marker=".")
ax.set_title("Différence")
ax.set_xticks(())
ax.set_yticks(())
plt.show()
Sommaire
Dans ce laboratoire, nous avons appris à comparer deux algorithmes de regroupement : K-Means et MiniBatchKMeans. Nous avons regroupé un ensemble de données à l'aide des deux algorithmes et avons tracé les résultats. Nous avons également tracé les points qui sont étiquetés différemment entre les deux algorithmes. Cette comparaison nous aide à comprendre les différences entre les deux algorithmes et à choisir celui qui convient le mieux à nos besoins.