J'exécute le clustering k-means en R sur un ensemble de données avec 636 688 lignes et 7 colonnes en utilisant le package standard stats
: kmeans(dataset, centers = 100, nstart = 25, iter.max = 20)
.
J'obtiens l'erreur suivante: Quick-TRANSfer stage steps exceeded maximum (= 31834400)
, et bien que l'on puisse voir le code sur http://svn.r-project.org/R/trunk/src/library/stats/R/ kmeans.R - Je ne sais pas ce qui ne va pas. Je suppose que mon problème est lié à la taille de mon ensemble de données, mais je serais reconnaissant à quelqu'un de clarifier une fois pour toutes ce que je peux faire pour atténuer le problème.
Je viens d'avoir le même problème.
Voir la documentation de kmeans dans R via ?kmeans
:
L’algorithme de Hartigan-Wong fait généralement un meilleur travail que l’un ou l’autre, mais il est souvent recommandé d’essayer plusieurs démarrages aléatoires ("nstart"> 1). Dans de rares cas, lorsque certains points (rangées de 'x') sont extrêmement proches, l'algorithme peut ne pas converger dans l'étape "Quick-Transfer", signalant un avertissement (et renvoyant 'ifault = 4 '). Un léger arrondi des données peut être conseillé dans ce cas.
Dans ces cas, vous devrez peut-être basculer vers les algorithmes Lloyd ou MacQueen.
La chose désagréable à propos de R ici est qu'elle continue avec un avertissement qui peut passer inaperçu. Pour mes besoins de référence, je considère qu'il s'agit d'une exécution échouée et j'utilise donc:
if (kms$ifault==4) { stop("Failed in Quick-Transfer"); }
Selon votre cas d'utilisation, vous voudrez peut-être faire quelque chose comme
if (kms$ifault==4) { kms = kmeans(X, kms$centers, algorithm="MacQueen"); }
à la place, pour continuer avec un algorithme différent.
Si vous comparez K-means, notez que R utilise iter.max=10
par défaut. La convergence peut prendre plus de 10 itérations.
Eu le même problème, semble avoir quelque chose à voir avec la mémoire disponible.
Exécuter Garbage Collection avant que la fonction ne fonctionne pour moi:
gc()
ou référence:
Augmenter (ou diminuer) la mémoire disponible pour les processus R
Commentaire de jlhoward:
Essayer
kmeans(dataset, algorithm="Lloyd", ..)