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.
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.
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
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", ..)
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