logo

Agrupación jerárquica en aprendizaje automático

La agrupación jerárquica es otro algoritmo de aprendizaje automático no supervisado, que se utiliza para agrupar los conjuntos de datos sin etiquetar en un grupo y también se conoce como análisis de conglomerados jerárquicos o HCA.

En este algoritmo, desarrollamos la jerarquía de grupos en forma de árbol, y esta estructura en forma de árbol se conoce como dendograma .

A veces, los resultados de la agrupación de K-medias y la agrupación jerárquica pueden parecer similares, pero ambos difieren según cómo funcionan. Dado que no es necesario predeterminar el número de grupos como lo hicimos en el algoritmo K-Means.

La técnica de agrupamiento jerárquico tiene dos enfoques:

    Aglomerativo:El aglomerativo es un de abajo hacia arriba enfoque, en el que el algoritmo comienza tomando todos los puntos de datos como grupos individuales y fusionándolos hasta que quede un grupo.Divisivo:El algoritmo divisivo es lo opuesto al algoritmo aglomerativo, ya que es un enfoque de arriba hacia abajo.

¿Por qué la agrupación jerárquica?

Como ya tenemos otros agrupamiento algoritmos como Agrupación de K-medias Entonces, ¿por qué necesitamos agrupaciones jerárquicas? Entonces, como hemos visto en la agrupación de K-medias, este algoritmo presenta algunos desafíos, que son un número predeterminado de agrupaciones, y siempre intenta crear agrupaciones del mismo tamaño. Para resolver estos dos desafíos, podemos optar por el algoritmo de agrupamiento jerárquico porque, en este algoritmo, no necesitamos tener conocimiento sobre el número predefinido de grupos.

programa java sencillo

En este tema, analizaremos el algoritmo de agrupamiento jerárquico aglomerativo.

Agrupación jerárquica aglomerativa

El algoritmo de agrupamiento jerárquico aglomerativo es un ejemplo popular de HCA. Para agrupar los conjuntos de datos en clusters, se sigue el enfoque de abajo hacia arriba . Es decir, este algoritmo considera cada conjunto de datos como un solo grupo al principio y luego comienza a combinar el par de grupos más cercano. Hace esto hasta que todos los grupos se fusionan en un solo grupo que contiene todos los conjuntos de datos.

Esta jerarquía de conglomerados se representa en forma de dendrograma.

¿Cómo funciona la agrupación jerárquica aglomerativa?

El funcionamiento del algoritmo AHC se puede explicar mediante los siguientes pasos:

    Paso 1:Cree cada punto de datos como un único grupo. Digamos que hay N puntos de datos, por lo que el número de clústeres también será N.
    Agrupación jerárquica en aprendizaje automático Paso 2:Tome dos puntos o grupos de datos más cercanos y combínelos para formar un grupo. Entonces, ahora habrá grupos N-1.
    Agrupación jerárquica en aprendizaje automático Paso 3: Nuevamente, tome los dos grupos más cercanos y combínelos para formar un grupo. Habrá grupos N-2.
    Agrupación jerárquica en aprendizaje automático Etapa 4:Repita el paso 3 hasta que solo quede un grupo. Entonces, obtendremos los siguientes grupos. Considere las siguientes imágenes:
    Agrupación jerárquica en aprendizaje automático
    Agrupación jerárquica en aprendizaje automático
    Agrupación jerárquica en aprendizaje automático Paso 5:Una vez que todos los grupos se combinan en un grupo grande, desarrolle el dendrograma para dividir los grupos según el problema.

Nota: Para comprender mejor la agrupación jerárquica, se recomienda consultar la agrupación de k-medias

Medir la distancia entre dos grupos.

Como hemos visto, el distancia más cercana entre los dos grupos es crucial para la agrupación jerárquica. Hay varias formas de calcular la distancia entre dos grupos, y estas formas deciden la regla para la agrupación. Estas medidas se llaman Métodos de vinculación . Algunos de los métodos de vinculación populares se detallan a continuación:

    Enlace único:Es la Distancia Más Corta entre los puntos más cercanos de los clusters. Considere la siguiente imagen:
    Agrupación jerárquica en aprendizaje automático Enlace completo:Es la distancia más lejana entre los dos puntos de dos grupos diferentes. Es uno de los métodos de vinculación más populares, ya que forma grupos más estrechos que el vínculo único.
    Agrupación jerárquica en aprendizaje automático Enlace promedio:Es el método de vinculación en el que la distancia entre cada par de conjuntos de datos se suma y luego se divide por el número total de conjuntos de datos para calcular la distancia promedio entre dos grupos. También es uno de los métodos de vinculación más populares.Enlace centroide:Es el método de vinculación en el que se calcula la distancia entre los centroides de los conglomerados. Considere la siguiente imagen:
    Agrupación jerárquica en aprendizaje automático

