Star Clustering

というので遊んでみました(これは趣味半分、本職半分なんですが)。何をやっているか直感的にわかりやすいので、自分にとっては面白いです。とりいそぎ Ruby の実装したのですが、ノード数 n に対して類似度行列を作るのに O(n^2)の計算量が必要なので、かなり遅いです。サンプリングするという作戦もあるようですが、ひとまずCの拡張ライブラリにしている最中です。これはいずれ公開できると思います。あと kmeans の実装もやったりしてます。いくつかの既存の実装を調べてみると収束の判定のところとか結構実装によってまちまちであるということがわかりました。厳密に重心が動かなくなるという判定を使うのではなく(振動する場合とかあるので)クラスタ内距離の総和が小さくならなくなったら終了というようなパターンが多いようです。ノード間距離のとりかたも大抵はユークリッド距離ですが、色々あるようです。このあたりぜひ Dan Kogai 氏に取り上げて頂きたい :)