回答:
EMクラスタリングを使用する
EMクラスタリングでは、アルゴリズムが初期クラスターモデルを繰り返し改良してデータに適合させ、クラスター内にデータポイントが存在する確率を決定します。アルゴリズムは、確率モデルがデータに適合するとプロセスを終了します。近似を決定するために使用される関数は、モデルが与えられたデータの対数尤度です。
プロセス中に空のクラスターが生成される場合、または1つ以上のクラスターのメンバーシップが所定のしきい値を下回る場合、人口の少ないクラスターが新しいポイントで再シードされ、EMアルゴリズムが再実行されます。
この問題はこのペーパーで扱われます:
Bradley、PS、KP Bennett、およびAyhan Demiriz。「制約付きk-meansクラスタリング」。Microsoft Research、Redmond(2000):1-8。
私が持っている実装のpythonでのアルゴリズムのを。
rPython
R のパッケージを使用して、Rスクリプトからアクセスしたこの実装へのインターフェイスを作成しました。
私はそれがクラスタサイズのテストでifループの一部としてk平均を実行することの問題だと思う、すなわちクラスタkのカウントn-また、k平均は同じデータの実行ごとに異なる結果を与えることを覚えておいてくださいとにかくループの一部として実行して、「最良の」結果を抽出する必要があります。
データセットの大きさは?階層的クラスタリングを実行してから、樹状図に基づいて保持するクラスターを決定することもできます。
データセットが巨大な場合は、最初の非階層クラスタリングと、非階層分析のグループを使用した階層クラスタリングの両方のクラスタリング方法を組み合わせることもできます。このアプローチの例は、Martínez-Pastoret al(2005)にあります。
これは、最小コストフロー(MCF)線形ネットワーク最適化問題として定式化することにより、クラスター割り当てステップ(EMのE)を変更することで実現できます。
GoogleのOperations Researchツールの高速なC ++実装であるSimpleMinCostFlowを使用するpythonパッケージを作成しました。標準のscikit-lean APIがあります。