Up

クラスター分析

 

注意: 本ウェブサイトのプログラムを対象の数が多いデータに適用すると樹形図の描画においてエラーがでるが、そのときはプログラムを64ビット版に変更すればよい。64ビット版への変更は、ウェブサイト<64ビットプログラムの開発>を参照されたい。なお、このときは、作成された樹形図の画像ファイルは、ファイルサイズが大きくてペイントでは開けないようになるので、64ビット版のアプリで開かなければならない。

 

 クラスター分析のサンプルプログラムをVisual C++/CLR 2013で作成してみた。C++には豊富な機能が用意されており、Visual C++/CLR.NET Frameworkを利用すれば画像出力とかユーザーインターフェースが簡単に実現できる(入門書「大学生のためのVC++プログラミング入門」など参照)。

実行形式のプログラムとソースコードファイルを用意したので、ダウンロードして利用することができる。クラスター分析の結果は樹形図(デンドログラム、dendrogram)として出力されるが、図のサイズとか配置を変えたいときなどはダウンロードしたソースコードファイルをVisual Studio 2013で開いて、適切なサイズ・配置になるようにプログラムを変更することができる。プログラムファイルはVisual Studio 2013で開いたとき、エラーが表示されることがあるが、無視してビルド・実行することができる。また、ソリューションエクスプローラ内のMyForm.hファイル名をクリックすればフォームを表示することができる。

 クラスター分析の手法としては、類似度データあるいは非類似度データ(距離データ)に対する最短距離法、最長距離法、群間平均法のアルゴリズムを取り上げ、座標値データに対してはウォード法Ward法)を取り上げた。

 

距離(非類似度)・類似度データの場合

 類似度データは距離(非類似度)データの逆と考えて処理できるので、距離データの場合について説明する。

個の対象とそれらの間の距離が与えられているとき、階層的クラスター分析を次の方法で行う。

(1)個々の対象、、1つ1つからなるクラスター、、を作成する。(現在のクラスターの数)とおく。

(2)個のクラスターのなかで、お互いの距離が最小のもの、とする、を選ぶ。クラスター間の距離の算出方法は、この手続きの説明の後で解説する。クラスターを1つのクラスターにまとめ(merge)、とする。

(3)ならば、(2)に戻る。

ならば(4)にすすむ。

(4)(2)でのクラスター生成の過程を樹形図(図1)に表す。(2)でのクラスター生成の過程は、各クラスターをオブジェクトとして表しておき、およびの間の親子関係をポインタを用いて表しておく。

図1 クラスターの親子関係

 

クラスター間の距離の算出方法として、ここでは次のものを用いている。

