Как я могу создавать кластеры одинакового размера с помощью R?

Я хочу разделить продукты рыночной корзины на сбалансированные кластеры (кластеры одинакового размера). Я пробовал K-means и PAM, но не могу придумать способ сделать количество элементов (продуктов) в каждом кластере одинаковым. Например, если у меня есть N продуктов и k кластеров, я хочу иметь N / K элементов в каждом кластере (предполагая, что N делится на k). Какие-либо предложения ? Спасибо !

Вот пример: у меня есть следующий набор данных:

df


    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
700109 0 0 0 0 0 0 0 0 0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1
700174 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
700192 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  1
700231 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
700534 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0
700840 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
700871 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0
700874 0 0 0 0 0 0 0 0 0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
723229 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  1
723243 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  1
723351 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
727105 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0
727106 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
727121 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

Это матрица, в которой строки (40 строк) обозначают продукты, а столбцы - транзакции (100 столбцов). Затем я применил PAM:

>pam(df,4,diss=FALSE,metric="manhattan")

Clustering vector:
700109 700174 700192 700231 700534 700840 700871 700874 723229 723243 723351 
1      1      1      1      1      1      1      1      2      1      1
727105 727106 727121 727122 727125 727138 727220 727300 727302 727303 727311 
1      1      1      1      1      1      2      1      3      1      4 
727314 727342 727345 727347 727406 727415 727419 727710 728016 728017 728018 
1      3      4      1      1      1      1      1      1      1      1 
728020 728085 728086 728087 728088 728132 728134 
1      1      1      1      1      1      1 

где 700109,70014 ... мои продукты, а количество кластеров k = 4. Как видите, cluster1 содержит 34 элемента, а cluster2, cluster3 и cluster4 - по 2 элемента каждый. Значит, они не сбалансированы! Я хочу получить такой результат, чтобы каждый из четырех кластеров содержал 10 элементов (потому что в этом примере я взял 40 продуктов).


person BS.Mira    schedule 29.03.2018    source источник
comment
Обращаясь за помощью, вы должны указать простой воспроизводимый пример с образцом ввода и желаемым выходом, которые можно использовать для тестирования и проверки возможных решений.   -  person MrFlick    schedule 29.03.2018
comment
Вы видели это предложение @FredFoo по использованию алгоритма Ллойда?   -  person csgroen    schedule 29.03.2018
comment
Проверьте этот поток   -  person AshOfFire    schedule 29.03.2018
comment
Спасибо. Я нашел несколько алгоритмов, но мне их немного сложно напечатать, потому что я новичок в R. Я ищу решения, написанные на R-скрипте.   -  person BS.Mira    schedule 29.03.2018
comment
Являются ли эти значения в первом столбце (700874 и т. Д.) Просто метками строк, анонимными идентификаторами или целыми числами, несущими фактическую семантику (например, это цены в зимбабвийских долларах)? Или вы просто имеете дело с 0 и 1 в разреженной матрице, которая может быть визуализирована как несколько белых пикселей на черном изображении, и вы просто хотите разделить эти пиксели на расстояние между этими пикселями?   -  person knb    schedule 30.03.2018
comment
Значения в первом столбце - это идентификаторы продуктов. Первая строка (1,2,3 ...) - это идентификаторы транзакций. Если продукт X найден в транзакции Y, тогда ячейка d (X, Y) принимает 1. В противном случае - 0. Например, продукт 700874 находится только в транзакции 11.   -  person BS.Mira    schedule 30.03.2018
comment
Так почему, как вы думаете, при естественной группировке транзакций разделы будут иметь одинаковый размер? Это, конечно, не подтверждается приведенными выше данными.   -  person Has QUIT--Anony-Mousse    schedule 31.03.2018