58 votos

¿Cómo decidir el número correcto de grupos?

Encontramos los centros de los clústeres y asignamos los puntos a k grupos diferentes de clústeres en agrupación de k-means que es un algoritmo muy conocido y se encuentra en casi todos los paquetes de aprendizaje automático de la red. Pero la parte que falta y la más importante en mi opinión es la elección de un k correcto. Y, ¿qué se entiende por mejor ?

Utilizo MATLAB para el cálculo científico, en el que la observación de las gráficas de las siluetas se da como una forma de decidir sobre k discutido aquí . Sin embargo, yo estaría más interesado en los enfoques bayesianos. Se agradece cualquier sugerencia.

30voto

Dan Appleyard Puntos 223

Esto se ha preguntado un par de veces en stackoverflow: aquí , aquí y aquí . Puedes echar un vistazo a lo que la gente de allí piensa sobre esta cuestión (o una pequeña variante de la misma).

Permítanme también copiar mi propia respuesta a esta pregunta, en stackoverflow.com:

Lamentablemente, no hay forma de establecer automáticamente la K "correcta" ni existe una definición de lo que es "correcta". No existe un método estadístico basado en principios, simple o complejo, que pueda establecer la "K correcta". Hay heurísticos, reglas empíricas que a veces funcionan y a veces no.

La situación es más general, ya que muchos métodos de clustering tienen este tipo de parámetros, y creo que es un gran problema abierto en la comunidad de investigación de clustering/aprendizaje no supervisado.

20voto

A.Schulz Puntos 264

En primer lugar, una advertencia. En la agrupación, a menudo no hay una "respuesta correcta": una agrupación puede ser mejor que otra según una métrica, y lo contrario puede ser cierto utilizando otra métrica. Y en algunas situaciones, dos agrupaciones diferentes pueden ser igualmente probables según la misma métrica.

Dicho esto, tal vez quiera echar un vistazo a Procesos de Dirichlet . Vea también esto tutorial .

Si se empieza con un modelo de mezcla gaussiana, se tiene el mismo problema que con k-means: que hay que elegir el número de clusters. Podrías utilizar pruebas del modelo, pero no serán robustas en este caso. Así que el truco es utilizar un Proceso Dirichlet a priori sobre los componentes de la mezcla, lo que le permite tener un número potencialmente infinito de componentes de la mezcla, pero el modelo (normalmente) encontrará automáticamente el número "correcto" de componentes (bajo los supuestos del modelo).

Tenga en cuenta que todavía tiene que especificar el parámetro de concentración $\alpha$ del Proceso Dirichlet a priori. Para valores pequeños de $\alpha$ Las muestras de un DP suelen estar compuestas por un pequeño número de medidas atómicas con grandes pesos. Para los valores grandes, es probable que la mayoría de las muestras sean distintas (concentradas). Se puede utilizar un hiperprior en el parámetro de concentración y luego inferir su valor a partir de los datos, y este hiperprior puede ser convenientemente vago como para permitir muchos valores posibles diferentes. Sin embargo, si se dispone de suficientes datos, el parámetro de concentración dejará de ser tan importante y se podrá prescindir de este hiperprioritario.

13voto

pdavis Puntos 2497

Utilizo el Método del codo :

  • Empieza con K=2, y sigue aumentando en cada paso en 1, calculando tus clusters y el coste que conlleva el entrenamiento. A un cierto valor de K, el coste disminuye drásticamente, y después llega a una meseta cuando se aumenta más. Este es el valor de K que quieres.

La razón es que después de esto, se aumenta el número de clusters pero el nuevo cluster está muy cerca de alguno de los existentes.

6voto

neuron Puntos 181

El tamaño de los clústeres depende en gran medida de sus datos y del uso que vaya a hacer de los resultados. Si utilizas tus datos para dividir las cosas en categorías, intenta imaginar primero cuántas categorías quieres. Si es para la visualización de datos, hazlo configurable, para que la gente pueda ver tanto los clusters grandes como los más pequeños.

Si necesitas automatizarlo, podrías añadir una penalización al aumento de k, y calcular el cluster óptimo de esa manera. Y luego sólo ponderas k dependiendo de si quieres una tonelada de clusters o quieres muy pocos.

5voto

mr obvious Puntos 51

He conseguido utilizar el "Método L" para determinar el número de conglomerados en una aplicación geográfica (es decir, esencialmente un problema 2d aunque técnicamente no euclidiano).

Aquí se describe el método L: Determinación del número de clusters/segmentos en los algoritmos de clustering/segmentación jerárquica Stan Salvador y Philip Chan

Esencialmente, esto evalúa el ajuste para varios valores de k. Se ve un gráfico en forma de "L" con el valor óptimo de k representado por la rodilla en el gráfico. Se utiliza un simple cálculo de ajuste por mínimos cuadrados de dos líneas para encontrar el punto de la curva.

Encontré que el método era muy lento porque el k-means iterativo tiene que ser calculado para cada valor de k. También encontré que k-means funcionaba mejor con múltiples ejecuciones y eligiendo la mejor al final. Aunque cada punto de datos tenía sólo dos dimensiones, no se podía utilizar una simple distancia pitagórica. Así que son muchos cálculos.

Una idea es omitir cualquier otro valor de k (digamos) para reducir a la mitad los cálculos y/o reducir el número de iteraciones de k-means, y luego suavizar ligeramente la curva resultante para producir un ajuste más preciso. Pregunté sobre esto en StackOverflow - En mi opinión, la cuestión del alisamiento sigue siendo una cuestión de investigación abierta.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X