Ответ 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 итераций.