クラスター分析(クラスタリング、cluster analysis)に関するWeb上の参考ページリスト
業務でクラスター分析をしてみた際に参考にしたページ達。
そもそもクラスター分析とは
クラスタリング (clustering) とは,分類対象の集合を,内的結合 (internal cohesion) と外的分離 (external isolation) が達成されるような部分集合に分割すること
そうそう、そういう事をしたいんです。
なんかドベーっとした売上データがあって、傾向を出しやがれ!って言われる訳ですが、次元が多すぎて物理空間の制約から外に出られない私の思考ではどうもならなかったので計算でなんとかしようと思ったわけです。
なるほど、階層型と非階層型があるわけですね。手持ちのデータが多いのか少ないのかよく分かりませんが、とりあえず計算量が少なそうな非階層型から試してみましょう。
非階層型クラスタリング - k-means法
- k平均法 - Wikipedia
- データ分析・解析|マーケティングリサーチのマクロミル
- k-means 法の注意点とオレオレベストプラクティス - froglog
- kmeansで楽できる(かもしれない)パッケージを作った - yokkunsの日記
手持ちの某処理系ではk-meansはあったけど、ykmeansみたいな良きに計らえ系のパッケージは無かったので、まぁ結果が安定しないしない。毎回結果が違うんですね。なんだこりゃ。
最初に選ばれる点がどこになるかで結果が結構違うわけですね。なるほどダメです。
データ量もどうやら一般にこういう分析をする向きからすると屁でもない量のデータしか無い様子ということが掴めたので、階層型クラスタリングにスイッチ。
階層型クラスタリングの前に処理系の準備 - R
手持ちの処理系だととても手に負えそうにないので、統計処理専門の処理系であるRを導入。これが無料だもんなぁ、良い世の中になったなぁ。
階層型クラスタリング + ヒートマップ
- Hierarchical clustering - Wikipedia
- https://www1.doshisha.ac.jp/~mjin/R/28/28.html
- R: Distance Matrix Computation
- R: Hierarchical Clustering
- R: Draw a Heat Map
- http://stat.biopapyrus.net/graph/heatmap.html
- RによるHeatmapグラフの作成 - 霧笛望のもったいない開発保管庫
- r - How to add more margin to a heatmap.2 plot with the png device? - Stack Overflow
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), )
おまけ: データの標準化
あんまり絶対値的に違いすぎる量がデータの中にあると、絶対値が少ないパラメータのクラスタ形成に対する寄与度が相対的に小さくなってしまう(そりゃ距離の計算だしね)ので、標準化したほうがよさげ。