Contenido de este artículo
- 0.1 ¿Qué es la agrupación jerárquica?
- 0.2 Agrupación jerárquica en R
- 0.3 Paso 1: cargue los paquetes necesarios
- 0.4 Paso 2: Cargue y prepare los datos
- 0.5 Paso 3: busque el método de vinculación que desee utilizar
- 0.6 Paso 4: Determine la cantidad óptima de clústeres
- 0.7 Paso 5: aplique etiquetas de clúster al conjunto de datos original
- 1 Redactor del artículo
- 2 ¿Te hemos ayudado?
- 0
- 0
- 0
- 0
El agrupamiento es una técnica en el aprendizaje automático que intenta encontrar grupos o grupos de observaciones dentro de un conjunto de datos de manera que las observaciones dentro de cada grupo sean bastante similares entre sí, mientras que las observaciones en diferentes grupos son bastante diferentes entre sí.
La agrupación es una forma de aprendizaje no supervisado porque simplemente intentamos encontrar una estructura dentro de un conjunto de datos en lugar de predecir el valor de alguna variable de respuesta .
La agrupación en clústeres se utiliza a menudo en marketing cuando las empresas tienen acceso a información como:
- Ingresos del hogar
- Tamaño del hogar
- Ocupación del jefe de hogar
- Distancia del área urbana más cercana
Cuando esta información está disponible, la agrupación se puede utilizar para identificar hogares que son similares y pueden tener más probabilidades de comprar ciertos productos o responder mejor a cierto tipo de publicidad.
Una de las formas más comunes de agrupación en clústeres se conoce como agrupación de k-medias . Por desgracia, este método requiere que pre-especificar el número de agrupaciones K .
Una alternativa a este método se conoce como agrupación jerárquica , que no requiere que pre-especifiquemos el número de agrupaciones que se utilizarán y también puede producir una representación basada en árboles de las observaciones conocida como dendrograma .
¿Qué es la agrupación jerárquica?
Similar al agrupamiento de k-medias, el objetivo del agrupamiento jerárquico es producir grupos de observaciones que sean bastante similares entre sí, mientras que las observaciones en diferentes grupos son bastante diferentes entre sí.
En la práctica, utilizamos los siguientes pasos para realizar agrupaciones jerárquicas:
1. Calcule la disimilitud por pares entre cada observación en el conjunto de datos.
- Primero, debemos elegir alguna métrica de distancia, como la distancia euclidiana , y usar esta métrica para calcular la diferencia entre cada observación en el conjunto de datos.
- Para un conjunto de datos con n observaciones, habrá un total de n ( n -1) / 2 disimilitudes por pares.
2. Fusionar las observaciones en grupos.
- En cada paso del algoritmo, fusione las dos observaciones más similares en un solo grupo.
- Repita este procedimiento hasta que todas las observaciones sean miembros de un grupo grande. El resultado final es un árbol, que se puede trazar como un dendrograma .
Para determinar qué tan cerca están dos grupos, podemos usar algunos métodos diferentes, que incluyen:
- Agrupación de enlaces completa: encuentre la distancia máxima entre los puntos que pertenecen a dos agrupaciones diferentes.
- Agrupación de enlace único: encuentre la distancia mínima entre puntos que pertenecen a dos agrupaciones diferentes.
- Agrupación de enlace media: Encuentre todas las distancias por pares entre puntos que pertenecen a dos conglomerados diferentes y luego calcule el promedio.
- Agrupación de enlaces de centroides: encuentre el centroide de cada grupo y calcule la distancia entre los centroides de dos grupos diferentes.
- Método de variación mínima de Ward: Minimizar el total
Dependiendo de la estructura del conjunto de datos, uno de estos métodos puede tender a producir agrupaciones mejores (es decir, más compactas) que los otros métodos.
Agrupación jerárquica en R
El siguiente tutorial proporciona un ejemplo paso a paso de cómo realizar agrupaciones jerárquicas en R.
Paso 1: cargue los paquetes necesarios
Primero, cargaremos dos paquetes que contienen varias funciones útiles para la agrupación jerárquica en R.
biblioteca (factoextra) biblioteca (clúster)
Paso 2: Cargue y prepare los datos
Para este ejemplo, usaremos el conjunto de datos USArrests integrado en R, que contiene el número de arrestos por cada 100,000 residentes en cada estado de EE. UU. En 1973 por asesinato , asalto y violación junto con el porcentaje de la población en cada estado que vive en áreas urbanas. , UrbanPop .
El siguiente código muestra cómo hacer lo siguiente:
- Cargar el conjunto de datos de USArrests
- Elimina las filas con valores faltantes
- Escale cada variable en el conjunto de datos para tener una media de 0 y una desviación estándar de 1
#Cargar datos df <- USArrests # eliminar filas con valores perdidos df <- na. Omitir (df) #escala cada variable para que tenga una media de 0 y una df de 1 df <- scale (df) #ver las primeras seis filas del conjunto de datos cabeza (df) Asesinato Asalto UrbanPop Violación Alabama 1,24256408 0,7828393 -0,5209066 -0,003416473 Alaska 0.50786248 1.1068225 -1.2117642 2.484202941 Arizona 0.07163341 1.4788032 0.9989801 1.042878388 Arkansas 0,23234938 0,2308680 -1,0735927 -0,184916602 California 0.27826823 1.2628144 1.7589234 2.067820292 Colorado 0,02571456 0,3988593 0,8608085 1,864967207
Paso 3: busque el método de vinculación que desee utilizar
Para realizar un agrupamiento jerárquico en R, podemos usar la función agnes () del paquete de clúster , que usa la siguiente sintaxis:
agnes (datos, método)
dónde:
- data: Nombre del conjunto de datos.
- método: el método que se utilizará para calcular la diferencia entre conglomerados.
Dado que no sabemos de antemano qué método producirá los mejores clústeres, podemos escribir una función corta para realizar un clúster jerárquico utilizando varios métodos diferentes.
Tenga en cuenta que esta función calcula el coeficiente de aglomeración de cada método, que es una métrica que mide la fuerza de los conglomerados. Cuanto más cerca esté este valor de 1, más fuertes serán los grupos.
#definir métodos de vinculación m <- c ("promedio", "único", "completo", "barrio") nombres (m) <- c ("promedio", "soltero", "completo", "barrio") # función para calcular el coeficiente de aglomeración ac <- función (x) { agnes (gl, método = x) $ ac } #calcular el coeficiente de aglomeración para cada método de enlace de agrupamiento sapply (m, ac) promedio de una sala completa 0,7379371 0,6276128 0,8531583 0,9346210
Podemos ver que el método de varianza mínima de Ward produce el coeficiente de aglomeración más alto, por lo que lo usaremos como método para nuestro agrupamiento jerárquico final:
# realizar agrupaciones jerárquicas utilizando la agrupación de varianza mínima de Ward <- agnes (df, method = " ward ") #produce dendrogram pltree (clust, cex = 0.6, hang = -1, main = " Dendrogram ")
Cada hoja en la parte inferior del dendrograma representa una observación en el conjunto de datos original. A medida que avanzamos por el dendrograma desde la parte inferior, las observaciones que son similares entre sí se fusionan en una rama.
Paso 4: Determine la cantidad óptima de clústeres
Para determinar en cuántos conglomerados se deben agrupar las observaciones, podemos usar una métrica conocida como estadística de brecha , que compara la variación intragrupo total para diferentes valores de k con sus valores esperados para una distribución sin conglomerados.
Podemos calcular la estadística de brechas para cada número de clústeres usando la función clusGap () del paquete de clústeres junto con un gráfico de clústeres frente a la estadística de brechas usando la función fviz_gap_stat () :
#calcular la estadística de brecha para cada número de conglomerados (hasta 10 conglomerados) gap_stat <- clusGap (df, FUN = hcut, nstart = 25, K.max = 10, B = 50) #producir gráfico de conglomerados frente a la estadística de brechas fviz_gap_stat (gap_stat)
En el gráfico podemos ver que la estadística de brecha es más alta en k = 4 conglomerados. Por lo tanto, elegiremos agrupar nuestras observaciones en 4 grupos distintos.
Paso 5: aplique etiquetas de clúster al conjunto de datos original
Para agregar etiquetas de grupo a cada observación en nuestro conjunto de datos, podemos usar el método cutree () para cortar el dendrograma en 4 grupos:
#calcular matriz de distancias d <- dist (df, method = " euclidiana ") # realizar agrupaciones jerárquicas utilizando el método de Ward final_clust <- hclust (d, method = " ward.D2 ") #corte el dendrograma en 4 grupos de clusters <- cutree (final_clust, k = 4) # encontrar el número de observaciones en cada tabla de conglomerados (grupos) 1 2 3 4 7 12 19 12
Luego, podemos agregar las etiquetas de clúster de cada estado al conjunto de datos original:
#anexar etiquetas de clúster a los datos originales final_data <- cbind (USArrests, cluster = groups) #muestra las primeras seis filas de los datos finales head (final_data) Asesinato Asalto UrbanPop Rape Cluster Alabama 13,2 236 58 21,2 1 Alaska 10,0 263 48 44,5 2 Arizona 8.1 294 80 31.0 2 Arkansas 8,8 190 50 19,5 3 California 9,0 276 91 40,6 2 Colorado 7,9 204 78 38,7 2
Por último, podemos usar la función aggregate () para encontrar la media de las variables en cada grupo:
# encontrar valores medios para cada grupo agregado (final_data, by = list (cluster = final_data $ cluster), mean) cluster Murder Assault UrbanPop Rape cluster 1 1 14.671429 251.2857 54.28571 21.68571 1 2 2 10.966667 264.0000 76.50000 33.60833 2 3 3 6.210526 142.0526 71.26316 19.18421 3 4 4 3.091667 76.0000 52.08333 11.83333 4
Interpretamos que esta salida es la siguiente:
- El número medio de asesinatos por cada 100.000 ciudadanos entre los estados del grupo 1 es 14,67 .
- El número medio de agresiones por cada 100.000 ciudadanos entre los estados del grupo 1 es 251,28 .
- El porcentaje medio de residentes que viven en un área urbana entre los estados del conglomerado 1 es 54,28% .
- El número medio de violaciones por cada 100.000 ciudadanos entre los estados del grupo 1 es 21,68 .
Puede encontrar el código R completo utilizado en este ejemplo aquí .
- https://r-project.org
- https://www.python.org/
- https://www.stata.com/
¿Te hemos ayudado?
Ayudanos ahora tú, dejanos un comentario de agradecimiento, nos ayuda a motivarnos y si te es viable puedes hacer una donación:La ayuda no cuesta nada
Por otro lado te rogamos que compartas nuestro sitio con tus amigos, compañeros de clase y colegas, la educación de calidad y gratuita debe ser difundida, recuerdalo: