Кластеризация K-средних с предопределенными центроидами

Я пытаюсь запустить алгоритм K-средних с предопределенными центроидами. Я ознакомился со следующими сообщениями:

1. R настраиваемые центры алгоритма k-means

2. Установите статические центры для kmeans в R

Однако каждый раз, когда я запускаю команду:

km = kmeans(df_std[,c(10:13)], centers = centroids)

Я получаю следующую ошибку:

**Error: empty cluster: try a better set of initial centers**

Я определил центроиды как:

centroids = matrix(c(140.12774, 258.62615, 239.36800, 77.43235,
                      33.37736, 58.73077,  68.80000,  12.11765,
                     0.8937264, 0.8118462, 0.8380000, 0.8052941,
                     11.989858, 12.000000, 8.970000,  1.588235),
ncol = 4, byrow = T)

И мои данные - это подмножество фрейма данных, скажем: df_std. Он уже масштабирован

df_std[,c(10:13)]

Мне интересно, почему система выдает вышеуказанную ошибку? Любая помощь в этом будет высоко оценена!


person Sandy    schedule 12.07.2018    source источник
comment
Вы уверены, что именно этого хотите? Кластеры будут двигаться (если они не станут пустыми). Скорее всего, вы захотите выполнить классификацию ближайшего соседа вместо кластеризации...   -  person Has QUIT--Anony-Mousse    schedule 12.07.2018
comment
@ Anony-Mousse Да, я определенно хочу кластеризацию на основе центроидов! Я повторяю некоторую работу, которую я сделал с одним набором данных. И теперь для нового набора данных я не хочу неконтролируемой кластеризации, а хочу извлечь похожие группы.   -  person Sandy    schedule 13.07.2018
comment
@ Anony-Mousse Я также вижу, что есть много людей, которые в зависимости от своих потребностей должны пройти кластеризацию на основе центроидов, см.: tolstoy.newcastle.edu.au/R/e9/help/10/01/0906.html   -  person Sandy    schedule 13.07.2018
comment
Вы хотите, чтобы центры двигались, или нет? По крайней мере один из этих кластеров пуст и исчезнет.   -  person Has QUIT--Anony-Mousse    schedule 13.07.2018
comment
Чтобы объяснить мою проблему более подробно. В более ранней работе, которую я сделал, было, скажем, 4 кластера A, B, C и D. Кластеры A и B были густо заселены, а C и D были разрежены. Эта классификация была основана на наборе, содержащем восемь признаков (X = 8). Если мне нужно аналогичное распределение моих наблюдений, основанное на одинаковых восьми функциях, не должен ли я использовать K-средние с предопределенными центроидами?   -  person Sandy    schedule 13.07.2018
comment
Нет. Я бы использовал предыдущие центроиды и одного ближайшего соседа classifier. Поскольку вы хотите использовать одни и те же центры, вы не хотите, чтобы они перемещались в очень разные места.   -  person Has QUIT--Anony-Mousse    schedule 13.07.2018


Ответы (2)


Используйте классификатор ближайших соседей, используя только центры, без повторной кластеризации.

Это означает, что каждая точка помечена как ближайший центр. Это похоже на метод k-средних, но вы не меняете центры, вам не нужно выполнять итерацию, и каждая новая точка данных может обрабатываться независимо и в любом порядке. Никаких проблем не возникает при обработке только одной точки за раз (в вашем случае k-средних не удалось, потому что один кластер стал пустым!)

person Has QUIT--Anony-Mousse    schedule 13.07.2018

При просмотре конкретной ошибки, которую я разместил выше:

Error: empty cluster: try a better set of initial centers

Я нашел следующую ссылку на диалог:

http://r.789695.n4.nabble.com/Empty-clusters-in-k-means-possible-solution-td4667114.html

Вообще говоря, вышеуказанная ошибка генерируется, когда центроиды не совпадают с данными.

Это может произойти, когда k является числом: из-за случайных запусков алгоритма k-средних есть вероятность, что центры не совпадают с данными

Это также может произойти, когда k представляет центроиды (мой случай). Проблема заключалась в следующем: мои данные были масштабированы, но центроиды не масштабированы.

Приведенная выше общая ссылка заставила меня понять, что в моем коде есть ошибка. Надеюсь, это поможет кому-то в похожей ситуации, как у меня!

person Sandy    schedule 12.07.2018