web-dev-qa-db-fra.com

kmeans: Les étapes de l'étape Quick-TRANSfer ont dépassé le maximum

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.

31
Anna Dunietz

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.

21
Erich Schubert

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

10
BarnSoHard

Commentaire de jlhoward:

Essayer

kmeans(dataset, algorithm="Lloyd", ..)
2
dfrankow