De los enfoques anteriores, podemos aplicar cualquiera de ellos según el tipo de problema o requerimiento empresarial.

Woking del dendrograma en agrupación jerárquica

El dendrograma es una estructura en forma de árbol que se utiliza principalmente para almacenar cada paso como una memoria que realiza el algoritmo HC. En el gráfico del dendrograma, el eje Y muestra las distancias euclidianas entre los puntos de datos y el eje x muestra todos los puntos de datos del conjunto de datos dado.

El funcionamiento del dendrograma se puede explicar mediante el siguiente diagrama:

Agrupación jerárquica en aprendizaje automático

En el diagrama anterior, la parte izquierda muestra cómo se crean los grupos en la agrupación aglomerativa y la parte derecha muestra el dendrograma correspondiente.

Java convierte una cadena a un número entero
  • Como hemos comentado anteriormente, en primer lugar, los puntos de datos P2 y P3 se combinan y forman un grupo, en consecuencia se crea un dendrograma que conecta P2 y P3 con una forma rectangular. La altura se decide según la distancia euclidiana entre los puntos de datos.
  • En el siguiente paso, P5 y P6 forman un grupo y se crea el dendrograma correspondiente. Es mayor que el anterior, ya que la distancia euclidiana entre P5 y P6 es un poco mayor que la de P2 y P3.
  • Nuevamente, se crean dos nuevos dendrogramas que combinan P1, P2 y P3 en un dendrograma, y ​​P4, P5 y P6 en otro dendrograma.
  • Por último, se crea el dendrograma final que combina todos los puntos de datos.

Podemos cortar la estructura del árbol del dendrograma en cualquier nivel según nuestros requisitos.

Implementación en Python de agrupación jerárquica aglomerativa

Ahora veremos la implementación práctica del algoritmo de agrupamiento jerárquico aglomerativo usando Python. Para implementar esto, usaremos el mismo problema de conjunto de datos que usamos en el tema anterior de agrupación de K-medias para que podamos comparar ambos conceptos fácilmente.

El conjunto de datos contiene información de clientes que han visitado un centro comercial para ir de compras. Entonces, el propietario del centro comercial quiere encontrar algunos patrones o algún comportamiento particular de sus clientes utilizando la información del conjunto de datos.

Pasos para la implementación de AHC usando Python:

Los pasos de implementación serán los mismos que los de la agrupación de k-medias, excepto por algunos cambios, como el método para encontrar el número de agrupaciones. A continuación se detallan los pasos:

    Preprocesamiento de datos Encontrar el número óptimo de conglomerados utilizando el dendrograma Entrenamiento del modelo de agrupamiento jerárquico Visualizando los clusters

Pasos de preprocesamiento de datos:

En este paso, importaremos las bibliotecas y los conjuntos de datos para nuestro modelo.

    Importando las bibliotecas
 # Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 

Las líneas de código anteriores se utilizan para importar las bibliotecas para realizar tareas específicas, como engordado para las operaciones matemáticas, matplotlib para dibujar los gráficos o el diagrama de dispersión, y pandas para importar el conjunto de datos.

    Importando el conjunto de datos
 # Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv') 

Como se discutió anteriormente, hemos importado el mismo conjunto de datos de Mall_Customers_data.csv, como hicimos en la agrupación de k-medias. Considere el siguiente resultado:

Agrupación jerárquica en aprendizaje automático
    Extrayendo la matriz de características.

Aquí extraeremos solo la matriz de características ya que no tenemos más información sobre la variable dependiente. El código se proporciona a continuación:

 x = dataset.iloc[:, [3, 4]].values 

Aquí hemos extraído solo 3 y 4 columnas ya que usaremos un gráfico 2D para ver los grupos. Por lo tanto, estamos considerando la puntuación de ingresos y gastos anuales como la matriz de características.

Paso 2: encontrar el número óptimo de grupos utilizando el dendrograma

Ahora encontraremos el número óptimo de clusters usando el Dendrograma para nuestro modelo. Para ello vamos a utilizar picante biblioteca ya que proporciona una función que devolverá directamente el dendrograma de nuestro código. Considere las siguientes líneas de código:

 #Finding the optimal number of clusters using the dendrogram import scipy.cluster.hierarchy as shc dendro = shc.dendrogram(shc.linkage(x, method='ward')) mtp.title('Dendrogrma Plot') mtp.ylabel('Euclidean Distances') mtp.xlabel('Customers') mtp.show() 

