Introduction
Ce laboratoire montre comment effectuer un regroupement hiérarchique avec contraintes de connectivité à l'aide de la bibliothèque Scikit-learn en Python. Dans le regroupement hiérarchique, les clusters sont formés en les fusionnant ou en les divisant de manière récursive en fonction de la distance entre eux. Les contraintes de connectivité peuvent être utilisées pour restreindre la formation de clusters en fonction de la connectivité entre les points de données, ce qui peut entraîner des clusters plus significatifs.
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 au carnet Jupyter pour pratiquer.
Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.
Générer des données
Nous commençons par générer l'ensemble de données Swiss Roll à l'aide de la fonction make_swiss_roll de Scikit-learn. L'ensemble de données Swiss Roll est un ensemble de données 3D avec une forme en spirale.
from sklearn.datasets import make_swiss_roll
n_samples = 1500
noise = 0.05
X, _ = make_swiss_roll(n_samples, noise=noise)
## Rendre la forme plus fine
X[:, 1] *= 0.5
Regroupement hiérarchique non structuré
Nous effectuons un AgglomerativeClustering qui relève du regroupement hiérarchique sans aucune contrainte de connectivité.
from sklearn.cluster import AgglomerativeClustering
ward = AgglomerativeClustering(n_clusters=6, linkage="ward").fit(X)
label = ward.labels_
Tracer les clusters hiérarchiques non structurés
Nous traçons les clusters hiérarchiques non structurés à l'aide de la bibliothèque matplotlib.
import matplotlib.pyplot as plt
fig1 = plt.figure()
ax1 = fig1.add_subplot(111, projection="3d", elev=7, azim=-80)
for l in np.unique(label):
ax1.scatter(
X[label == l, 0],
X[label == l, 1],
X[label == l, 2],
color=plt.cm.jet(float(l) / np.max(label + 1)),
s=20,
edgecolor="k",
)
Regroupement hiérarchique structuré
Nous définissons les k plus proches voisins avec 10 voisins à l'aide de la fonction kneighbors_graph de Scikit-learn.
from sklearn.neighbors import kneighbors_graph
connectivity = kneighbors_graph(X, n_neighbors=10, include_self=False)
Nous effectuons à nouveau un AgglomerativeClustering avec des contraintes de connectivité.
ward = AgglomerativeClustering(
n_clusters=6, connectivity=connectivity, linkage="ward"
).fit(X)
label = ward.labels_
Tracer les clusters hiérarchiques structurés
Nous traçons les clusters hiérarchiques structurés à l'aide de la bibliothèque matplotlib.
fig2 = plt.figure()
ax2 = fig2.add_subplot(111, projection="3d", elev=7, azim=-80)
for l in np.unique(label):
ax2.scatter(
X[label == l, 0],
X[label == l, 1],
X[label == l, 2],
color=plt.cm.jet(float(l) / np.max(label + 1)),
s=20,
edgecolor="k",
)
Sommaire
Ce laboratoire a démontré comment effectuer un regroupement hiérarchique avec des contraintes de connectivité à l'aide de la bibliothèque Scikit-learn en Python. Nous avons tout d'abord généré l'ensemble de données Swiss Roll et effectué un regroupement hiérarchique non structuré. Nous avons ensuite défini les k plus proches voisins avec 10 voisins et effectué un regroupement hiérarchique structuré. Enfin, nous avons tracé les clusters hiérarchiques non structurés et structurés à l'aide de la bibliothèque matplotlib.