例えば、60行のデータがあった時に、k-meansを実行するとそれぞれのクラスターのサイズはCluster1: 30, Cluster2: 20, Cluster3: 10のようにサイズが等しくなりません。
しかし、K-meansで各クラスターのサイズを等しくしたいのですが、何か方法はありますでしょうか?
例えば、60行のデータがあった時に、k-meansを実行するとそれぞれのクラスターのサイズはCluster1: 30, Cluster2: 20, Cluster3: 10のようにサイズが等しくなりません。
しかし、K-meansで各クラスターのサイズを等しくしたいのですが、何か方法はありますでしょうか?
ExploratoryのUIや、R標準のkmeans関数ではこれはサポートされていませんが、コードを書くのであればやりかたはあります。
K-Meansで、K個のクラスターの中心を計算する。
各点について、クラスター中心までの距離を元に、第一希望のクラスター(最も距離が近い)から第K希望のクラスター(最も距離が遠い)までを決める。
クラスターに属することができる点の数に上限がある条件で、中心からの距離が近い順に第1希望のクラスターに点を割り当てていく。
第一希望に入れなかった点は、同様にして第2希望のクラスターに割り当てていく、といったことをすべての点がクラスターに割り当てられるまで繰り返す。
この方法の詳細についてはこちらのリンクをご覧ください。
https://elki-project.github.io/tutorial/same-size_k_means
あとは、必ずしもうまくいくとは限りませんが、私達がコーディングなしで試した一つの簡易的な方法として、各変数を順位に変換して分布をあえて一様にしてしまってからK-meansをかけるというものがあります。こちらで各クラスターのサイズがほぼ同様になる場合もあります。