Regroupement hiérarchique avec contraintes de connectivité

Beginner

This tutorial is from open-source community. Access the source code

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.