Encontramos los centros de clúster y asignamos puntos a k diferentes agrupaciones de clústeres en k-means clustering, que es un algoritmo muy conocido y se encuentra en casi todos los paquetes de aprendizaje automático en la red. Pero la parte faltante y más importante en mi opinión es la elección de una k correcta. ¿Cuál es el mejor valor para ello? ¿Y qué se entiende por mejor ?
Utilizo MATLAB para la computación científica, donde observar trazados de silueta se da como una forma de decidir sobre k discutido aquí . Sin embargo, estaría más interesado en los enfoques bayesianos. Cualquier sugerencia es apreciada.
clustering
k-means
petrichor
fuente
fuente
R
por aquíRespuestas:
Esto se ha pedido un par de veces en stackoverflow: aquí , aquí y aquí . Puedes echar un vistazo a lo que la multitud de allí piensa acerca de esta pregunta (o una pequeña variante de la misma).
Permítanme también copiar mi propia respuesta a esta pregunta, en stackoverflow.com:
Desafortunadamente, no hay forma de establecer automáticamente la K "correcta" ni hay una definición de lo que es "correcto". No existe un método estadístico basado en principios, simple o complejo que pueda establecer la "K correcta". Hay heurísticas, reglas generales que a veces funcionan, a veces no.
La situación es más general ya que muchos métodos de agrupación tienen este tipo de parámetros, y creo que este es un gran problema abierto en la comunidad de investigación de agrupación / aprendizaje no supervisado.
fuente
En primer lugar una advertencia. En la agrupación a menudo no hay una "respuesta correcta": una agrupación puede ser mejor que otra por una métrica, y lo contrario puede ser cierto utilizando otra métrica. Y en algunas situaciones, dos agrupaciones diferentes podrían ser igualmente probables bajo la misma métrica.
Dicho esto, es posible que desee echar un vistazo a los Procesos Dirichlet . También vea este tutorial .
Si comienza con un modelo de mezcla gaussiana, tiene el mismo problema que con k-means: debe elegir el número de grupos. Podría usar evidencia modelo, pero no será robusta en este caso. Entonces, el truco es usar un Proceso de Dirichlet antes que los componentes de la mezcla, lo que le permite tener un número potencialmente infinito de componentes de la mezcla, pero el modelo (generalmente) encontrará automáticamente el número "correcto" de componentes (bajo los supuestos de el modelo).
fuente
Yo uso el método del codo :
La razón es que después de esto, aumenta el número de clústeres, pero el nuevo clúster está muy cerca de algunos de los existentes.
fuente
Los tamaños de los clústeres dependen en gran medida de sus datos y de para qué utilizarán los resultados. Si está utilizando sus datos para dividir cosas en categorías, intente imaginar cuántas categorías desea primero. Si es para la visualización de datos, hágalo configurable, para que las personas puedan ver tanto los grupos grandes como los más pequeños.
Si necesita automatizarlo, es posible que desee agregar una penalización al aumento de k, y calcular el clúster óptimo de esa manera. Y luego solo pesas k dependiendo de si quieres un montón de grupos o si quieres muy pocos.
fuente
También puede verificar la agrupación difusa óptima no supervisada que se ocupa del problema que ha mencionado (encontrar el número de agrupaciones) que se implementa aquí una versión modificada de la misma.
fuente
Me las arreglé para usar el "Método L" para determinar el número de clústeres en una aplicación geográfica (es decir, esencialmente un problema 2d, aunque técnicamente no es euclidiano).
El método L se describe aquí: Determinación del número de agrupaciones / segmentos en algoritmos jerárquicos de agrupación / segmentación 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 k óptimo representado por la rodilla en el gráfico. Se usa un cálculo simple de ajuste de mínimos cuadrados de doble línea para encontrar el punto de inflexión.
Encontré el método muy lento porque la k-medias iterativa debe calcularse para cada valor de k. También encontré que k-means funcionó mejor con múltiples carreras y eligiendo la mejor al final. Aunque cada punto de datos tenía solo dos dimensiones, no se podía utilizar una distancia pitagórica simple. Eso es mucho cálculo.
Una idea es omitir cualquier otro valor de k (digamos) a la mitad de los cálculos y / o reducir el número de iteraciones de k-medias, y luego suavizar ligeramente la curva resultante para producir un ajuste más preciso. Pregunté sobre esto en StackOverflow - En mi humilde opinión, la pregunta de suavización sigue siendo una pregunta de investigación abierta.
fuente
Pero, ¿qué pasa si su conjunto de datos no se ajusta realmente al esquema Voronoi?
fuente
En general, puede elegir el número de clústeres en dos rutas diferentes.
impulsado por el conocimiento: debe tener algunas ideas sobre cuántos clústeres necesita desde el punto de vista comercial. Por ejemplo, si está agrupando clientes, debe preguntarse, después de obtener estos clientes, ¿qué debo hacer a continuación? ¿Puede ser que tenga un tratamiento diferente para diferentes grupos? (por ejemplo, publicidad por correo electrónico o teléfono). Entonces, ¿cuántos tratamientos posibles está planeando? En este ejemplo, selecciona decir que 100 clústeres no tendrán demasiado sentido.
Impulsado por los datos: más cantidad de clusters está sobreadaptada y menos cantidad de clusters está mal ajustada. Siempre puede dividir los datos por la mitad y ejecutar la validación cruzada para ver cuántos grupos de clústeres son buenos. Tenga en cuenta que en la agrupación aún tiene la función de pérdida, similar a la configuración supervisada.
Finalmente, siempre debe combinar el conocimiento y los datos en el mundo real.
fuente
Como nadie lo ha señalado todavía, pensé que compartiría esto. Hay un método llamado X-means, ( vea este enlace ) que estima el número adecuado de clústeres utilizando el criterio de información bayesiano (BIC). Esencialmente, esto sería como probar K significa con diferentes Ks, calcular BIC para cada K y elegir la mejor K. Este algoritmo lo hace de manera eficiente.
También hay una implementación weka , cuyos detalles se pueden encontrar aquí .
fuente
Otro enfoque es utilizar un algoritmo evolutivo cuyos individuos tengan cromosomas de diferentes longitudes. Cada individuo es una solución candidata: cada uno lleva las coordenadas centroides. El número de centroides y sus coordenadas evolucionan para alcanzar una solución que produzca el mejor puntaje de evaluación de agrupamiento.
Este artículo explica el algoritmo.
fuente