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:
¿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:
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:
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:
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:
Pasos de preprocesamiento de datos:
En este paso, importaremos las bibliotecas y los conjuntos de datos para nuestro modelo.
# 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.
# 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:
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 :
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:
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:
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:
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: