2010-09-07 19 views
7

Escribí un algoritmo k-Means clustering en MATLAB, y pensé que lo probaría contra MATLABs construido en kmeans(X,k).MATLAB kMeans no siempre converge a mínimos globales

Sin embargo, para la muy fácil configuración de cuatro grupos (ver imagen), MATLAB kMeans no siempre converge a la solución óptima (izquierda) sino a (derecha).

La que escribí no siempre hace eso tampoco, pero ¿no debería la función incorporada ser capaz de resolver un problema tan fácil, siempre encontrando la solución óptima?

alt text

Respuesta

11

Como se explica en @Alexandre C., el algoritmo K-means depende de las posiciones del centroide inicial del clúster, y no hay garantía de que converja a la solución óptima.

Lo mejor que puede hacer es repetir el experimento varias veces con puntos de partida aleatorios.

La implementación de MATLAB ofrece una opción: replicates que repite el agrupamiento N veces y elige el que tenga la menor cantidad total dentro del clúster punto a centroide. También puede controlar cómo se eligen los centroides iniciales con la opción start.

Además, MATLAB proporciona la opción entre una serie de medidas de distancia (Euclidiana, Manhattan, Coseno, ...). Una buena opción emptyaction le permite controlar lo que sucede cuando un clúster pierde todo su miembro asignado durante las iteraciones.

Pero la ventaja real es que emplea un algoritmo de dos fases: las iteraciones habituales de asignación-recálculo, seguidas de una fase de actualización en línea. Asegúrese de leer la sección de algoritmo de documentation page para obtener más información.

4

El algoritmo k-medias es bastante sensible a aproximación inicial para los centros de los conglomerados. ¿Intentó ambos códigos con los mismos centros de masas iniciales?

El algoritmo es simple, y dudo que haya mucha variación entre su implementación y la de Matlab.

+1

Supongo que tiene razón. Para obtener una mejor convergencia, en cambio, modifiqué mi algoritmo para hacer varios intentos con diferentes centros de masa iniciales, y luego determinar el mejor midiendo la varianza de los clústeres. La varianza media baja en un intento es igual a los grupos compactos. ¿Como suena eso? – Theodor

+0

@Theodor: Este es un posible criterio de hecho. –

2

Es probable que a menudo se sienta decepcionado por la solución que se le ocurre a cualquier ejecución particular del "algoritmo k-medias" (es decir, el algoritmo de Lloyd). Eso es porque el algoritmo de Lloyd a menudo se queda atascado en malos mínimos locales.

Afortunadamente, Lloyd's es solo una forma de resolver k-means. Y hay un enfoque que casi siempre encuentra mejores mínimos locales.

El truco consiste en actualizar las asignaciones de clúster de los puntos de datos de uno en uno. Puede hacerlo de manera eficiente manteniendo un recuento de la cantidad de puntos n asignados a cada media. Para que pueda volver a calcular significa el cluster m después de quitar el punto x de la siguiente manera:

m_new = (n * m - x)/(n - 1) 

Y añadir x a agruparse media m usando:

m_new = (n * m + x)/(n + 1) 

Por supuesto, ya que no puede ser vectorizado, es un poco doloroso ejecutar MATLAB, pero no está mal en otros idiomas.

Si está realmente interesado en obtener los mejores mínimos locales posibles y no le molesta utilizar clústeres basados ​​en ejemplos, debe consultar affinity propagation. Las implementaciones de MATLAB están disponibles en el Frey lab affinity propagation page.

2

Aunque K-Means++ no resolverá el problema en una sola ejecución, tiende a dar mejores resultados cuando se ejecuta N veces (en comparación con ejecutar el algoritmo original K-medias N veces).

+0

Sí, leí sobre el algoritmo de kMeans ++ en wiki pero realmente no entendí cómo se iniciaron los clusters iniciales .. – Theodor

+0

Pruebe este enlace. http://ilpubs.stanford.edu:8090/778/1/2006-13.pdf – rwong

3

No lo llamaría un problema fácil. :) De hecho, el artículo de Wikipedia sobre "clustering k-means" ofrece una imagen bastante sombría de la complejidad computacional.

Si desea estar libre de los reinicios aleatorios (dependencia de la conjetura inicial), un compromiso es el algoritmo "global k-means"; el código de papel y matlab se puede encontrar aquí: http://lear.inrialpes.fr/~verbeek/software.php

Cuestiones relacionadas