Agrupamiento por Propagación de Afinidad

Machine LearningMachine LearningBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderemos a usar el algoritmo de Propagación de Afinidad para realizar el agrupamiento en un conjunto de datos. El algoritmo de Propagación de Afinidad es un algoritmo de agrupamiento que no requiere que se defina previamente el número de clusters y es capaz de determinar automáticamente el número de clusters basado en los datos de entrada.

Consejos sobre la VM

Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar algunos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.


Skills Graph

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

Importar las bibliotecas necesarias

Comenzaremos importando las bibliotecas necesarias para realizar el agrupamiento y generar datos de muestra.

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

Generar datos de muestra

Generaremos un conjunto de datos de muestra utilizando la función make_blobs del módulo sklearn.datasets. La función make_blobs genera un conjunto de datos de puntos en un espacio de n dimensiones, donde cada punto pertenece a uno de los k clusters. Generaremos un conjunto de datos con 300 puntos en un espacio bidimensional, con 3 clusters y una desviación estándar 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
)

Calcular la Propagación de Afinidad

Utilizaremos la clase AffinityPropagation del módulo sklearn.cluster para realizar el agrupamiento en el conjunto de datos. Estableceremos el parámetro preference en -50, que controla el número de clusters que se generarán. Un valor más bajo de preference resultará en la generación de más clusters. Luego, imprimiremos algunas métricas para evaluar la calidad del agrupamiento.

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("Estimated number of clusters: %d" % n_clusters_)
print("Homogeneity: %0.3f" % metrics.homogeneity_score(labels_true, labels))
print("Completeness: %0.3f" % metrics.completeness_score(labels_true, labels))
print("V-measure: %0.3f" % metrics.v_measure_score(labels_true, labels))
print("Adjusted Rand Index: %0.3f" % metrics.adjusted_rand_score(labels_true, labels))
print(
    "Adjusted Mutual Information: %0.3f"
    % metrics.adjusted_mutual_info_score(labels_true, labels)
)
print(
    "Silhouette Coefficient: %0.3f"
    % metrics.silhouette_score(X, labels, metric="sqeuclidean")
)

Graficar el resultado

Graficaremos los clusters resultantes utilizando la librería matplotlib. Recorreremos cada cluster y graficaremos los puntos que pertenecen a ese cluster, junto con el centro del cluster y las líneas que conectan el centro con cada punto del cluster.

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("Estimated number of clusters: %d" % n_clusters_)
plt.show()

Resumen

En este laboratorio, aprendimos cómo utilizar el algoritmo de Propagación de Afinidad para realizar el agrupamiento en un conjunto de datos. Generamos un conjunto de datos de muestra, realizamos el agrupamiento utilizando el algoritmo de Propagación de Afinidad y graficamos los clusters resultantes. También evaluamos la calidad del agrupamiento utilizando varias métricas.