Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

-Medios clusteringk

En este tema se proporciona una introducción a la agrupación en clústeres -means y un ejemplo que usa la función para buscar la mejor solución de agrupación en clústeres para un conjunto de datos.kStatistics and Machine Learning Toolbox™kmeans

Introducción a -Means Clusteringk

-means clustering es un método de particionamiento.k La función particiona los datos en clústeres mutuamente exclusivos y devuelve el índice del clúster al que asigna cada observación. trata cada observación en los datos como un objeto que tiene una ubicación en el espacio.kmeanskkmeans La función busca una partición en la que los objetos de cada clúster están lo más cerca posible entre sí y lo más lejos posible de los objetos de otros clústeres. Puede elegir con el que utilizar en función de los atributos de los datos.métrica de distanciakmeans Al igual que muchos métodos de agrupación en clústeres, -means clustering requiere que especifique el número de clústeres antes de la agrupación en clústeres.kk

A diferencia de la agrupación jerárquica, -means clustering funciona en observaciones reales en lugar de la diferencia entre cada par de observaciones en los datos.k Además, -means clustering crea un único nivel de clústeres, en lugar de una jerarquía multinivel de clústeres.k Por lo tanto, -means clustering suele ser más adecuado que la agrupación jerárquica para grandes cantidades de datos.k

Cada clúster de una partición -means consta de objetos miembro y un centroide (o centro).k En cada clúster, minimiza la suma de las distancias entre el centroide y todos los objetos miembro del clúster. calcula los clústeres centroides de forma diferente para las métricas de distancia admitidas.kmeanskmeans Para obtener más información, consulte .'Distance'

Puede controlar los detalles de la minimización utilizando argumentos de par nombre-valor disponibles para ; por ejemplo, puede especificar los valores iniciales de los centroides del clúster y el número máximo de iteraciones para el algoritmo.kmeans De forma predeterminada, utiliza elkmeans -means++ algoritmok para inicializar los centroides del clúster y la métrica de distancia euclidiana cuadrada para determinar las distancias.

Al realizar la agrupación en clústeres -means, siga estas prácticas recomendadas:k

  • Comparar -significa soluciones de agrupación en clústeres para diferentes valores de determinar un número óptimo de clústeres para los datos.kk

  • Evalúe las soluciones de agrupación en clústeres examinando las gráficas de silueta y los valores de silueta. También puede utilizar la función para evaluar soluciones de agrupación en clústeres en función de criterios como valores de separación, valores de silueta, valores de índice Davies-Bouldin y valores de índice Calinski-Harabasz.evalclusters

  • Replicar la agrupación en clústeres de diferentes centroides seleccionados aleatoriamente y devolver la solución con la suma total más baja de distancias entre todas las réplicas.

Comparar -Significa soluciones de clusteringk

En este ejemplo se explora la agrupación en clústeres de un conjunto de datos de cuatro dimensiones.k En el ejemplo se muestra cómo determinar el número correcto de clústeres para el conjunto de datos mediante el uso de trazados y valores de silueta para analizar los resultados de diferentes soluciones de agrupación en clústeres de medios.k En el ejemplo también se muestra cómo utilizar el argumento de par nombre-valor para probar un número especificado de soluciones posibles y devolver el que tiene la suma total más baja de distancias.'Replicates'

Conjunto de datos de carga

Cargue el conjunto de datos.kmeansdata

rng('default')  % For reproducibility load('kmeansdata.mat') size(X)
ans = 1×2

   560     4

El conjunto de datos es de cuatro dimensiones y no se puede visualizar fácilmente. Sin embargo, le permite investigar si existe una estructura de grupo en los datos.kmeans

Crear clústeres y examinar la separación

Particione el conjunto de datos en tres clústeres mediante la agrupación en clústeres -means.k Especifique la métrica de distancia de bloque de ciudad y utilice el algoritmo -means++ predeterminado para la inicialización del centro de clúster.k Utilice el argumento par nombre-valor para imprimir la suma final de distancias para la solución.'Display'

[idx3,C,sumdist3] = kmeans(X,3,'Distance','cityblock','Display','final');
Replicate 1, 7 iterations, total sum of distances = 2459.98. Best total sum of distances = 2459.98 

contiene índices de clúster que indican la asignación de clúster para cada fila de .idx3X Para ver si los clústeres resultantes están bien separados, puede crear un trazado de silueta.

Un trazado de silueta muestra una medida de lo cerca que está cada punto de un clúster de los puntos de los clústeres vecinos. Esta medida oscila entre 1 (indicando puntos que están muy distantes de los clústeres vecinos) y 0 (puntos que no están claramente en un clúster u otro) a –1 (puntos que probablemente se asignan al clúster incorrecto). devuelve estos valores en su primera salida.silhouette

Cree un trazado de silueta a partir de .idx3 Especifique para que la métrica de distancia indique que la agrupación en clústeres -means se basa en la suma de las diferencias absolutas.'cityblock'k

[silh3,h] = silhouette(X,idx3,'cityblock'); xlabel('Silhouette Value') ylabel('Cluster')

