質問: pythonでクラスター分析(k−means法)を行いたいのですが、クラスター数を何かの指標を設けて自動で設定したいです。何かいい方法はないでしょうか? クラスター分析を行いたいデータが多いので、ウォード法でデンドログラムを表示させてから自分で決めるのは骨が折れる作業になってしまいます。 また、同じ分析を対象を変えて複数回実行するので、その度にデンドログラムから「自分が」最適と思うクラスター数にすると、クラスタリングの方法がぶれぶれになってしまいます。 以上の理由から、何かの指標を設けて、その指標がある一定の値を超えた瞬間のクラスター数を採用する。という方法で行いたいと考えました。 過去に、 全個体の平方和に占めるクラスター間の平方和の割合が〇〇以上になった時点のクラスター数 で分析したいという旨の質問をさせていただいたのですが、回答がつくことはありませんでした。 なので、上の基準で分析できればベストですが、その他の方法でも構いませんので、どなたかご存知ないでしょうか? よろしくお願いします。
回答: 分析に関しては素人なのですが、興味のある分野なので調べてみました。 Orange の K-means だと固定数で与える以外に、シルエット分析等の選択肢がありました http://docs.orange.biolab.si/3/visual-programming/widgets/unsupervised/kmeansclustering.html (Description の項の最初の画像参照) クラスター数を自動で設定というのはこういう事だろうなという辺りまでは朧げに理解できたのですが、 ただ、評価方法によって指標となるスコアが変わってくるので、どれが最適かという判断はできませんでした。 この辺は、どのクラスターを抽出したいか等の分析目的次第になるのかな 他の方法ですが、Python で同じようなトピックを扱っているblog記事から見つけたコード https://datasciencelab.wordpress.com/tag/k-means/ 時系列下から上です。Gap統計、Pham et al. f(K) という実装とその比較。 後、データ規模が大きいという問題については、単純にスケールダウンしてから分析するのはどうでしょう 例えば画像なら、縮小・サムネイルにしてから分析することで、計算量を減らすようなイメージです。