K significa agrupamiento en R: tutorial paso a paso con ejemplo
Publicado: 2020-02-17Como científico de datos, realizará muchos agrupamientos. Hay muchos tipos de algoritmos de agrupamiento disponibles, y debe estar bien versado en el uso de todos ellos. En este artículo, analizaremos un popular algoritmo de agrupamiento, K-means, y veremos cómo se usa en R.
Descubrirá la teoría básica detrás de la agrupación de medios K en R y cómo se usa. También hemos discutido un ejemplo práctico más adelante en el artículo. Asegúrese de marcar este artículo para referencia futura. Obtenga más información sobre el análisis de conglomerados en minería de datos.
Antes de comenzar a discutir K significa agrupar en R, debemos echar un vistazo a los tipos de algoritmos de agrupamiento que están presentes para que pueda comprender mejor cómo los trata este algoritmo.
Leer: Las mejores bibliotecas R en ciencia de datos
Tabla de contenido
Tipos de agrupamiento
Cuando agrupa varios objetos de tal manera que los objetos que son más similares entre sí están en un grupo cercano, se llama agrupación. La distancia entre los objetos podría ser relevante para su similitud. La similitud muestra la fuerza de la relación entre dos objetos distintos en la ciencia de datos. La agrupación en clústeres es una técnica popular de minería de datos. La agrupación en clúster encuentra sus aplicaciones en numerosas industrias y áreas, incluido el análisis de imágenes, el aprendizaje automático, la compresión de datos, el reconocimiento de patrones y muchas otras.
La agrupación en clústeres es de dos tipos: dura y blanda. Vamos a discutir cada uno de ellos brevemente.
- En un clúster duro, un punto de datos pertenecería totalmente a un clúster o no le pertenecería en absoluto. No hay término medio.
- En un clúster suave, un objeto de datos podría estar relacionado con más de un clúster a la vez debido a alguna posibilidad o probabilidad.
Aprenda el curso de ciencia de datos en línea de las mejores universidades del mundo. Obtenga programas Executive PG, programas de certificados avanzados o programas de maestría para acelerar su carrera.
Tipos de algoritmos de agrupamiento
Al igual que existen diferentes tipos de clústeres, también existen diferentes tipos de algoritmos de agrupamiento. Puede diferenciar los algoritmos en función de su modelo de clúster. Esto significa que puede distinguirlos en función de cómo forman grupos. Si empezáramos a hablar de todo tipo de algoritmos de agrupamiento, esta guía se volvería demasiado larga y se alejaría del punto principal. Por lo tanto, solo analizaremos algunos tipos destacados de algoritmos de agrupamiento. Hay algoritmos de agrupamiento basados en la conectividad, en el centroide, en la densidad y en la distribución.
Concepto básico de K-Means
El concepto básico de K-means es bastante simple. K-means está relacionado con la definición de los conglomerados de modo que la variación total dentro del conglomerado sea la mínima posible. Hay una variedad de algoritmos de k-medias. El algoritmo de k-medias más común es el algoritmo de Hartigan-Wong, que establece que la variación total dentro del grupo es igual a la suma de las distancias al cuadrado de las distancias euclidianas entre los centroides y sus elementos:
W( C k )= X yo C k ( X yo – k ) 2
Aquí x i se refiere a un punto de datos que pertenece al grupo C k y k se refiere al valor medio de los puntos de datos presentes en el grupo Ck.
El valor de x i debería ser tal que la suma de la distancia al cuadrado entre x i y k sea el mínimo.
¿Qué es el algoritmo de K-medias?
Para usar el algoritmo, primero tendremos que indicar el número de grupos, K, que estarán presentes en nuestro resultado. El algoritmo primero selecciona K objetos aleatoriamente para que actúen como centros de conglomerados iniciales. A esos objetos los llamamos centroides de conglomerados o medios. Luego asignamos los objetos restantes a sus centroides más cercanos. La distancia euclidiana entre los centroides del clúster y los objetos determina qué tan cerca están.
Después de haber asignado los objetos a sus respectivos centroides, el algoritmo calcula el valor medio de los conglomerados. Después de este nuevo cálculo, volvemos a verificar las observaciones para ver si podrían estar más cerca de un grupo diferente. Luego, reasignamos los objetos a los centroides en consecuencia. Seguimos repitiendo estos pasos hasta que se detenga la asignación de clústeres. Esto significa que dejamos de repetir las iteraciones cuando los grupos formados en una iteración son los mismos que en la iteración anterior.
Uso de la agrupación en clústeres de K-Means (ejemplo)
Ahora que sabe qué es el algoritmo K-means en R y cómo funciona, analicemos un ejemplo para una mejor aclaración. En este ejemplo, agruparemos a los clientes de una organización utilizando la base de datos de clientes mayoristas. Los datos para este problema están disponibles en el repositorio de aprendizaje automático de Berkley UCI. Puedes comprobarlo aquí .
Primero, leeremos los datos. Y luego obtener un resumen de la misma. Después de leer los datos y ver su resumen, verá que existen algunas diferencias marcadas entre los principales consumidores en diferentes categorías. Encontrará algunos valores atípicos, que no podrá eliminar fácilmente con la normalización (o el escalado). Con estos datos, una empresa querría ver qué compran sus clientes de gama media la mayor parte del tiempo. Eso es porque una empresa tendría una idea decente de lo que compran sus principales clientes.
Para crear un grupo de clientes de nivel medio, primero debemos deshacernos de la capa superior de clientes de cada categoría. Así que eliminaremos los 5 mejores y crearemos un nuevo conjunto. Así es como lo haremos:
top.n.custs <- function (data,cols,n=5) { #Requiere un marco de datos y la N superior para eliminar
idx.to.remove <-integer(0) #Inicialice un vector para retener a los clientes que se están eliminando
for (c in cols){ # Para cada columna en los datos que pasamos a esta función
col.order <-order(data[,c],decreasing=T) #Ordenar la columna “c” en orden descendente (más grande en la parte superior)
#Order devuelve el índice ordenado (por ejemplo, la fila 15, 3, 7, 1, ...) en lugar de los valores reales ordenados.
idx <-head(col.order, n) #Toma la primera n de la columna ordenada C para
idx.to.remove <-union(idx.to.remove,idx) #Combine y elimine los duplicados de los ID de fila que deben eliminarse
}
return(idx.to.remove) #Devuelve los índices de los clientes que se eliminarán
}
top.clientes <-top.n.clientes(datos,columnas=3:8,n=5)
length(top.custs) #¿Cuántos clientes se necesitan eliminar?
data[top.custs,] #Examine los clientes disponibles