El trazado de silueta muestra que la mayoría de los puntos del segundo clúster tienen un valor de silueta grande (mayor que 0,6), lo que indica que el clúster está algo separado de los clústeres vecinos. Sin embargo, el tercer clúster contiene muchos puntos con valores de silueta bajos, y el primer y el tercer clúster contienen algunos puntos con valores negativos, lo que indica que estos dos clústeres no están bien separados.

Para ver si se puede encontrar una mejor agrupación de los datos, aumente el número de clústeres a cuatro.kmeans Imprima información sobre cada iteración mediante el argumento de par nombre-valor.'Display'

idx4 = kmeans(X,4,'Distance','cityblock','Display','iter');
  iter  phase      num          sum      1      1      560      1792.72      2      1        6       1771.1 Best total sum of distances = 1771.1 

Cree un trazado de silueta para los cuatro clústeres.

[silh4,h] = silhouette(X,idx4,'cityblock'); xlabel('Silhouette Value') ylabel('Cluster')

La gráfica de silueta indica que estos cuatro clústeres están mejor separados que los tres clústeres de la solución anterior. Puede adoptar un enfoque más cuantitativo para comparar las dos soluciones calculando los valores de silueta promedio para los dos casos.

Calcular los valores medios de silueta.

cluster3 = mean(silh3)
cluster3 = 0.5352 
cluster4 = mean(silh4)
cluster4 = 0.6400 

El valor medio de la silueta de los cuatro clústeres es mayor que el valor medio de los tres clústeres. Estos valores apoyan la conclusión representada en las gráficas de silueta.

Por último, busque cinco clústeres en los datos. Cree un trazado de silueta y calcule los valores de silueta promedio para los cinco clústeres.

idx5 = kmeans(X,5,'Distance','cityblock','Display','final');
Replicate 1, 7 iterations, total sum of distances = 1647.26. Best total sum of distances = 1647.26 
[silh5,h] = silhouette(X,idx5,'cityblock'); xlabel('Silhouette Value') ylabel('Cluster')

mean(silh5)
ans = 0.5721 

La gráfica de silueta indica que cinco probablemente no es el número correcto de clústeres, porque dos clústeres contienen puntos con valores de silueta en su mayoría bajos, y el quinto clúster contiene algunos puntos con valores negativos. Además, el valor medio de la silueta de los cinco clústeres es inferior al valor de los cuatro clústeres. Sin saber cuántos clústeres hay en los datos, es una buena idea experimentar con un rango de valores para , el número de clústeres.k

Tenga en cuenta que la suma de distancias disminuye a medida que aumenta el número de clústeres. Por ejemplo, la suma de distancias disminuye de a a medida que el número de clústeres aumenta de 3 a 4 a 5.2459.981771.11647.26 Por lo tanto, la suma de distancias no es útil para determinar el número óptimo de clústeres.

Evitar Minima Local

De forma predeterminada, comienza el proceso de agrupación en clústeres mediante un conjunto seleccionado aleatoriamente de ubicaciones centroides iniciales.kmeans El algoritmo puede converger a una solución que es un mínimo local (no global); es decir, puede particionar los datos de modo que mover cualquier punto a un clúster diferente aumente la suma total de distancias.kmeanskmeans Sin embargo, al igual que con muchos otros tipos de minimizaciones numéricas, la solución que llega a veces depende de los puntos de partida.kmeans Por lo tanto, pueden existir otras soluciones (mínimo local) que tienen sumas totales más bajas de distancias para los datos. Puede usar el argumento de par nombre-valor para probar diferentes soluciones.'Replicates' Cuando se especifica más de una réplica, se repite el proceso de agrupación en clústeres a partir de diferentes centroides seleccionados aleatoriamente para cada réplica y devuelve la solución con la suma total más baja de distancias entre todas las réplicas.kmeans

Busque cuatro clústeres en los datos y replique la agrupación en clústeres cinco veces. Además, especifique la métrica de distancia de bloque de ciudad y utilice el argumento de par nombre-valor para imprimir la suma final de distancias para cada solución.'Display'

[idx4,cent4,sumdist] = kmeans(X,4,'Distance','cityblock', ...                        'Display','final','Replicates',5);               
Replicate 1, 2 iterations, total sum of distances = 1771.1. Replicate 2, 3 iterations, total sum of distances = 1771.1. Replicate 3, 3 iterations, total sum of distances = 1771.1. Replicate 4, 6 iterations, total sum of distances = 2300.23. Replicate 5, 2 iterations, total sum of distances = 1771.1. Best total sum of distances = 1771.1 

En la réplica 4, encuentra un mínimo local.kmeans Dado que cada réplica comienza desde un conjunto diferente seleccionado aleatoriamente de centroides iniciales, a veces encuentra más de un mínimo local.kmeans Sin embargo, la solución final que devuelve es la que tiene la suma total más baja de distancias en todas las réplicas.kmeans

Busque el total de las sumas dentro del clúster de distancias punto a centroide para la solución final devuelta por .kmeans

sum(sumdist)
ans = 1.7711e+03 

Consulte también

|

Temas relacionados