Tutorial del Algoritmo de Agrupamiento Jerárquico en Python

Anthony Barrios
LatinXinAI
Published in
8 min readFeb 7, 2023

Cuando investigamos sobre un tema o empezamos a aprender acerca de un tópico nuevo, una estrategia eficaz es verificar si existen grupos de referencia y asegurarse de que las fuentes de información de los mismos concuerdan entre sí. Al comprobar la relación entre la información, puede ser posible emplear un método de agrupamiento, el cual es usado para agrupar datos comparables no etiquetados basados en sus características. Por ejemplo, se puede utilizar algoritmos de agrupamiento para clasificar documentos por temas.

Por otro lado, esta técnica también puede ser usada en la segmentación de mercado, análisis de redes sociales, diagnóstico médico por imágenes, y detecciones de anomalías.

Existen distintos tipos de algoritmos de agrupamiento y sus usos se ajustan de acuerdo al tipo de problema o estrategia que queramos implementar. Por ejemplo, si está buscando un método jerárquico, lo cual significa que intenta una técnica de aprendizaje multinivel y trabajar con múltiples tipos de granularidad, podría utilizar una técnica de agrupamiento jerárquico.

El agrupamiento jerárquico es un método de Machine Learning generalmente empleado para la organización y clasificación de datos, con el fin de detectar patrones y agrupar elementos, permitiendo así diferenciar unos de otros.

Imagen extraída de Understanding the concept of Hierarchical clustering Technique | by Chaitanya Reddy Patlolla | Towards Data Science

La jerarquía debe mostrar la información de manera que la podamos comparar a una estructura de datos en árbol, conocido como Dendrograma. Existen dos métodos para la agrupación de los datos: aglomerativo y divisivo.

Antes de entrar en detalles sobre el tema, vamos a explicar la importancia de un dendrograma en los algoritmos de agrupamiento. Este no solo ofrece una mejor representación de las agrupaciones de datos, sino que también nos brinda información acerca de los números exactos de grupos que podríamos calcular para la cantidad de nuestros datapoints.

El método aglomerativo es el tipo más común de agrupamiento jerárquico, el cual consiste en un enfoque “ascendente” en el cual cada objeto empieza en su grupo respectivo, llamado hoja; y los dos grupos más parecidos son unidos en un nuevo grupo más grande en cada fase del algoritmo, estos son conocidos como nodos.

Es un método iterativo, el cual se repite hasta que todos los puntos pertenecen a un único grupo mayor, llamado raíz, el cual contiene todos los datos.

Representación Gráfica del Agrupamiento Aglomerativo. Imagen extraída de Hierarchical Clustering in Data Mining — GeeksforGeeks

El método divisivo es lo opuesto al método aglomerativo y no resulta ser muy usado en comparación al previamente mencionado. Esto debido a que es mucho más costoso desde el punto de vista computacional, trayendo como consecuencia un rendimiento más lento.

Representación Gráfica del Agrupamiento Divisivo. Imagen extraída de Hierarchical Clustering in Data Mining — GeeksforGeeks

Para hacer este algoritmo posible, usando un enfoque aglomerativo, necesitamos realizar los siguientes pasos:

El primer paso es crear una matriz de proximidad, calculando la distancia entre cada par de puntos de datos, lo cual significa la distancia entre un punto de dato y los demás. Usualmente se usa la función de distancia euclidiana, dada por la fórmula

Donde:

p, q = dos puntos en el Espacio Euclidiano n

qi, pi = vectores euclidianos, comenzando del origen del espacio (punto inicial)

n = espacio n

Teniendo esto en cuenta, los dos puntos de datos a seleccionar serán ajustados de acuerdo a los criterios de conexión que hayamos elegido. Estos criterios deben elegirse de acuerdo a consideraciones teóricas del ámbito de aplicación. Existen algunos de uso común:

  • Conexión mínima, también conocido como conexión simple, es el cálculo de la distancia entre los dos componentes más similares de un grupo, es decir, los puntos de datos más cercanos. También puede ser definido como la mínima distancia entre puntos. Esta técnica tiene la ventaja de ser capaz de manejar formas no elípticas adecuadamente. Uno de sus inconvenientes es que es susceptible al ruido y a los valores atípicos.
  • Conexión máxima, también conocido como conexión completa, se basa en los dos pedazos de menor similitud de un grupo, o lo que es lo mismo, en la distancia máxima entre puntos. Este método de conexión es más vulnerable a ruidos y valores atípicos que la técnica de conexión mínima. También puede separar agrupaciones masivas y se inclina por agrupaciones globulares.
  • Conexión centróide, el cual calcula la distancia entre los centros de cada grupo.
  • Conexión media, que define la distancia de los grupos como la distancia promedio por pares entre todos los pares de puntos en los grupos.

Sin embargo, cuando no existen preocupaciones teóricas en nuestro problema, resulta muy útil emplear el criterio de conexión llamado Método Ward. Este método examina la variación de los grupos en lugar de calcular directamente distancias, reduciendo así la diferencia entre los mismos. Esto es logrado al reducir la suma de distancias cuadradas entre cada centro de los grupos. Este método tiene como ventaja ser más resistente a ruidos y valores atípicos.

