今回は以下のサイトで公開されているMatlabのクラスタリングプログラムを使用してDSMをクラスタリングしてみます。
MATLAB Macro for Clustering DSMsdsmweborg.wordpress.com
またこのプログラムを作った背景や詳しい内容は下記pdfにあります。
http://www.dsmweb.org/uploads/media/MSc_Thebeau.pdf
クラスタリングアルゴリズムの内容
以下のようなアルゴリズムです。
- 初期条件として全ての要素を独立したクラスターとする。
- この状態のDSMのコストを計算する。
- 1つの要素をランダムに選択する。
- 選択した要素について、DSM中の全クラスターからのbidを計算する。
- 1~'rand_bid'(このアルゴリズムのパラメーター)までのランダムな数を選択する。
- 選択した要素を、最もbidの大きい(step5でランダムな数が
rand_bid
と等しかった場合は2番めに大きいbid)クラスターのメンバーにする。- 1~
rand_accept
(このアルゴリズムのパラメーター)までのランダムな数を選択する。- 新しく計算したコストが前回計算したコストよりも小さかった場合、もしくはstep7で選択した数字が
rand_accept
と等しかった場合、この変更を永遠にする。- Step3に戻り、設定回数に達するまで繰り返す。
bidは以下の式で計算します。
コストは以下の式で計算します。
また、各パラメーターは以下のように設定できます。
実行してみる。
資料に載っている例題通りのDSMをクラスタリングしてみます。 クラスタリングする前のDSMは以下のようになります。
これはMatlabの散布図で表現されています。いつもはheatmapを使用していたので新鮮です。
これを先程のクラスタリングアルゴリズムを使用してクラスタリングします。具体的には、先程掲載したダウンロードしたファイルを解凍して、フォルダの中身のMatlabファイルを全てMatlabのカレントディレクトリにコピーした後で、run_cluster_A
を実行しました。
すると以下のようなクラスタリングされたDSMがプロットされます。
また、コストの経時変化も表示されます。
以上のように、DSMのクラスタリングが実行できました。別の環境でも試してみたいですね。
今回はここまでにします。