クラスター分析(クラスタリング、cluster analysis)に関するWeb上の参考ページリスト

業務でクラスター分析をしてみた際に参考にしたページ達。

そもそもクラスター分析とは

クラスタリング (clustering) とは,分類対象の集合を,内的結合 (internal cohesion) と外的分離 (external isolation) が達成されるような部分集合に分割すること

そうそう、そういう事をしたいんです。
なんかドベーっとした売上データがあって、傾向を出しやがれ!って言われる訳ですが、次元が多すぎて物理空間の制約から外に出られない私の思考ではどうもならなかったので計算でなんとかしようと思ったわけです。
なるほど、階層型と非階層型があるわけですね。手持ちのデータが多いのか少ないのかよく分かりませんが、とりあえず計算量が少なそうな非階層型から試してみましょう。

非階層型クラスタリング - k-means法

手持ちの某処理系ではk-meansはあったけど、ykmeansみたいな良きに計らえ系のパッケージは無かったので、まぁ結果が安定しないしない。毎回結果が違うんですね。なんだこりゃ。
最初に選ばれる点がどこになるかで結果が結構違うわけですね。なるほどダメです。
データ量もどうやら一般にこういう分析をする向きからすると屁でもない量のデータしか無い様子ということが掴めたので、階層型クラスタリングにスイッチ。

階層型クラスタリングの前に処理系の準備 - R

手持ちの処理系だととても手に負えそうにないので、統計処理専門の処理系であるRを導入。これが無料だもんなぁ、良い世の中になったなぁ。

階層型クラスタリング + ヒートマップ


Rでとりあえず階層型クラスタリングを実行。案外簡単にできた。
個人的な好みでしかないし、スキル不足だからなのは明確ではあるのだけど、やっぱりアルゴリズムは安定なものが精神衛生上良い。
完成したヒートマップは業務データが含まれるので自粛。
上記一番下のリンクは、グラフ描画時のマージン設定。マニュアルに書いてなくて多少ハマった。

library(gplots)
table <- read.csv("hogehoge.csv",header=TRUE,row.names=1)
d <- dist(table,method="canberra")
cluster <- hclust(d, method="centroid")

heatmap(
 as.matrix(table),
 Rowv = as.dendrogram(cluster),
 Colv = NA,
 col = heat.colors(256),
 margins = c(8,5),
)

おまけ: データの標準化

あんまり絶対値的に違いすぎる量がデータの中にあると、絶対値が少ないパラメータのクラスタ形成に対する寄与度が相対的に小さくなってしまう(そりゃ距離の計算だしね)ので、標準化したほうがよさげ。

今後

Rは結構面白い。参考書も買ったし、もうちょっと基本的なところから順次掘り下げてみたい。
クラスタリングについては、評価関数の使い方とか、各種距離関数や各種クラスタリング手法の特徴をきちんと覚えておく必要があると感じた。
何を持って正しくクラスタリングできたと言えるんだろう?結果を見て云々する時点で、予断を持ってデータを見ている気がするのだが、これでやれば絶対OK!って手法があるわけでもないので、正しさの判断には今後も苦労しそう。
ただ、距離関数、クラスタリング手法を変えてみてもそう変わらないクラスタも中にはあるので、そういうのがより明確なクラスタなのだろう。