Kmeans sin conocer el número de clusters? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Estoy intentando aplicar k-means en un conjunto de puntos de datos de alta dimensión (alrededor de 50 dimensiones) y me preguntaba si hay alguna implementación que encuentre el número óptimo de clusters.

Recuerdo haber leído en alguna parte que la forma en que un algoritmo generalmente hace esto es tal que la distancia entre clústeres se maximiza y la distancia intra-clústeres se minimiza, pero no recuerdo dónde vi eso. Sería genial si alguien me puede señalar a cualquier recurso que discutir esto. Estoy usando SciPy para k-means actualmente, pero cualquier biblioteca relacionada también estaría bien.

Si hay formas alternativas de lograr el mismo algoritmo o un mejor, por favor hágamelo saber.

Author: Legend, 2011-07-07

7 answers

Un método es la validación cruzada.

En esencia, eliges un subconjunto de tus datos y lo agrupas en k clústeres, y te preguntas qué tan bien se agrupan, en comparación con el resto de los datos: ¿Estás asignando puntos de datos a las mismas membresías de clústeres, o están cayendo en diferentes clústeres?

Si las membresías son aproximadamente las mismas, los datos encajan bien en k clusters. De lo contrario, intenta un k diferente.

También, usted podría hacer PCA ( análisis de componentes principales) para reducir sus 50 dimensiones a un número más manejable. Si una ejecución de PCA sugiere que la mayor parte de su varianza proviene, por ejemplo, de 4 de las 50 dimensiones, entonces puede elegir k sobre esa base, para explorar cómo se asignan las cuatro membresías de clúster.

 14
Author: Alex Reynolds,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-08 19:29:42

Echa un vistazo a esta página de wikipedia sobre la determinación del número de clústeres en un conjunto de datos.

También es posible que desee probar Agrupamiento jerárquico aglomerativo fuera. Este enfoque no necesita saber el número de clusters, sino que gradualmente formará clusters de cluster hasta que solo exista uno. Esta técnica también existe en SciPy (scipy.Cluster.hierarchy ).

 8
Author: Kevin Jalbert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-07 19:04:11
 4
Author: Michael J. Barber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-07 19:03:28

Hay visualización que debería indicar buenos parámetros. Para k-significa que puede visualizar varias ejecuciones con diferentes k usando Grafgrams (vea el paquete de grafgram de WEKA-mejor obtenido por el administrador de paquetes o aquí. Una introducción y ejemplos también se pueden encontrar aquí.

 1
Author: Johannes Schneider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-30 17:44:52

Una forma de hacerlo es ejecutar k-means con k grande (mucho más grande de lo que crees que es el número correcto), digamos 1000. luego, ejecutando el algoritmo de desplazamiento medio en estos 1000 puntos (el desplazamiento medio usa todos los datos, pero solo "moverá" estos 1000 puntos). mean shift encontrará la cantidad de clusters entonces. Ejecutar mean shift sin la k-significa antes es una posibilidad, pero generalmente es demasiado lento O (N^2*#pasos), por lo que ejecutar k-significa antes acelerará las cosas: O (NK#pasos)

 1
Author: tal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-27 16:59:38

También debe asegurarse de que cada dimensión sea de hecho independiente. Muchos de los llamados conjuntos de datos multidimensionales tienen múltiples representaciones de la misma cosa.

No es incorrecto tener estos datos en sus datos. Es incorrecto usar varias versiones de lo mismo como soporte para un argumento de clúster.

Http://en.wikipedia.org/wiki/Cronbach ' s_alpha

 0
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-07 21:05:26

Si el número de clúster es desconocido, ¿por qué no usar Clúster jerárquico en su lugar?

Al principio, cada uno aislado es un clúster, luego cada dos clúster se fusionará si su distancia es menor que un umbral, el algoritmo terminará cuando no haya más fusión.

El algoritmo de agrupamiento jerárquico puede llevar a cabo una "K" adecuada para sus datos.

 0
Author: Luna_one,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-14 14:00:50