He encontrado una amplia 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 ellas no son tan fáciles de aplicar (al menos desde mi punto de vista). Estoy utilizando scipy.cluster.hierarchy para obtener una jerarquía de clusters, y ahora estoy tratando de decidir cómo formar clusters planos a partir de eso. Mi objetivo es descubrir patrones comunes en mis observaciones, por lo que no tengo ninguna referencia con la que comparar la agrupación obtenida. ¿Puede alguien sugerir una solución pragmática?
Respuestas
¿Demasiados anuncios?La siguiente entrada de Wikipedia explica bastante bien los métodos más populares y relativamente sencillos:
El Método del codo La heurística descrita es probablemente la más popular debido a su sencilla explicación (cantidad de varianza explicada por el número de conglomerados) junto con la comprobación visual. El método de la teoría de la información tampoco es difícil de implementar y la página tiene algo de pseudocódigo que podrías usar para empezar. Esto último es análogo a una probabilidad penalizada basada en la complejidad del modelo, como en los conocidos criterios de información como AIC, BIC, etc.
Es bastante difícil proporcionar una solución clara sobre cómo elegir el "mejor" número de clusters en sus datos, sea cual sea el método de clustering que utilice, porque el Análisis Cluster busca aislar grupos de unidades estadísticas (ya sean individuos o variables) con fines exploratorios o descriptivos, esencialmente. Por lo tanto, también tiene que interpretar el resultado de su esquema de clustering y varias soluciones de cluster pueden ser igualmente interesantes.
Ahora bien, respecto a los criterios estadísticos habituales que se utilizan para decidir cuándo dejar de agregar datos, como señala @ars la mayoría son criterios de orientación visual , incluyendo el análisis del dendrograma o la inspección de los perfiles de los clusters, también llamados silueta parcelas (Rousseeuw, 1987). Varios criterios numéricos También se propusieron índices de validez, por ejemplo, el índice de validez de Dunn, el índice de validez de Davies-Bouldin, el índice C y la gamma de Hubert, por nombrar algunos. El clustering jerárquico se ejecuta a menudo junto con k-means (de hecho, varias instancias de k-means, ya que es un algoritmo estocástico), de modo que añade soporte a las soluciones de clustering encontradas. No sé si todo esto está disponible en Python, pero una gran cantidad de métodos está disponible en R (ver el Cluster vista de la tarea, ya citada por @mbq para una pregunta relacionada, ¿Qué herramientas se pueden utilizar para aplicar algoritmos de clustering en MovieLens? ). Otros enfoques son agrupación difusa y agrupación basada en modelos (también llamado análisis de rasgos latentes en la comunidad psicométrica) si busca una forma más robusta de elegir el número de clusters 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 clusters jerárquicos . ¿Quizás incluya otras funcionalidades? También he oído hablar de PyChem que ofrece un buen material para el análisis multivariante.
La siguiente referencia también puede ser útil:
Steinley, D., & Brusco, M. J. (2008). Selección de variables en el análisis de conglomerados: Una comparación empírica de ocho procedimientos. Psychometrika , 73 , 125-144.
Recientemente me he convertido en el fondo del visualización de clustergramas (implementado en R).
Lo utilizo como método adicional para evaluar un "buen" número de grupos. Extenderlo a otros métodos de clustering no es tan difícil (de hecho lo hice, sólo que no llegué a publicar el código)