(1)最短距離法(single linkage method または nearest neighbor method

 

(2)最長距離法(complete linkage method または furthest neighbor method

 

(3)群間平均法(average linkage between the merged group

 

 

プログラムは、距離(非類似度)データ用と類似度データ用の2つを作成した。距離データ用の実行形式プログラムはClusterAnalysisDist.exeであり、ソースコードファイルを圧縮ファイルとしてまとめたものはClusterAnalysisDist.zipである。

プログラムを実行すると図1のフォームが表示される。

図2

 

クラスター分析の方法に応じてボタンをクリックすると、入力データファイル名の設定を求めるダイアログウィンドウが表示される(図3)。

図3

 

入力データファイルは、テキストファイルとして下三角形行列の形式で用意する(図4)。

図4

 

データは行の先頭がスラッシュ / で始まる行に挟まれた形式で用意する。

各行は、対象のラベルで始まり、それに続いて距離(非類似度)の値を並べていく。図4の場合、対象x3x1の非類似度の値は2.5である。

入力データファイル名を設定して「開く」ボタンをクリックすると、出力ファイル名の設定を求めるダイアログウィンドウが表示される(図5)。

図5

 

この出力ファイルには、読み込んだデータ値などが出力されるので、読み込みのチェックを行うことができる。出力ファイル名の設定後、「保存」ボタンを押すと、クラスタリングが始まり、終了すると図6の樹形図描画出力用のファイル名の設定を求めるダイアログウィンドウが表示される。

図6

 

ビットマップ画像出力用の適当なファイル名(*.bmp)を設定して「保存」ボタンをクリックすると描画が始まる。描画が終了すると描画用ファイルが保存されたことを示すメッセージボックスが表示される(図7)。

図7

 

「OK」ボタンをクリックすると、図5で設定した出力用テキストファイルが保存されたことを示すダイアログボックスが表示される(図8)。

図8

 

「OK」ボタンのクリックで図9のフォームに戻る。

図9

 

まだ、クラスター分析を続けるときは、適当な対応するボタンをクリックする。終了するときは「Close」ボタンをクリックすればよい。

プログラムの終了後、図6のファイルをアプリケーション・ペントで開くと図10のようになっている。

図10

 

ペイントなどの画像処理ソフトで出力画像を整えることもできるが、画像の大きさや配置などは、プログラムファイルをダウンロードしてVisual Studio 2013で開き、適当な配置・大きさになるようにプログラムを変更することもできる。なお、ダウンロード・解凍したプログラムファイルを開いたとき、エラーメッセージが表示されることがあるが、無視してよい。開いたときにエラーメッセージが表示されても、ビルド・実行することができる。また、ソリューションエクスプローラ内のファイル名MyForm.hをクリックするとフォームが表示される。

図10における1.50から3.50までの線分は、クラスター併合時のクラスター間の距離を表している。

 

類似度データを用いる場合は、上の図4に対応するデータは、図4と同じ形式で図11のように用意するが、値は類似度である。

図11

 

図11の場合、対象zと対象yの類似度は0.4である。このデータに対するクラスター分析の樹形図は、図12のようになる。

図12

 

類似度なので、クラスタ併合時の距離を示す軸は、1.00から0.60へと右にいくほど小さい値を表す。

類似度データ用の実行形式のプログラムClusterAnalysisSim.exeとプログラムソースファイルなどをまとめた圧縮ファイルClusterAnalysisSim.zipも用意したので、ダウンロードして利用することができる。解凍したプログラムファイルをVisual Studio 2013で開いたときエラーメッセージが出されることがあるが、無視してよい。

 

 

対象の座標値データの場合

 対象の座標値が与えられた場合のクラスタ分析としてWard法のプログラムを作成した。

Ward法では次式で与えられるを距離の代わりとして用いる。

ただし、

である。

プログラムでは、を次の更新式を用いて求めている。

のとき、

実行形式のプログラムClusterAnalysisCoord.exeをダウンロード実行すると図13のフォームが表示される。

図13

 

プログラムはソースコードファイルをまとめた圧縮ファイルClusterAnalysisCoord.zipをダウンロード解凍してVisual Studio 2013で開いて実行することもできる。「Ward」ボタンをクリックすると入力データファイル名の設定を求めるダイアログウィンドウが表示される(図14)。

図14

 

入力データは図15のようにスラッシュ / で始まる行で挟む形式で用意する。

図15

 

最初のスラッシュ / で始まる行の次の行に、対象の座標を与える次元数を書く。次の行から、各行に、対象のラベルと座標値を書いていく。

入力ファイル名を設定して「開く」ボタンをクリックすると、出力ファイル用テキストファイル名の設定を求めるダイアログウィンドウが現れる(図16)。

図16

 

この出力ファイルには読み込んだデータなどが出力されるので、読み込みが正しく行われたかどうかのチェックを行うことができる。出力用ファイル名の設定後、「保存」ボタンをクリックするとクラスタリングが始まり、終了すると図17の樹形図の出力用画像ファイル名の設定を求めるダイアログウィンドウが表示される(図17)。

 

図17

 

BMPファイル用の出力ファイル名(*.bmp)を設定して「保存」ボタンをクリックする。樹形図の描画が終わると図18の画像ファイルが保存されたことを示すメッセージボックスが表示される。

図18

 

「OK」ボタンのクリックで、図16で設定した出力用ファイルが保存されたことを示すダイアログボックスが表示される(図19)。

図19

 

「OK」ボタンをクリックすると図20のフォームに戻る。

図20

 

Close」ボタンのクリックで、プログラムの実行終了となる。プログラムの実行終了後、図17で指定したファイルをペントで開くと図21のようになる。

図21

 

Ward法の場合、横軸で示されている値はクラスタ併合時の距離ではなく、その時点でのの累積値である。これは、次式

ただし

に示されるように、がクラスター併合時における分散の増加量を表していることに対応している。

 なお、図21に示されている樹形図のサイズやデザインなどを変更するときは、ソースコードファイルなどをまとめた圧縮ファイルClusterAnalysisCoord.zipをダウンロード解凍してVisual Studio 2013で開けば、プログラムの変更を行うことができる。開くときにエラーメッセージが表示されることがあるが、無視してよい。ソリューションエクスプローラ内のファイル名MyForm.hをクリックすれば、フォームが表示される。

 

 

参考文献

宮本定明(1999).クラスター分析入門.森北出版.

岡本安晴(2010).大学生のための心理学VC++プログラミング入門.勁草書房.

 

Up