У меня есть набор данных (из 5000 точек с 4 измерениями), которые я сгруппировал с использованием kmeans в R.
Я хочу упорядочить точки в каждом кластере по их расстоянию до центра этого кластера. .
Проще говоря, данные выглядят так (я использую подмножество для проверки различных подходов):
id Ans Acc Que Kudos
1 100 100 100 100
2 85 83 80 75
3 69 65 30 29
4 41 45 30 22
5 10 12 18 16
6 10 13 10 9
7 10 16 16 19
8 65 68 100 100
9 36 30 35 29
10 36 30 26 22
Во-первых, я использовал следующий метод для кластеризации набора данных в 2 кластера:
(result <- kmeans(data, 2))
Это возвращает объект kmeans который имеет следующие методы: кластер, центры и т. д.
Но я не могу понять, как сравнить каждую точку и создать упорядоченный список.
Во-вторых, я попробовал метод упорядочения, предложенный другим пользователем SO здесь
Я использую следующие команды:
clus <- kmeans(scale(x, scale = FALSE), centers = 3, iter.max = 50, nstart = 10)
mns <- sapply(split(x, clus$cluster), function(x) mean(unlist(x)))
result <- dat[order(order(mns)[clus$cluster]), ]
Кажется, что создается упорядоченный список, но если я привязываю его к помеченным следующую команду cbind):
result <- cbind(x[order(order(mns)[clus$cluster]), ],clus$cluster)
Я получаю следующий результат, который, кажется, не упорядочен правильно:
id Ans Acc Que Kudos clus
1 3 69 65 30 29 1
2 4 41 45 30 22 1
3 5 10 12 18 16 2
4 6 10 13 10 9 2
5 7 10 16 16 19 2
6 9 36 30 35 29 2
7 10 36 30 26 22 2
8 1 100 100 100 100 1
9 2 85 83 80 75 2
10 8 65 68 100 100 2
Я не хочу писать команды волей-неволей, но понимаю, как работает этот подход. Если бы кто-нибудь мог помочь или пролить свет на это, было бы действительно здорово.
РЕДАКТИРОВАТЬ:::::::::::
Поскольку кластеры можно легко нанести на график, я полагаю, что есть более простой способ получить и ранжировать расстояния между точками и центром.
Центры вышеуказанных кластеров (при использовании k = 2) следующие. Но я не знаю, как получить и сравнить это с каждой отдельной точкой.
Ans Accep Que Kudos
1 83.33333 83.66667 93.33333 91.66667
2 30.28571 30.14286 23.57143 20.85714
NB::::::::
Мне не нужны самые популярные kmeans, но я хочу указать количество кластеров и получить упорядоченный список точек из этих кластеров.