Regroupement agglomératif sur l'ensemble de données des chiffres

Machine LearningMachine LearningBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Ce laboratoire illustre diverses options de liaison pour le regroupement agglomératif sur une projection 2D de l'ensemble de données des chiffres. Le but de ce laboratoire est de montrer comment différentes stratégies de liaison se comportent et non de trouver de bons groupes pour les chiffres. C'est pourquoi l'exemple fonctionne sur une projection 2D.

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/cluster("Clustering") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/cluster -.-> lab-49111{{"Regroupement agglomératif sur l'ensemble de données des chiffres"}} ml/sklearn -.-> lab-49111{{"Regroupement agglomératif sur l'ensemble de données des chiffres"}} end

Importation des bibliothèques

Nous commençons par importer les bibliothèques nécessaires pour ce laboratoire. Nous utiliserons numpy, matplotlib, manifold et les jeux de données de scikit-learn pour effectuer le regroupement agglomératif.

import numpy as np
from matplotlib import pyplot as plt
from time import time
from sklearn import manifold, datasets
from sklearn.cluster import AgglomerativeClustering

Charger et préparer l'ensemble de données

Nous chargons l'ensemble de données des chiffres et le préparons pour le regroupement en extrayant les données et les étiquettes cibles. Nous définissons également la graine aléatoire sur zéro pour garantir la reproductibilité.

digits = datasets.load_digits()
X, y = digits.data, digits.target
n_samples, n_features = X.shape
np.random.seed(0)

Visualiser l'ensemble de données

Nous visualisons l'ensemble de données en calculant une projection 2D de l'ensemble de données des chiffres à l'aide de manifold.SpectralEmbedding() et en traçant le nuage de points avec des marqueurs différents pour chaque chiffre.

def plot_dataset(X_red):
    x_min, x_max = np.min(X_red, axis=0), np.max(X_red, axis=0)
    X_red = (X_red - x_min) / (x_max - x_min)

    plt.figure(figsize=(6, 4))
    for digit in digits.target_names:
        plt.scatter(
            *X_red[y == digit].T,
            marker=f"${digit}$",
            s=50,
            alpha=0.5,
        )

    plt.xticks([])
    plt.yticks([])
    plt.title('Digits Dataset Scatter Plot', size=17)
    plt.axis("off")
    plt.tight_layout(rect=[0, 0.03, 1, 0.95])

print("Computing embedding")
X_red = manifold.SpectralEmbedding(n_components=2).fit_transform(X)
print("Done.")
plot_dataset(X_red)

Regroupement agglomératif avec différentes stratégies de liaison

Nous effectuons le regroupement agglomératif avec différentes stratégies de liaison : ward, average, complete et single. Nous fixons le nombre de clusters à 10 pour toutes les stratégies. Nous traçons ensuite les résultats du regroupement en utilisant des couleurs différentes pour chaque chiffre.

def plot_clustering(X_red, labels, title=None):
    x_min, x_max = np.min(X_red, axis=0), np.max(X_red, axis=0)
    X_red = (X_red - x_min) / (x_max - x_min)

    plt.figure(figsize=(6, 4))
    for digit in digits.target_names:
        plt.scatter(
            *X_red[y == digit].T,
            marker=f"${digit}$",
            s=50,
            c=plt.cm.nipy_spectral(labels[y == digit] / 10),
            alpha=0.5,
        )

    plt.xticks([])
    plt.yticks([])
    if title is not None:
        plt.title(title, size=17)
    plt.axis("off")
    plt.tight_layout(rect=[0, 0.03, 1, 0.95])

for linkage in ("ward", "average", "complete", "single"):
    clustering = AgglomerativeClustering(linkage=linkage, n_clusters=10)
    t0 = time()
    clustering.fit(X_red)
    print("%s :\t%.2fs" % (linkage, time() - t0))

    plot_clustering(X_red, clustering.labels_, "%s linkage" % linkage)

plt.show()

Sommaire

Dans ce laboratoire, nous avons appris à effectuer le regroupement agglomératif sur l'ensemble de données des chiffres en utilisant différentes stratégies de liaison. Nous avons également visualisé l'ensemble de données et les résultats de regroupement pour chaque stratégie. Les résultats montrent que différentes stratégies de liaison produisent des résultats de regroupement différents, et que nous devrions choisir la stratégie qui convient le mieux à nos besoins.