Exploratory コミュニティ

K-meansの各クラスターのサイズ(行の数)を等しくしたい

#1

例えば、60行のデータがあった時に、k-meansを実行するとそれぞれのクラスターのサイズはCluster1: 30, Cluster2: 20, Cluster3: 10のようにサイズが等しくなりません。

しかし、K-meansで各クラスターのサイズを等しくしたいのですが、何か方法はありますでしょうか?

#2

ExploratoryのUIや、R標準のkmeans関数ではこれはサポートされていませんが、コードを書くのであればやりかたはあります。

  1. K-Meansで、K個のクラスターの中心を計算する。

  2. 各点について、クラスター中心までの距離を元に、第一希望のクラスター(最も距離が近い)から第K希望のクラスター(最も距離が遠い)までを決める。

  3. クラスターに属することができる点の数に上限がある条件で、中心からの距離が近い順に第1希望のクラスターに点を割り当てていく。

  4. 第一希望に入れなかった点は、同様にして第2希望のクラスターに割り当てていく、といったことをすべての点がクラスターに割り当てられるまで繰り返す。

この方法の詳細についてはこちらのリンクをご覧ください。

http://jmonlong.github.io/Hippocamplus/2018/06/09/cluster-same-size/#:~:text=Same-size%20k-Means%20Variation,-As%20explained%20in&text=In%20the%20proposed%20approach%20the,second%20best%20is%20chosen%2C%20etc.

https://elki-project.github.io/tutorial/same-size_k_means

あとは、必ずしもうまくいくとは限りませんが、私達がコーディングなしで試した一つの簡易的な方法として、各変数を順位に変換して分布をあえて一様にしてしまってからK-meansをかけるというものがあります。こちらで各クラスターのサイズがほぼ同様になる場合もあります。

1 Like