Ahora que hemos calculado la distancia usando el criterio de conexión correspondiente, puede fusionar los datapoints, creando un nuevo grupo para cada par. Luego, todo lo que queda es seguir iterando hasta conseguir un único grupo. Puede lograr esto al generar una nueva matriz de proximidad y calcular las distancias usando el mismo criterio de conexión utilizado anteriormente.

Tutorial en Python

Una vez explicados todos los conceptos básicos, podemos comenzar con el tutorial en phyton.

Recordemos que estamos empleando la distribución Anaconda, así que en caso de que no la esté usando, necesitará realizar las instalaciones pip correspondientes.

python -m pip install pip

pip install numpy

pip install pandas

pip install matplotlib

pip install scipy

pip install scikit-learn

O también puedes ejecutar el código comentado al inicio del programa creado en Jupyter Notebooks.

Una vez instalados los paquetes, vamos a empezar a codear. Primero, necesitamos importar algunas librerías básicas

Para este ejemplo, estamos usando un archivo de valores separados por coma, en este caso emplearemos una lista de clientes de un centro comercial (extraído de Machine Learning A-Z: Download Codes and Datasets — Page — SuperDataScience | Machine Learning | AI | Data Science Career | Analytics | Success). En el archivo, obtenemos una lista de clientes e información acerca de sus ingresos anuales y sus índices de gastos. Nuestra meta es separarlos en agrupaciones usando el algoritmo de Agrupamiento Jerárquico.

Ahora vamos a asignarle a una variable nuestros puntos de datos deseados, los cuales son los ingresos anuales e índice de gastos por cliente. Esto se guarda en un arreglo solamente con los valores.

El siguiente paso es realizar otras importaciones.

Luego, generamos un dendrograma usando la importación de la biblioteca scipy, ya que nuestro problema no se encuentra involucrado en un enfoque teórico y queremos un resultado simple, emplearemos una conexión Ward para manejarlo.

Dejando de lado el código, queremos explicar un poco acerca del uso de los Dendrogramas. Como leímos anteriormente, los Dendrogramas nos darán los números recomendados de agrupaciones que queremos calcular para nuestro problema. Pero, ¿cómo podemos saber esto? Es tan simple como dibujar una línea paralela de modo que intercepte con el mayor número de líneas verticales, asegurándose de no chocar con una línea horizontal o “punto de ramificación”.

Cuando dos agrupaciones se fusionan, el dendrograma las unirá en un nodo, cada nodo tiene una distancia vertical la cual puede ser interpretada como la longitud en el eje de las y.

Vemos que la intersección de las líneas con la mayor distancia, es decir, la mayor distancia de un nodo, marca 5 grupos diferentes, lo cual indica que nos recomienda cinco agrupaciones para el problema. Teniendo esto en cuenta, podemos avanzar al siguiente paso.

Nota: si al ejecutar el programa aparece un mensaje de error, trate de cambiar el parámetro “metric” por “affinity”.

Vamos a realizar el agrupamiento aglomerativo empleando el método de la distancia euclidiana y el mismo criterio de conexión. Nótese que le estamos pasando a nuestra función que queremos 5 grupos para este problema. Seguidamente, solo asignamos los datapoints al grupo correspondiente.

Por último, vamos a programar nuestro diagrama de dispersión y asignar a cada grupo una respectiva etiqueta, según su índice de gasto y su ingreso anual.

Obteniendo como resultado final un diagrama de dispersión el cual muestra las cinco agrupaciones que calculamos y su respectiva leyenda.

En Conclusión

La agrupación jerárquica es un método resistente que trabaja con datos no etiquetados, lo cual resulta útil ya que la mayor parte de los datos, especialmente datos nuevos u originales, no vienen etiquetados con antelación y por lo tanto requieren un tiempo significativo para clasificar o anotar. En este artículo, aprendiste sobre las ideas fundamentales del agrupamiento, cómo funciona este algoritmo, y otros recursos adicionales para un mejor entendimiento, tales como los dendrogramas, cálculo de la distancia euclidiana, y los criterios de conexión.

A pesar de sus beneficios, tales como el no usar un número fijo de grupos, debemos apreciar que la agrupación jerárquica no funciona bien con enormes conjuntos de datos debido al gran espacio y complejidad del algoritmo. Este inconveniente se debe a la necesidad de calcular la distancia por pares entre los conjuntos de datos, como se explicó en nuestra sección sobre los tipos de conexión, así como a que el análisis del dendrograma requiere demasiados cálculos en conjuntos de datos de gran tamaño. Teniendo estos hechos en cuenta, entendemos que en este tipo de datos la agrupación jerárquica puede tomar mucho tiempo o requerir demasiados recursos informáticos para proveer resultados útiles, pero este tipo de algoritmo es el indicado para conjuntos de datos pequeños o normales, siendo particularmente útil en la comprensión temprana de datos no etiquetados.

Referencias

LatinX in AI (LXAI) logo

Do you identify as Latinx and are working in artificial intelligence or know someone who is Latinx and is working in artificial intelligence?

Don’t forget to hit the 👏 below to help support our community — it means a lot!

Thank you :)

--

--

Anthony Barrios
LatinXinAI

Informatics Engineering Student at UCAB Guayana in Venezuela. Currently working at LXAI. Constant learner, always looking to make the most of my opportunities.