最新 RSS

horiday blog

2006/12/30

[R tips] R でクラスタリング

最近シラバスに記述されているテキストをクラスタリングする機会がありました.似ている講義をクラスタリングすることで類似する講義のシラバスを閲覧することができます.

ここでは統計解析ソフト R でベクトルデータをクラスタリングする手法についてメモしておきます.クラスタリングについてはこちらに詳しく書かれているので参照してみてください.

クラスタリングに入る前にまずデータを準備します.今回はここに記述されている 16 種類の動物のベクトルデータを用いることにしました.

下記の形式でテキストデータを保存します.

Hato 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0.5
Kitsune 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0.5
Mendori 1 0 0 0 1 0 0 0 0 1 0.3 0 0 1 1 0.5
Raion 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 0.5
Gachou 1 0 0 1 1 0 0 0 0 1 0 1 0 1 0 0
Washi 0 0 0 0 1 0 0 0 0 1 0 1 0 1 0 0
Inu 0 1 0 0 1 0 0 0 0 1 0 1 0 0 0 0
Ookami 0 1 0 0.5 0 1 1 0 0 0 0 1 0 0 0 0
Shimauma 0 1 0 0 0 1 1 0 0 0 0 0 1 0 0 0
Ahiru 1 1 0 1 0 1 1 0 1 0 0 1 1 0 0 0
Neko 1 0 0 0.5 0 1 1 0 0 0 0 1 0 0 0 0
Fukurou 1 0 1 0.5 0 1 1 0 0 0 1 1 1 0 0 0
Tora 0 0 1 0 0 1 1 0 1 0 0 1 1 0 0 0
Uma 0 0 1 0 0 1 1 1 1 0 0 0 1 0 0 1
Taka 1 0 1 0 0 1 1 1 1 0 1 0 1 0 0 1
Ushi 0 0 1 0 0 1 1 1 0 0 0 0 0 0 0 1

コマンドラインから R を起動して,保存したテキストファイルを読み込みます.

> input <- read.table("a.dat", header=F, row.names=1)

そして各ベクトル間の距離を求めて,それをもとにクラスタリングを行ないます.

> input.d <- dist(input, method="euclid")
> input.cl <- hclust(input.d, method="ward")
> plot(input.cl, hang=-1)
> # 結果を postscript に保存
> postscript(file="a.ps")

するとクラスタリング結果の図(デンドグラム)が表示されます.

最後にクラスタリング結果をテキストファイルに保存します.ここでは cutree でデータを 2 つのクラスタに分けます.

> # cutree の引数 k は何個のクラスタに分けるかを指定
> out <- cutree(input.cl, k=2)
> write.table(out, file="out.dat")

out.dat には「ラベル クラスタ番号」の形式でデータが記述されます.

"Hato" 1
"Kitsune" 1
"Mendori" 1
"Raion" 1
"Gachou" 1
"Washi" 1
"Inu" 1
"Ookami" 2
"Shimauma" 2
"Ahiru" 2
"Neko" 2
"Fukurou" 2
"Tora" 2
"Uma" 2
"Taka" 2
"Ushi" 2

なぜかイヌとライオンが鳥類系のクラスタに分けられてますね...データを間違えたのかな.

帰省

今日実家に帰省しました.機内で半券 1 枚で 200 円の商品券がもらえるというキャンペーンの紹介を見たので,カバンの中に入っていた半券を持って羽田の売店にいくと 2000 円の商品券になりました.なんかちょっと得した気分です.

実家に着いてから,夕食は三笠会館の大和に行ってステーキを食べました.

tag2find

どこかの学生がローカルファイルで tagging したいなんて言っていたけど,こういうことなのかな.