En las líneas de código anteriores, hemos importado el jerarquía módulo de la biblioteca scipy. Este módulo nos proporciona un método shc.denrograma(), que toma el enlace() como parámetro. La función de enlace se utiliza para definir la distancia entre dos grupos, por lo que aquí hemos pasado la x (matriz de características) y el método ' pabellón ,' el método popular de vinculación en agrupaciones jerárquicas.

Las líneas de código restantes sirven para describir las etiquetas del gráfico del dendrograma.

Producción:

hilo.destruir

Al ejecutar las líneas de código anteriores, obtendremos el siguiente resultado :

Agrupación jerárquica en aprendizaje automático

Usando este Dendrograma, ahora determinaremos el número óptimo de conglomerados para nuestro modelo. Para ello encontraremos el distancia vertical máxima que no corta ninguna barra horizontal. Considere el siguiente diagrama:

Agrupación jerárquica en aprendizaje automático

En el diagrama anterior, hemos mostrado las distancias verticales que no cortan sus barras horizontales. Como podemos visualizar, los 4thLa distancia parece máxima, por lo que de acuerdo con esto, el número de grupos será 5 (las líneas verticales en este rango). También podemos tomar el 2Dakota del Nortenúmero ya que es aproximadamente igual a 4thdistancia, pero consideraremos los 5 grupos porque son los mismos que calculamos en el algoritmo K-means.

Entonces, el número óptimo de clusters será 5 , y entrenaremos el modelo en el siguiente paso, usando el mismo.

Paso 3: entrenar el modelo de agrupamiento jerárquico

Como conocemos el número óptimo requerido de clústeres, ahora podemos entrenar nuestro modelo. El código se proporciona a continuación:

 #training the hierarchical model on dataset from sklearn.cluster import AgglomerativeClustering hc= AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward') y_pred= hc.fit_predict(x) 

En el código anterior, hemos importado el AglomerativoAgrupación clase de módulo de clúster de la biblioteca de aprendizaje scikit.

Luego hemos creado el objeto de esta clase llamado como hc. La clase AgglomerativeClustering toma los siguientes parámetros:

    n_clusters=5: Define el número de clusters, y aquí hemos tomado 5 porque es el número óptimo de clusters.afinidad = 'euclidiana': Es una métrica utilizada para calcular el vínculo.enlace = 'pupilo': Define los criterios de vinculación, aquí hemos utilizado la vinculación 'ward'. Este método es el método de vinculación popular que ya hemos utilizado para crear el Dendrograma. Reduce la varianza en cada grupo.

En la última línea, hemos creado la variable dependiente y_pred para ajustar o entrenar el modelo. No solo entrena el modelo sino que también devuelve los grupos a los que pertenece cada punto de datos.

Después de ejecutar las líneas de código anteriores, si pasamos por la opción del explorador de variables en nuestro IDE de Sypder, podemos verificar la variable y_pred. Podemos comparar el conjunto de datos original con la variable y_pred. Considere la siguiente imagen:

Agrupación jerárquica en aprendizaje automático

Como podemos ver en la imagen de arriba, el y_pred muestra el valor de los clústeres, lo que significa que la identificación del cliente 1 pertenece al 5thclúster (dado que la indexación comienza desde 0, entonces 4 significa 5thclúster), la identificación del cliente 2 pertenece a 4thclúster, etcétera.

Paso 4: Visualizar los clústeres

Como hemos entrenado nuestro modelo con éxito, ahora podemos visualizar los grupos correspondientes al conjunto de datos.

Aquí usaremos las mismas líneas de código que usamos en la agrupación de k-medias, excepto un cambio. Aquí no trazaremos el centroide que hicimos en k-medias, porque aquí hemos usado el dendrograma para determinar el número óptimo de conglomerados. El código se proporciona a continuación:

 #visulaizing the clusters mtp.scatter(x[y_pred == 0, 0], x[y_pred == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') mtp.scatter(x[y_pred == 1, 0], x[y_pred == 1, 1], s = 100, c = 'green', label = 'Cluster 2') mtp.scatter(x[y_pred== 2, 0], x[y_pred == 2, 1], s = 100, c = 'red', label = 'Cluster 3') mtp.scatter(x[y_pred == 3, 0], x[y_pred == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') mtp.scatter(x[y_pred == 4, 0], x[y_pred == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show() 

Salida: Al ejecutar las líneas de código anteriores, obtendremos el siguiente resultado:

Agrupación jerárquica en aprendizaje automático