Python del algoritmo de agrupamiento jerárquico!

Nodo de origen: 1055669

Este artículo fue publicado como parte del Blogatón de ciencia de datos

Introducción

En este artículo, veremos un enfoque diferente para el agrupamiento de K Means llamado agrupamiento jerárquico. En comparación con K Means o K Mode, el agrupamiento jerárquico tiene un algoritmo subyacente diferente sobre cómo funciona el mecanismo de agrupamiento. El agrupamiento jerárquico utiliza técnicas de aglomeración o división, mientras que K Means utiliza una combinación de centroide y distancia euclidiana para formar grupos. Los dendogramas se pueden usar para visualizar grupos en grupos jerárquicos, lo que puede ayudar con una mejor interpretación de los resultados a través de taxonomías significativas. No tenemos que especificar el número de grupos al hacer un dendrograma.

Aquí usamos Python para explicar el modelo de agrupamiento jerárquico. Tenemos datos de 200 clientes de centros comerciales en nuestro conjunto de datos. El ID de cliente, el género, la edad, los ingresos anuales y la puntuación de gastos de cada cliente se incluyen en el marco de datos. La cantidad calculada para cada uno de los puntajes de gasto de sus clientes se basa en varios criterios, como sus ingresos, la cantidad de veces por semana que visitan el centro comercial y la cantidad de dinero que gastaron en un año. Esta puntuación oscila entre 1 y 100. Como no sabemos las respuestas, un problema empresarial se convierte en un problema de agrupación. Las categorías finales de los datos son desconocidas para nosotros. Como resultado, nuestro objetivo es descubrir algunos grupos de clientes previamente desconocidos.

Pero primero, analizamos algunos términos importantes en el agrupamiento jerárquico.

Términos importantes en el agrupamiento jerárquico

Métodos de vinculación

Si hay (a) observaciones originales a[0],…,a[|a|1] en el grupo (a) y (b) objetos originales b[0],…,b[|b|1] en el grupo ( b), entonces debemos calcular la distancia entre dos grupos (a) y (b) para poder combinarlos (b). Digamos que hay un punto (d) que no ha sido asignado a ninguno de los clústeres. Tendremos que averiguar qué tan lejos está el grupo (a) del grupo (d) y el grupo (b) del grupo (d).

Los clústeres ahora suelen contener múltiples puntos, lo que requiere un método diferente para calcular la matriz de distancia. El método por el cual se calcula la distancia entre clústeres, o la distancia punto a clúster, está determinado por el enlace. Los siguientes son algunos de los mecanismos de vinculación más utilizados:

Enlace único — Las distancias entre los miembros más similares se calculan para cada par de conglomerados, y los conglomerados luego se fusionan en función de la distancia más corta.

Vinculación promedio — Se calcula la distancia entre todos los miembros de un clúster y todos los miembros de otro clúster. Después de eso, el promedio de estas distancias se usa para determinar qué grupos se fusionarán.

Vinculación completa — Para cada par de conglomerados, se calculan las distancias entre los miembros más diferentes y, a continuación, los conglomerados se fusionan en función de la distancia más corta.

Vinculación mediana — Usamos la distancia mediana en lugar de la distancia promedio de manera similar al enlace promedio.

Vínculo de barrio — Determina la distancia entre conglomerados utilizando el método de análisis de varianza.

Enlace centroide — El centroide de cada conglomerado se calcula promediando todos los puntos asignados al conglomerado y la distancia entre los conglomerados se calcula utilizando este centroide.

Cálculo de distancia

Existen múltiples enfoques para calcular la distancia entre dos o más clústeres, siendo la distancia euclidiana la más popular. También se pueden usar otras métricas de distancia, como Minkowski, City Block, Hamming, Jaccard y Chebyshev, con la agrupación jerárquica. Diferentes métricas de distancia tienen un impacto en la agrupación jerárquica, como se muestra en la Figura 2.

calculo de distancia

Dendograma

La relación entre los objetos en un espacio de características se representa mediante un dendrograma. En un espacio de características, se usa para mostrar la distancia entre cada par de objetos combinados secuencialmente. Los dendrogramas se utilizan con frecuencia para examinar grupos jerárquicos antes de decidir el número adecuado de grupos para el conjunto de datos. La distancia del dendrograma es la distancia entre dos grupos cuando se combinan. La distancia del dendrograma determina si dos o más grupos están separados o se pueden unir para formar un solo grupo.

Ejemplo

Ahora buscamos ejemplos que usan Python para demostrar el modelo de agrupamiento jerárquico. Tenemos datos de 200 clientes de centros comerciales en nuestro datos. El ID de cliente, el género, la edad, los ingresos anuales y la puntuación de gastos de cada cliente se incluyen en el marco de datos. El monto calculado para cada uno de los puntajes de gasto de sus clientes se basa en varios criterios, como sus ingresos, la cantidad de veces por semana que visitan el centro comercial y el dinero que gastaron durante un año. Esta puntuación oscila entre 1 y 100. Como no sabemos las respuestas, un problema empresarial se convierte en un problema de agrupación.

#1 Importando las bibliotecas
importar numpy como np importar matplotlib.pyplot como plt importar pandas como pd
#2 Importación del conjunto de datos Mall_Customers por pandas
conjunto de datos = pd.read_csv('Centro_Clientes.csv') X = conjunto de datos.iloc[:, [3,4]].valores

