He encontrado una extensa literatura que propone todo tipo de criterios (por ejemplo, Glenn et al. 1985 (pdf) y Jung et al. 2002 (pdf)). Sin embargo, la mayoría de estos no son tan fáciles de implementar (al menos desde mi perspectiva). Estoy usando scipy.cluster.hierarchy para obtener una jerarquía de clústeres, y ahora estoy tratando de decidir cómo formar grupos planos a partir de eso. Mi objetivo es descubrir patrones comunes en mis observaciones, por lo que no tengo referencia para comparar el agrupamiento obtenido. ¿Alguien puede sugerir una solución pragmática?
clustering
Björn Pollex
fuente
fuente
Respuestas:
La siguiente entrada de Wikipedia en realidad hace un trabajo bastante bueno al explicar los métodos más populares y relativamente simples:
El método de codo heurístico descrito allí es probablemente el más popular debido a su explicación simple (cantidad de variación explicada por el número de grupos) junto con la verificación visual. El método teórico de información tampoco es difícil de implementar y la página tiene un pseudocódigo que podría usar para comenzar. Este último es análogo a una probabilidad penalizada basada en la complejidad del modelo como en los criterios de información bien conocidos como AIC, BIC, etc.
fuente
Es bastante difícil proporcionar una solución clara sobre cómo elegir el "mejor" número de clústeres en sus datos, sea cual sea el método de clúster que utilice, porque el Análisis de clúster busca aislar grupos de unidades estadísticas (ya sean individuos o variables). ) con fines exploratorios o descriptivos, esencialmente. Por lo tanto, también debe interpretar el resultado de su esquema de agrupación en clúster y varias soluciones de agrupación pueden ser igualmente interesantes.
Ahora, con respecto a los criterios estadísticos habituales utilizados para decidir cuándo detenerse para agregar datos, como lo señala @ars, la mayoría son criterios guiados visualmente , incluido el análisis del dendrograma o la inspección de perfiles de grupos, también llamados gráficos de silueta (Rousseeuw, 1987) . También se propusieron varios criterios numéricos , también conocidos como índices de validez, por ejemplo, el índice de validez de Dunn, el índice de validez Davies-Bouldin, el índice C, la gamma de Hubert, por nombrar algunos. La agrupación jerárquica a menudo se ejecuta junto con k-means (de hecho, varias instancias de k-means ya que es un algoritmo estocástico), por lo que agrega soporte a las soluciones de agrupación encontradas. No sé si todas estas cosas están disponibles en Python, pero hay una gran cantidad de métodos disponibles en R (ver elVista de tareas de clúster , ya citada por @mbq para una pregunta relacionada, ¿Qué herramientas podrían usarse para aplicar algoritmos de clúster en MovieLens? ) Otros enfoques incluyen la agrupación difusa y la agrupación basada en modelos (también llamada análisis de rasgos latentes , en la comunidad psicométrica) si busca una forma más sólida de elegir la cantidad de grupos en sus datos.
Por cierto, acabo de encontrar esta página web, scipy-cluster , que es una extensión de Scipy para generar, visualizar y analizar grupos jerárquicos . ¿Quizás incluye otras funcionalidades? También he oído hablar de PyChem, que ofrece cosas bastante buenas para el análisis multivariante.
La siguiente referencia también puede ser útil:
Steinley, D. y Brusco, MJ (2008). Selección de variables en el análisis de conglomerados: una comparación empírica de ocho procedimientos. Psychometrika , 73 , 125-144.
fuente
Recientemente me convertí en el fondo del método de visualización de clustergram (implementado en R).
Lo uso para un método adicional para evaluar un "buen" número de grupos. Extenderlo a otros métodos de agrupamiento no es tan difícil (en realidad lo hice, pero no pude publicar el código)
fuente