Regroupement par affinité de propagation

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

Dans ce laboratoire, nous allons apprendre à utiliser l'algorithme d'affinité de propagation pour effectuer un regroupement sur un ensemble de données. L'algorithme d'affinité de propagation est un algorithme de regroupement qui ne nécessite pas que le nombre de groupes soit prédéfini et qui est capable de déterminer automatiquement le nombre de groupes en fonction des données d'entrée.

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 limites 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ésoudrons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/cluster("Clustering") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/cluster -.-> lab-49060{{"Regroupement par affinité de propagation"}} sklearn/datasets -.-> lab-49060{{"Regroupement par affinité de propagation"}} ml/sklearn -.-> lab-49060{{"Regroupement par affinité de propagation"}} end

Importation des bibliothèques nécessaires

Nous allons commencer par importer les bibliothèques nécessaires pour effectuer le regroupement et générer des données d'échantillonnage.

import numpy as np
from sklearn.cluster import AffinityPropagation
from sklearn import metrics
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

Générer des données d'échantillonnage

Nous allons générer un ensemble de données d'échantillonnage à l'aide de la fonction make_blobs du module sklearn.datasets. La fonction make_blobs génère un ensemble de données de points dans un espace à n dimensions, chaque point appartenant à l'un des k groupes. Nous allons générer un ensemble de données avec 300 points dans un espace à 2 dimensions, avec 3 groupes et une déviation standard de 0,5.

centers = [[1, 1], [-1, -1], [1, -1]]
X, labels_true = make_blobs(
    n_samples=300, centers=centers, cluster_std=0.5, random_state=0
)

Calculer l'affinité de propagation

Nous allons utiliser la classe AffinityPropagation du module sklearn.cluster pour effectuer un regroupement sur l'ensemble de données. Nous allons définir le paramètre préférence sur -50, qui contrôle le nombre de groupes qui seront générés. Une valeur plus faible de préférence entraînera la génération de plus de groupes. Nous allons ensuite afficher certaines métriques pour évaluer la qualité du regroupement.

af = AffinityPropagation(preference=-50, random_state=0).fit(X)
cluster_centers_indices = af.cluster_centers_indices_
labels = af.labels_

n_clusters_ = len(cluster_centers_indices)

print("Nombre estimé de groupes : %d" % n_clusters_)
print("Homogénéité : %0.3f" % metrics.homogeneity_score(labels_true, labels))
print("Complétude : %0.3f" % metrics.completeness_score(labels_true, labels))
print("V-mesure : %0.3f" % metrics.v_measure_score(labels_true, labels))
print("Indice de Rand ajusté : %0.3f" % metrics.adjusted_rand_score(labels_true, labels))
print(
    "Information mutuelle ajustée : %0.3f"
    % metrics.adjusted_mutual_info_score(labels_true, labels)
)
print(
    "Coefficient de silhouette : %0.3f"
    % metrics.silhouette_score(X, labels, metric="sqeuclidean")
)

Tracer le résultat

Nous allons tracer les groupes résultants à l'aide de la bibliothèque matplotlib. Nous allons parcourir chaque groupe et tracer les points appartenant à ce groupe, ainsi que le centre du groupe et les lignes reliant le centre à chaque point du groupe.

plt.close("all")
plt.figure(1)
plt.clf()

colors = plt.cycler("color", plt.cm.viridis(np.linspace(0, 1, 4)))

for k, col in zip(range(n_clusters_), colors):
    class_members = labels == k
    cluster_center = X[cluster_centers_indices[k]]
    plt.scatter(
        X[class_members, 0], X[class_members, 1], color=col["color"], marker="."
    )
    plt.scatter(
        cluster_center[0], cluster_center[1], s=14, color=col["color"], marker="o"
    )
    for x in X[class_members]:
        plt.plot(
            [cluster_center[0], x[0]], [cluster_center[1], x[1]], color=col["color"]
        )

plt.title("Nombre estimé de groupes : %d" % n_clusters_)
plt.show()

Sommaire

Dans ce laboratoire, nous avons appris à utiliser l'algorithme d'affinité de propagation pour effectuer un regroupement sur un ensemble de données. Nous avons généré un ensemble de données d'échantillonnage, effectué un regroupement à l'aide de l'algorithme d'affinité de propagation et tracé les groupes résultants. Nous avons également évalué la qualité du regroupement à l'aide de diverses métriques.