Подтвердить что ты не робот

Kmeans: шаги этапа Quick-TRANSFER превышают максимальные

Я запускаю k -среднюю кластеризацию в R на наборе данных с 636 688 строками и 7 столбцами, используя стандартный пакет stats: kmeans(dataset, centers = 100, nstart = 25, iter.max = 20).

Я получаю следующую ошибку: Quick-TRANSfer stage steps exceeded maximum (= 31834400), и хотя можно просмотреть код на http://svn.r-project.org/R/trunk/src/library/stats/R/kmeans.R - я не уверен, что происходит не так. Я полагаю, что моя проблема связана с размером моего набора данных, но я был бы признателен, если бы кто-то мог прояснить раз и навсегда, что я могу сделать, чтобы смягчить проблему.

4b9b3361

Ответ 1

У меня была такая же проблема.

См. документацию по kmeans в R через ?kmeans:

Алгоритм Хартигана-Вонга      как правило, лучше, чем любой из них, но пытается      часто рекомендуется несколько случайных запусков ('nstart > 1). В редких случаях      случаи, когда некоторые точки (строки "х" ) очень близки,      алгоритм не может сходиться на этапе "Быстрая передача" ,      сигнализируя предупреждение (и возвращая "ifault = 4" ). незначительный      округление данных может быть целесообразным в этом случае.

В этих случаях вам может потребоваться переключиться на алгоритмы Lloyd или MacQueen.

Отвратительная вещь R здесь заключается в том, что она продолжается с предупреждением, которое может остаться незамеченным. Для моих контрольных целей я считаю, что это неудачный прогон, и поэтому я использую:

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

В зависимости от вашего варианта использования вы можете сделать что-то вроде

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

вместо этого, чтобы продолжить с другим алгоритмом.

Если вы сравниваете K-середины, обратите внимание, что R использует iter.max=10 по умолчанию. Для слияния может потребоваться более 10 итераций.

Ответ 3

Комментарий @jlhoward:

Try

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