Estoy tratando de usar el diagrama de silueta para determinar el número de clúster en mi conjunto de datos. Dado el conjunto de datos Train , utilicé el siguiente código matlab
Train_data = full(Train);
Result = [];
for num_of_cluster = 1:20
centroid = kmeans(Train_data,num_of_cluster,'distance','sqeuclid');
s = silhouette(Train_data,centroid,'sqeuclid');
Result = [ Result; num_of_cluster mean(s)];
end
plot( Result(:,1),Result(:,2),'r*-.');`
La gráfica resultante se da a continuación con xaxis como número de clúster y media yaxis del valor de la silueta .
¿Cómo interpreto este gráfico? ¿Cómo determino el número de clúster a partir de esto?
data-visualization
clustering
matlab
Aprendiz
fuente
fuente
Respuestas:
La respuesta de Sergey contiene el punto crítico, que es que el coeficiente de silueta cuantifica la calidad del agrupamiento logrado, por lo que debe seleccionar el número de grupos que maximiza el coeficiente de silueta.
La respuesta larga es que la mejor manera de evaluar los resultados de sus esfuerzos de agrupación es comenzar examinando realmente - inspección humana - los grupos formados y haciendo una determinación basada en la comprensión de lo que representan los datos, lo que representa un grupo, y lo que se pretende lograr con la agrupación.
Existen numerosos métodos cuantitativos para evaluar los resultados de la agrupación que deben usarse como herramientas, con plena comprensión de las limitaciones. Tienden a ser de naturaleza bastante intuitiva y, por lo tanto, tienen un atractivo natural (como los problemas de agrupamiento en general).
Ejemplos: masa / radio / densidad del grupo, cohesión o separación entre grupos, etc. Estos conceptos a menudo se combinan, por ejemplo, la relación de separación a cohesión debería ser grande si la agrupación fue exitosa.
La forma en que se mide la agrupación se informa por el tipo de algoritmos de agrupación utilizados. Por ejemplo, medir la calidad de un algoritmo de agrupación completo (en el que todos los puntos se colocan en grupos) puede ser muy diferente de la calidad de medición de un algoritmo de agrupación difusa basado en el umbral (en el que algún punto podría dejarse sin agrupar como 'ruido' )
El coeficiente de silueta es una de esas medidas. Funciona de la siguiente manera:
Para cada punto p, primero encuentre la distancia promedio entre p y todos los demás puntos en el mismo grupo (esta es una medida de cohesión, llámela A). Luego, encuentre la distancia promedio entre p y todos los puntos en el grupo más cercano (esto es una medida de separación del otro grupo más cercano, llámelo B). El coeficiente de silueta para p se define como la diferencia entre B y A dividido por el mayor de los dos (max (A, B)).
Evaluamos el coeficiente de agrupación de cada punto y a partir de esto podemos obtener el coeficiente de agrupación promedio 'general'.
Intuitivamente, estamos tratando de medir el espacio entre grupos. Si la cohesión del grupo es buena (A es pequeña) y la separación del grupo es buena (B es grande), el numerador será grande, etc.
He construido un ejemplo aquí para demostrar esto gráficamente.
En estas parcelas, los mismos datos se trazan cinco veces; los colores indican los grupos creados por k-significa agrupación, con k = 1,2,3,4,5. Es decir, forcé un algoritmo de agrupamiento para dividir los datos en 2 grupos, luego en 3, y así sucesivamente, y coloreé el gráfico en consecuencia.
El gráfico de silueta muestra que el coeficiente de silueta era más alto cuando k = 3, lo que sugiere que ese es el número óptimo de grupos. En este ejemplo, tenemos la suerte de poder visualizar los datos y podríamos estar de acuerdo en que, de hecho, tres grupos capturan mejor la segmentación de este conjunto de datos.
Si no pudiéramos visualizar los datos, quizás debido a una mayor dimensionalidad, una gráfica de silueta aún nos daría una sugerencia. Sin embargo, espero que mi respuesta algo interminable aquí también indique que esta "sugerencia" podría ser muy insuficiente o simplemente errónea en ciertos escenarios.
fuente
the average silhouette witdh "suggestion" could be very insufficient or just plain wrong in certain scenarios.
como usted dice.Eche un vistazo a la Caja de herramientas de la Plataforma de análisis de validez de clúster (CVAP) y algunos de los materiales (enlaces) de CVAP:
También puede verificar esta herramienta (simple) para estimar el número de clústeres
Solo eche un vistazo a los ejemplos de ambos juegos de herramientas (también puede usar otras técnicas de validación de clúster)
fuente
He estado investigando lo mismo hoy y encontré una interpretación aquí . Tiene sentido lógico, pero no estoy seguro de si podemos aplicar ciegamente la interpretación de nuestros conjuntos de datos. En resumen, lo que dice ese artículo es lo siguiente:
Sin embargo, parece que podemos usar el ancho de la silueta para detectar valores atípicos. En una tarea de agrupamiento de documentos que estoy manejando actualmente, los que tienen un ancho de silueta negativo son valores atípicos definidos (cuando se verifican de forma cruzada con su significado semántico). No estoy seguro de si este ancho mejorará después de eliminar los valores atípicos (nuevamente, esto tiene sentido lógico pero no lo he hecho yo mismo).
fuente
If you are trying to select the number of clusters for unsupervised learning then maybe you could try doing something like-
http://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_silhouette_analysis.html
They use more than just the silhouette score mean (they use the distribution) but it makes sense. It seems to prefer smaller clusters but maybe you could try this with some generated data and see if works?
Alternatively, you can check this paper-
http://www.sciencedirect.com/science/article/pii/0377042787901257
fuente