data.rm.top<-data[-c(top.custs),] #Eliminar los Clientes requeridos
Con este nuevo archivo, podemos comenzar a trabajar en nuestro análisis de conglomerados. Para realizar el análisis de conglomerados, utilizaremos el siguiente código:
set.seed(76964057) #Establecer la semilla para la reproducibilidad
k <-kmeans(data.rm.top[,-c(1,2)], centers=5) #Crear 5 clústeres, eliminar las columnas 1 y 2
k$centers #Mostrar centros de clúster
table(k$cluster) #Dar el conteo de puntos de datos en cada cluster
Cuando haya ejecutado este código en la base de datos dada, obtendrá estos resultados:
- El primer grupo tendría detergentes de alta calidad pero la baja cantidad de productos alimenticios frescos
- El tercer grupo tendría más producto fresco
Deberá usar withinss y betweenss para obtener una interpretación detallada de los resultados. k$withinss es igual a la suma del cuadrado de la distancia entre cada objeto de datos desde el centro del grupo. Cuanto menor sea el rango, mejor será el resultado. Si la medida de insidess es alta en sus datos, significa que hay muchos valores atípicos presentes y necesita realizar una limpieza de datos. k$entress es la suma del cuadrado de la distancia entre los diferentes centros de los grupos. La distancia entre los centros de los clústeres debe ser lo más alta posible.
Leer: 6 estructuras de datos más utilizadas en R
Debe tomar la ayuda de prueba y error para obtener los resultados más precisos. Para hacerlo, deberá probar varios valores para K. Cuando el gráfico de sus resultados no muestra un incremento en el interior de sus grupos, ese punto sería el valor más adecuado para K. Puede encontrar el valor de K a través del siguiente código:
rng<-2:20 #K del 2 al 20
intenta <-100 #Ejecuta el algoritmo K Means 100 veces
avg.totw.ss <-integer(length(rng)) #Establecer un vector vacío para contener todos los puntos
for(v in rng){ # Para cada valor de la variable de rango
v.totw.ss <-integer(tries) #Configurar un vector vacío para contener los 100 intentos
para(yo en 1:intentos){
k.temp <-kmeans(data.rm.top,centers=v) #Ejecutar kmeans
v.totw.ss[i] <-k.temp$tot.withinss#Almacenar el total withinss
}
avg.totw.ss[v-1] <-mean(v.totw.ss) #Promedio de los 100 totales dentro
}
plot(rng,avg.totw.ss,type=”b”, main=”Total dentro de SS por varios K”,
ylab=”Total promedio dentro de la suma de los cuadrados”,
xlab=”Valor de K”)
Eso es todo. Ahora puede usar el gráfico que obtiene de este código para obtener el mejor valor de K y usarlo para obtener los resultados requeridos. Use este ejemplo para probar su conocimiento de la agrupación en clústeres de K-means en R. Aquí está todo el código que hemos usado en el ejemplo:
data <-read.csv(“Datos de clientes mayoristas.csv”,header=T)
resumen (datos)
top.n.custs <- function (data,cols,n=5) { #Requiere un marco de datos y la N superior para eliminar
idx.to.remove <-integer(0) #Inicialice un vector para retener a los clientes que se están eliminando
for (c in cols){ # Para cada columna en los datos que pasamos a esta función
col.order <-order(data[,c],decreasing=T) #Ordenar la columna “c” en orden descendente (más grande en la parte superior)
#Order devuelve el índice ordenado (por ejemplo, la fila 15, 3, 7, 1, ...) en lugar de los valores reales ordenados.
idx <-head(col.order, n) #Toma la primera n de la columna ordenada C para
idx.to.remove <-union(idx.to.remove,idx) #Combine y elimine los duplicados de los ID de fila que deben eliminarse
}
return(idx.to.remove) #Devuelve los índices de los clientes que se eliminarán
}
top.clientes <-top.n.clientes(datos,columnas=3:8,n=5)
length(top.custs) #¿Cuántos clientes se eliminarán?
data[top.clientes,] #Examinar a los clientes
data.rm.top <-data[-c(top.custs),] #Eliminar los clientes
set.seed(76964057) #Establecer la semilla para la reproducibilidad
k <-kmeans(data.rm.top[,-c(1,2)], centers=5) #Crear 5 clústeres, eliminar las columnas 1 y 2
k$centers #Mostrar centros de clústeres
table(k$cluster) #Dar un conteo de puntos de datos en cada grupo
rng<-2:20 #K del 2 al 20
intentos<-100 #Ejecutar el algoritmo K Means 100 veces
avg.totw.ss<-integer(length(rng)) #Establecer un vector vacío para contener todos los puntos
for(v in rng){ # Para cada valor de la variable de rango
v.totw.ss<-integer(tries) #Configurar un vector vacío para contener los 100 intentos
para(yo en 1:intentos){
k.temp<-kmeans(data.rm.top,centers=v) #Ejecutar kmeans
v.totw.ss[i]<-k.temp$tot.withinss#Almacenar el total withinss
}
avg.totw.ss[v-1]<-mean(v.totw.ss) #Promedio de los 100 totales dentro
}
plot(rng,avg.totw.ss,type=”b”, main=”Total dentro de SS por varios K”,
ylab=”Total promedio dentro de la suma de los cuadrados”,
xlab=”Valor de K”)
Conclusión
Esperamos que te haya gustado esta guía. Hemos tratado de mantenerlo conciso y completo. Si tiene alguna pregunta sobre el algoritmo K-means, no dude en consultarnos. Nos encantaría responder a sus consultas.
Si tiene curiosidad por aprender sobre ciencia de datos, consulte el Programa ejecutivo PG en ciencia de datos de IIIT-B y upGrad, creado para profesionales que trabajan y ofrece más de 10 estudios de casos y proyectos, talleres prácticos, tutoría con expertos de la industria, 1 -on-1 con mentores de la industria, más de 400 horas de aprendizaje y asistencia laboral con las mejores empresas.
¿Cuáles son algunas de las desventajas de usar K-means?
Los valores atípicos pueden extraer centroides, o los valores atípicos pueden recibir su propio grupo en lugar de ignorarlos. Como K-means es estocástico, no puede garantizar que se encontrará la solución de agrupación óptima global. En realidad, los valores atípicos y los datos ruidosos pueden hacer que el algoritmo sea muy sensible. Antes de agrupar, considere eliminar o eliminar los valores atípicos. Al agrupar datos con tamaños y densidades variables, K-means tiene dificultades. Debe generalizar K-medias para agrupar dichos datos. Incluso si pertenecen claramente al mismo grupo, el algoritmo k-means no permite que los puntos de datos que están muy separados compartan el mismo grupo.
¿Qué es el método del codo en K-means?
El método k-means depende en gran medida de encontrar el número adecuado de conglomerados. El enfoque del codo es un método ampliamente utilizado para determinar el mejor valor de K. La técnica del codo realiza un agrupamiento de medias K en el conjunto de datos para un rango de valores K en el gráfico y luego calcula una puntuación promedio para todos los grupos para cada valor de K. La puntuación de distorsión, que es la suma de las distancias al cuadrado desde cada punto a su centro asignado, se calcula por defecto. Otros modelos basados en datos, como el número de componentes principales para caracterizar un conjunto de datos, pueden utilizar la misma técnica para determinar el número de parámetros.
¿Cómo podemos encontrar valores atípicos en K-means?
Los valores atípicos en el agrupamiento de K-Means se pueden descubrir usando una técnica basada en la distancia y una basada en el agrupamiento. Los valores atípicos se descubren mediante dendrogramas en el caso de la agrupación jerárquica. El objetivo del proyecto es descubrir y eliminar los valores atípicos para que la agrupación sea más precisa. Los datos se dividen en K grupos asignándolos a los centros de conglomerados más cercanos en el enfoque de identificación de valores atípicos basado en K-medias. Entonces podemos calcular la distancia o la disimilitud entre cada elemento y su centro de conglomerado, y elegir los valores atípicos con las distancias más grandes. Debido a que los valores extremos pueden afectar rápidamente una media, el método de agrupación en clústeres de K-medias es sensible a los valores atípicos.