コサイン類似度を用い
た
クラスタリング
@bob3bob3
Tokyo.R #54
2016/06/19
お伝えしたいこと
● いわゆるビッグデータによくあるスパースな行
列のクラスタリングにはコサイン類似度を使う
といい感じだよ。
● コサイン類似度を用いたクラスタリングは
skmeansパッケージで実行できるよ。
●
このLTの内容は『マーケティング・サイエンス
のトップランナーたち』の第2章「商品市場を
細分化するビッグデータ適合型クラスター分析
の活用」がネタ元だよ。
同じような購買傾向の消費者を
グループ化したい
ケース1 ビール ワイン 日本酒 焼酎 ウイス
キー
Aさん 1 1
Bさん 1
ケース2 ビール ワイン 日本酒 焼酎 ウイス
キー
Cさん 1 1 1
Dさん 1 1 1 1
この二人は別々のグループにしたい
この二人は同じグループにしたい
K-means法で使用される
ユークリッド距離だと
ケース1 ビール ワイン 日本酒 焼酎 ウイス
キー
Aさん 1 1
Bさん 1
ケース1 ビール ワイン 日本酒 焼酎 ウイス
キー
Aさん 1 1 1
Bさん 1 1 1 1
ユークリッド距離:1.732
ユークリッド距離:1.732
1-コサイン類似度だと
ケース1 ビール ワイン 日本酒 焼酎 ウイス
キー
Aさん 1 1
Bさん 1
ケース1 ビール ワイン 日本酒 焼酎 ウイス
キー
Aさん 1 1 1
Bさん 1 1 1 1
1−コサイン類似度:1.000
1−コサイン類似度:0.423
skmeansパッケージを使ってみる
# 関連規則のパッケージに入っているサンプルデータを使う
library(arules)
# transactions形式のサンプルデータ
data(Groceries)
#スパースなデータを扱いやすくするパッケージ。圧倒的に処理が早い。
library(slam)
#transactions形式からmatrix形式に
Groceries.mat <- as(Groceries,"matrix")
#真偽値を0/1に変換
Groceries.mat <- ifelse(Groceries.mat==TRUE,1,0)
#matrix形式からstm形式へ
Groceries.stm <- as.simple_triplet_matrix(Groceries.mat)
skmeansパッケージを使ってみる
library(skmeans) #コサイン距離を使ったkmeans
set.seed(1234) #再現性のための乱数種設定
res <- skmeans(Groceries.stm, k=05)
table(res$cluster) #各クラスタのサイズ
aggregate(Groceries.mat, by=list(res$cluster), mean)
Enjoy!

コサインクラスタリング