Este nuevo paso en la agrupación jerárquica también implica determinar el número óptimo de agrupaciones. Esta vez no vamos a usar el método del codo. Haremos uso del dendrograma.

#3 Usar el dendrograma para encontrar el número óptimo de grupos. # Lo primero que vamos a hacer es importar la biblioteca scipy. scipy es una biblioteca # Python de código abierto que contiene herramientas para hacer agrupaciones jerárquicas y construir dendrogramas. # Solo importe la herramienta necesaria. importar scipy.cluster.hierarchy como sch 
#Vamos a crear una variable dendrograma # vinculación es en realidad el propio algoritmo de agrupamiento jerárquico y luego en #vinculación tenemos que especificar en qué datos aplicamos e involucramos. Este es el dendrograma del conjunto de datos X = sch.dendrogram(sch.linkage(X, method = "ward")) plt.title('Dendrograma') plt.xlabel('Clientes') plt.ylabel('Distancias euclidianas') plt. mostrar()

El método Ward es un método que intenta reducir la varianza dentro de cada grupo. Es casi lo mismo que cuando usamos K-means para minimizar el wcss para trazar nuestro gráfico del método del codo; la única diferencia es que, en lugar de wcss, estamos minimizando las variantes dentro del clúster. Dentro de cada grupo, esta es la varianza. El dendrograma se muestra a continuación.

dendograma

Los clientes se representan en el eje x y la distancia euclidiana entre los clústeres se representa en el eje y. ¿Cómo calculamos el mejor número de conglomerados basándonos en este diagrama? Queremos encontrar la distancia vertical más larga que podamos sin cruzar ninguna línea horizontal, que es la línea enmarcada en rojo en el diagrama de arriba. Contemos las líneas en el diagrama y averigüemos cuántos grupos son los mejores. Para este conjunto de datos, el número de clúster será 5.

#4 Adaptar el agrupamiento jerárquico al conjunto de datos Mall_Customes # Hay dos algoritmos para el agrupamiento jerárquico: el agrupamiento jerárquico aglomerativo y el # agrupamiento jerárquico divisivo. Elegimos la distancia euclidiana y el método de barrio para nuestra # clase de algoritmo de sklearn.cluster import AgglomerativeClustering hc = AgglomerativeClustering(n_clusters = 5, affinity = 'euclidean', linkage ='ward') # Intentemos ajustar el algoritmo de agrupamiento jerárquico al conjunto de datos X mientras se crea el vector # clusters que le dice a cada cliente a qué grupo pertenece el cliente. y_hc=hc.fit_predict(X)
#5 Visualizando los clusters. Este código es similar al código de visualización k-means. #Solo reemplazamos el nombre del vector y_kmeans a y_hc para el agrupamiento jerárquico plt.scatter(X[y_hc==0, 0], X[y_hc==0, 1], s=100, c='red', label = 'Cluster 1') plt.scatter(X[y_hc==1, 0], X[y_hc==1, 1], s=100, c='blue', label ='Cluster 2') plt.scatter( X[y_hc==2, 0], X[y_hc==2, 1], s=100, c='verde', etiqueta ='Cluster 3') plt.scatter(X[y_hc==3, 0] , X[y_hc==3, 1], s=100, c='cian', label ='Cluster 4') plt.scatter(X[y_hc==4, 0], X[y_hc==4, 1 ], s=100, c='magenta', label ='Cluster 5') plt.title('Clusters of Customers (Modelo de agrupamiento jerárquico)') plt.xlabel('Ingreso anual(k$)') plt.ylabel ('Puntuación de gastos (1-100') plt.show()
racimos | Agrupación jerárquica
Grupo 1 (rojo), Grupo 2 (azul), Grupo 3 (verde), Grupo 4 (cian), Grupo 5 (magenta)

Estos grupos se pueden considerar como el segmento de clientes del centro comercial.

Eso es todo lo que hay en un modelo de agrupamiento jerárquico estándar. El conjunto de datos, así como todos los códigos, están disponibles en la sección de Github.

Conclusión

En cualquier ejercicio de agrupamiento, determinar el número de agrupamientos es un proceso que requiere mucho tiempo. Debido a que el lado comercial del negocio está más preocupado por extraer significado de estos grupos, es crucial visualizar los clústeres en dos dimensiones y ver si son distintos. Se puede utilizar PCA o análisis factorial para lograr este objetivo. Este es un método común para presentar los resultados finales a varias partes interesadas, lo que facilita que todos consuman el resultado.

EndNote

¡Gracias por leer!
Espero que hayas disfrutado el artículo y hayas aumentado tus conocimientos.
Por favor no dude en ponerse en contacto conmigo on Correo electrónico
¿Algo no mencionado o quieres compartir tus pensamientos? No dude en comentar a continuación y me pondré en contacto con usted.

Sobre la autora

Hardikkumar M. Dhaduk
Analista de datos | Especialista en Análisis de Datos Digitales | Aprendiz de ciencia de datos
Conecta conmigo en LinkedIn
Conecta conmigo en Github

Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.

Fuente: https://www.analyticsvidhya.com/blog/2021/08/hierarchical-clustering-algorithm-python/

Sello de tiempo:

Mas de Analítica Vidhya