Hatena::ブログ(Diary)

yokkunsの日記

2014-03-16

kmeansで楽できる(かもしれない)パッケージを作った

k-means法は、非階層的クラスタリングの代表的な手法ですごく便利ですが、使って行く上で、以下の2つが問題になってきます。

  • 初期値がランダムなので、結果がぶれる
  • 最適なクラスタ数が分からない

この2つの弱点に対して拡張版や手法が提案されていますが、すごくシンプルな方法で解決するパッケージを作ってみました。

その名もykmeansパッケージ・・・!


このパッケージは、上記の二つの問題に対して、以下のアプローチで対応しています。



N回実行して一番多く分類されたクラスタを採用する

例えば、あるデータで100回実行して、そのクラスタ平均値プロットすると、↓のようにクラスタの中心が結構ぶれます。

http://i.gyazo.com/a32a20645d641732e371fdb864a04cc4.png

クラスタの中心がずれると、当然分類されるクラスタが変わってしまうデータが出てきます。

なので、1回だけの実行では中々不安になってきます。


そこで、このパッケージでは、

「とりあえず100回くらい実行すれば安定するだろう」

という仮定のもとに、100回実行して、一番多く分類されたクラスタを採用しています。

(※回数は指定出来ます)


任意の変数クラスタ分散平均値が小さくなるクラスタ数を採用する

自分がクラスタリングを使うときは、目的にもよりますが、ある程度クラスタ数の範囲は事前に決めています。

多すぎると解釈や説明がつらくなってくるので、3〜6、多くて10くらいに設定するのが多いです。

また、「クラスタリングして終わり」ではなく、各クラスタのKPIを比較するなど別の分析があります。

なので、クラスタ内で、見ようと思っているKPIが出来るだけ近い方が都合が良いです。


そこで、このパッケージでは、

「見ようと思っている変数が、クラスタ内でなるべく散らばらないクラスタ数」

を採用しています。



使い方

  • ykmeans (x, variable.names, target.name, k.list, n)
x データフレーム
variable.names クラスタリングの時の使う説明変数
target.name クラスタ間で比較しようと思っている変数
k.list クラスタ数候補
n 試行回数
実行例
  • 使うデータ
library(ykmeans)

head(actData)
##       y x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17
## 1 17030  7  3  4  3  3  3  3  2  3   3   1   2   3   2   2   2   2
## 2  1360  5  3  4  4  2  4  3  0  4   2   2   2   2   1   2   2   1
## 3  1360  7  4  3  4  2  4  3  3  2   3   2   2   2   2   2   2   1
## 4   100  5  2  3  2  3  1  2  3  2   1   2   1   1   2   1   0   1
## 5   320  4  3  3  2  3  1  2  2  1   1   2   2   1   1   2   1   0
## 6  2820  7  4  3  4  3  4  3  3  2   3   3   1   2   2   2   1   1
ykm <- ykmeans(actData, paste0("x", 1:17), "y", 3:6)
table(ykm$cluster)
## 
##   1   2   3   4   5 
## 140  92  16 148 104
    • このデータでは、3〜6個のクラスタ数を試して「5」が採用されています。

@_@@_@ 2014/03/17 19:10 k-meansの出力が安定するありがたいパッケージです。
データによると思うのですが、クラスタ数を5に設定して、4つしかクラスタが出来なかった時に出力されるクラスタ番号が飛ぶようです。
また、その結果はクラスタ数4でインプットした時に出力される結果と異なります

大した問題ではありませんが・・

yokkunsyokkuns 2014/03/17 20:02 ご連絡ありがとうございます!
ちょっと確認してみます。

@_@@_@ 2014/03/18 15:30 なんならデータとコード送ります。

yokkunsyokkuns 2014/03/20 13:40 お、是非お願いします!

@_@@_@ 2014/03/20 17:14 TokyoRのメアドに送りますね

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/yokkuns/20140316/1394975943
リンク元