kmeans: Los pasos de la etapa de transferencia rápida superaron el máximo


Estoy ejecutando k-means clustering en R en un conjunto de datos con 636.688 filas y 7 columnas utilizando el paquete estándar stats: kmeans(dataset, centers = 100, nstart = 25, iter.max = 20).

Obtengo el siguiente error: Quick-TRANSfer stage steps exceeded maximum (= 31834400), y aunque uno puede ver el código en http://svn.r-project.org/R/trunk/src/library/stats/R/kmeans.R - No estoy seguro de lo que va mal. Asumo que mi problema tiene que ver con el tamaño de mi conjunto de datos, pero agradecería que alguien pudiera aclarar de una vez por todas lo que puedo hacer para mitigar el problema.

Author: tonytonov, 2014-01-27

3 answers

Acabo de tener el mismo problema.

Ver la documentación de kmeans en R vía ?kmeans:

El algoritmo Hartigan-Wong generalmente hace un mejor trabajo que cualquiera de los dos, pero tratando a menudo se recomiendan varios inicios aleatorios ('nstart' > 1). En raras casos, cuando algunos de los puntos (filas de 'x') están extremadamente cerca, el algoritmo puede no converger en la etapa de" Transferencia rápida " , señalizando una advertencia (y devolviendo 'ifault = 4'). Ligero el redondeo de los datos puede ser aconsejable en ese caso.

En estos casos, es posible que necesite cambiar a los algoritmos Lloyd o MacQueen.

Lo desagradable de R aquí es que continúa con una advertencia que puede pasar desapercibida. Para mis propósitos de referencia, considero que esto es una ejecución fallida, y por lo tanto uso:

if (kms$ifault==4) { stop("Failed in Quick-Transfer"); }

Dependiendo de su caso de uso, es posible que desee hacer algo como

if (kms$ifault==4) { kms = kmeans(X, kms$centers, algorithm="MacQueen"); }

En su lugar, para continuar con un algoritmo diferente.

Si está comparando K-means, tenga en cuenta que R usa iter.max=10 por defecto. Puede tomar mucho más de 10 iteraciones para converger.

 18
Author: Erich Schubert,
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-05-05 14:27:11

Tenía el mismo problema, parece tener algo que ver con la memoria disponible.

Ejecutar la recolección de basura antes de que la función funcionara para mí:

gc()

O referencia:

Aumentar (o disminuir) la memoria disponible para R procesos

 8
Author: BarnSoHard,
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-23 12:25:33

Comentario de@jlhoward:

Intenta

kmeans(dataset, algorithm="Lloyd", ..)
 2
Author: dfrankow,
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-15 21:34:50