SageでRを使用するために必要な前準備を以下で行います。
|
データがどのようなグループに分かれているか調べる方法をクラスタリングと呼びます。
以下の手順でクラスタリングの手法について整理します。
RでExcelシートからデータを読み込むには、gdataパッケージのread.xls関数を使用します。
[1] "gdata" "stats" "graphics" "grDevices" "utils" "datasets" "methods" "base" [1] "gdata" "stats" "graphics" "grDevices" "utils" "datasets" "methods" "base" |
ここでは、ノートブックにある成績のデータ(seiseki.xls)を読み込みます。
row.names=1の引数で、行の名称を1列目の値とすることを指定します。
算数 理科 国語 英語 社会 田中 89 90 67 46 50 佐藤 57 70 80 85 90 鈴木 80 90 35 40 50 本田 40 60 50 45 55 川端 78 85 45 55 60 吉野 55 65 80 75 85 斎藤 90 85 88 92 95 算数 理科 国語 英語 社会 田中 89 90 67 46 50 佐藤 57 70 80 85 90 鈴木 80 90 35 40 50 本田 40 60 50 45 55 川端 78 85 45 55 60 吉野 55 65 80 75 85 斎藤 90 85 88 92 95 |
クラスタリングするために、教科毎の点数の差の自乗和から生徒の距離関係を求めます。
距離が小さいほど類似しており、距離が大きいほど異なっていると判断します。
田中 佐藤 鈴木 本田 川端 吉野 佐藤 69 鈴木 34 81 本田 60 64 53 川端 28 61 21 47 吉野 63 12 76 54 56 斎藤 68 38 88 92 68 46 田中 佐藤 鈴木 本田 川端 吉野 佐藤 69 鈴木 34 81 本田 60 64 53 川端 28 61 21 47 吉野 63 12 76 54 56 斎藤 68 38 88 92 68 46 |
階層クラスタリングは、hclust関数を使って計算します。
Call: hclust(d = seiseki.d) Cluster method : complete Distance : euclidean Number of objects: 7 Call: hclust(d = seiseki.d) Cluster method : complete Distance : euclidean Number of objects: 7 |
計算結果をデンドログラムにプロットします。
類似しているものが近くに集まってプロットされます。
残念ながら、Mac OS Xでは日本語が文字化けします。
|
氏名を数字の1から7に置き換えてプロットし直しました。
大きく分けて2つのグループに分かれているのが、見て取れます。
[1] "田中" "佐藤" "鈴木" "本田" "川端" "吉野" "斎藤" [1] "1" "2" "3" "4" "5" "6" "7" [1] "田中" "佐藤" "鈴木" "本田" "川端" "吉野" "斎藤" [1] "1" "2" "3" "4" "5" "6" "7" |
階層クラスタリングは、直感的とよくマッチするので分かりやすいのですが、要素が多くなると処理に時間が掛かります。
次にK個のグループ分けを逐次行うk-means法を使って、クラスタリングをします。
k-means法のクラスタリングには、kmeans関数を使用します。
seiseki.km$clusterにどのクラスに割り振られたかを示す番号がセットされます。
佐藤(2)、吉野(6)、斎藤(7)のグループ1と
田中(1)、鈴木(3)、本田(4)、川端(5)のグループ2に分けられ、階層クラスタリングの結果と一致します。
1 2 3 4 5 6 7 2 1 2 2 2 1 1 1 2 3 4 5 6 7 2 1 2 2 2 1 1 |
多次元の属性から求められたグループ分けがどのような関係になっているかを2次元にプロットするのが、clusplot関数です。
これによってグループ内のメンバーの相対的な位置づけやグループ間の距離が視覚的に理解できます。
|
クラスタリングの結果と属性内での分布をPairsグラフで表示するのが、clPairs関数です。
成績の結果をみると、2つのグループは理系(赤)と文系(青)であることがMathematicsとScienceの分布で分かります。
|
k-means法は、とても便利で高速な手法ですが、肝心のクラスターの数をいくつにするのが良いのか、その指標が必要になります。
そこで、混合分布によるクラスター分析手法を使って最適なクラスター数を求めます。
mclustパッケージのmclustBIC関数を使って最適なクラスター数を計算したのが、以下の図です。
BICの値が高いほど良いモデルの指標です。以下の例ではVEVモデル、VVVモデルが最もよくクラスターの数も2、3が良いことが求まります。
|
irisのデータは品種の異なるユリ(setosa, versicolor, virginica)の花の萼(がく)の長さと幅、花弁の長さと幅を測ったもので、それぞれ50個のサンプルが入っています。
データの最後に品種名がセットされています。
hc関数で混合分布モデルのクラスタリングを行い、hclass関数でクラス分けをします。
結果として、setosa, versicolorは、100%分類できていますが、virginicaは、50個中14が誤識別されています。
iris.hcl 1 2 3 setosa 50 0 0 versicolor 0 50 0 virginica 0 14 36 iris.hcl 1 2 3 setosa 50 0 0 versicolor 0 50 0 virginica 0 14 36 |
<h3>irisクラスタリング結果の可視化</h3>
irisデータの可視化の結果を以下に示します。
Sepal.Length, Sepal.Width属性においてVirginica, versicolorの識別が混ざっていることが見て取れます。
|
|
|