Keyword: k-means, クラスタ分析, cluster analysis, データマイニング
概要
本サンプルはk-meansクラスタリングを行うサンプルプログラムです。 本サンプルは以下の「分析対象データ」に示される変数が5個、観察数が20のデータを分析対象とします。 このサンプルではk-means法によりデータを3つのクラスタに分割します。 また k-means 法で必要な初期値も以下の「与える初期値」に示す通り与えます。
※本サンプルはnAG Toolbox for MATLAB®が提供する関数 g03ef() のExampleコードです。実行にはMATLAB®本体(他社製品)とnAG Toolbox for MATLAB®が必要です。
本サンプル及び関数の詳細情報は g03ef のマニュアルページをご参照ください。
入力データ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
weight = 'u'; x = [77.3, 13, 9.7, 1.5, 6.4; 82.5, 10, 7.5, 1.5, 6.5; 66.9, 20.6, 12.5, 2.3, 7; 47.2, 33.8, 19, 2.8, 5.8; 65.3, 20.5, 14.2, 1.9, 6.9; 83.3, 10, 6.7, 2.2, 7; 81.6, 12.7, 5.7, 2.9, 6.7; 47.8, 36.5, 15.7, 2.3, 7.2; 48.6, 37.1, 14.3, 2.1, 7.2; 61.6, 25.5, 12.9, 1.9, 7.3; 58.6, 26.5, 14.9, 2.4, 6.7; 69.3, 22.3, 8.4, 4, 7; 61.8, 30.8, 7.4, 2.7, 6.4; 67.7, 25.3, 7, 4.8, 7.3; 57.2, 31.2, 11.6, 2.4, 6.5; 67.2, 22.7, 10.1, 3.3, 6.2; 59.2, 31.2, 9.6, 2.4, 6; 80.2, 13.2, 6.6, 2, 5.8; 82.2, 11.1, 6.7, 2.2, 7.2; 69.7, 20.7, 9.6, 3.1, 5.9]; isx = [int32(1);1;1;1;1]; cmeans = [82.5, 10, 7.5, 1.5, 6.5; 47.8, 36.5, 15.7, 2.3, 7.2; 67.2, 22.7, 10.1, 3.3, 6.2]; wt = [0]; [cmeansOut, inc, nic, css, csw, ifail] = g03ef(weight, x, isx, cmeans, wt)
- weight には重み付けをするかどうかを指定しています。 重みをつけない指定である U が指定されています。
- x には観察データを与えています。各行はそれぞれの観察値であり、5つの値を持っています。
- isx には計算で使う変数がどれであるかを指定しています。ここで 1 は計算で使う事を示しています。(0は計算で当該変数を使わないことを示します。ここで与える数字は変数の数分なければなりません。また指定される1の数が計算で使う変数の数と一致している必要があります) 今回のデータはすべての変数を計算で使うので5つの 1 が与えられています。
- cmeans にはクラスタ中心の初期値を与えています。各行は各クラスタに対応し、5つの変数値が指定されています。
- wt には重み付けをする場合は重みを指定しますが、この場合は重みをつけないのでこの値は参照されません。
- 最後に本関数を呼び出す構文を指定しています。
出力結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
cmeansOut = 81.1833 11.6667 7.1500 2.0500 6.6000 47.8667 35.8000 16.3333 2.4000 6.7333 64.0455 25.2091 10.7455 2.8364 6.6545 inc = 1 1 3 2 3 1 1 2 2 3 3 3 3 3 3 3 3 1 1 3 nic = 6 3 11 css = 46.5717 20.3800 468.8964 csw = 6 3 11 ifail = 0
- cmeansOut は最終的に求まったクラスタ中心を示しています。 行方向がクラスタ、列方向が変数を表しています。
- inc は各観察データがどのクラスタに属するかを示しています。 今回は3つのクラスタに分割していますので 1, 2, 3 のいずれかの数値が出力されています。 この出力では上から順番に
観察データ1=第一クラスタ
観察データ2=第一クラスタ
観察データ3=第三クラスタ
観察データ4=第二クラスタ
…
であることを意味しています。 - nic はそれぞれのクラスタにいくつのデータが含まれるかを示しています。 このサンプル出力では第一クラスタには6個、第二クラスタには3個、第三クラスタには11個のデータがそれぞれ含まれていることが示されています。
- css はそれぞれのクラスタの二乗和を示しています。
- csw はそれぞれのクラスタの重みの合計を示しています。 今回のサンプルデータでは重みづけを行わない設定 (つまり重みをすべて1.0として計算) ですのでデータの個数 x 1.0 が出力されています。
- ifail は関数がエラーを検知しなければ"0"が出力されます。