Kmeans Clustering - данные уже сгруппированы как продукты - PullRequest
0 голосов
/ 27 августа 2018

У меня есть следующий фрейм данных

 'data.frame':  88 obs. of  16 variables:
 $ product1: num  212 283 364 357 376 ...
 $ product2: num  5025 4899 4828 4519 4340 ...
 $ product3: num  4295 3745 3790 3868 4066 ...
 $ product4: num  550 557 593 568 556 ...
 $ product5: num  0 0 0 0 0 ...
 $ product6: num  3484 3205 5243 5183 4784 ...
 $ product7: num  0 0 992 1066 983 ...
 $ product8: num  0 0 0 0 0 0 0 0 0 0 ...
 $ product9: num  0 0 0 0 0 0 0 0 0 0 ...
 $ product10: num  0 0 0 0 0 0 0 0 0 0 ...
 $ product11: num  0 0 0 0 0 0 0 0 0 0 ...
 $ product12: num  0 0 0 0 0 0 0 0 0 0 ...
 $ product13: num  0 0 0 0 0 0 0 0 0 0 ...
 $ product14: num  0 0 0 0 0 0 0 0 0 0 ...
 $ product15: num  0 0 0 0 0 0 0 0 0 0 ...
 $ product16: num  0 0 0 0 0 0 0 0 0 0 ...

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

cluster 1: products 1, 2, 3, 15, 16
cluster 2: products 4, 5, 6, 7, 8, 9, 10
cluster 3: products 11, 12, 13, 14

Однако я изо всех сил пишу это на R. То, что я сейчас получаю, это следующее:

km <- kmeans(dataFrame, 3)
km$cluster

[1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[41] 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[81] 3 3 3 3 3 3 3 3

Вопрос в том, как мне написать код, чтобы получить 3 кластера для 16 различных продуктов, как я напечатал выше?

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Прямо сейчас у вас есть 81 наблюдение и 16 переменных.

K-означает кластеры * наблюдения ", а не переменные.

Поэтому вам необходимо транспонировать ваши данные.

0 голосов
/ 27 августа 2018

Я сгенерировал пример кластеризации kmeans в R. Здесь набор данных состоял из 3 переменных (3 столбца), и kmeans использовался для классификации выборок по 4 группам. Первый вывод показывает центры кластеров для 3 переменных и 4 кластеров. Обратите внимание, если вам нужно транспонировать ваши данные, используйте t в R. Второй вывод показывает количество выборок по кластерам.

set.seed(1); d <- matrix(rnorm(90), ncol=3)
kd <- kmeans(d, centers=4)
cluster <- kd$cluster
dd <- as.data.frame(cbind(d, cluster))
t(aggregate(dd, by=list(dd$cluster), FUN=mean))[c(1,5)*-1,]

         [,1]        [,2]        [,3]       [,4]
V1  0.8321043 -0.01501747 -0.09144934 -1.8916013
V2  0.0121109 -0.51743551  0.85714652 -0.5389448
V3 -0.4478400  0.17132066  0.99685057 -0.9206161

table(kd$cluster)

 1  2  3  4 
11  6 10  3 
...