@siero5335
#ぞくパタ ドワンゴ様@東銀座 2016/1/12
第15回「続・わかりやすいパターン認識」読書会第13章: 共クラスタリング
目次
13.1 関係データに対する共クラスタリング 13.2 無限関係モデル 13.3 IRMの学習
13.1 関係データに対する共クラスタリング
13.1 関係データに対する共クラスタリング
共クラスタリングとは?
顧客と商品など、人と人、人とモノのつながりを表す関係データを上手く扱うための手法
顧客だけ、商品だけのクラスタリングはこれまでもやってきたが、共クラスタリングでは行・列双方を適切に並び替えることで、顧客・商品を同時にクラスタリングできるようにな。
このように、異なる種類のオブジェクトを同時にクラスタリングする手法を共クラスタリングと呼ぶ
13.1 関係データの例
1 2 3
1 2 3 4
1 2 3 4
1
2
3
商品
顧客
オブジェクト間のつながりをエッジとしたグラフで、あるいは、オブジェクト間にエッジがある時を1、ない時を0とする2値行列で表現できる。
13.1 共クラスタリング色々
From K-‐means to higher-‐way co-‐clustering: mul:linear decomposi:on with sparse latent factors h>ps://www.cs.cmu.edu/~epapalex/papers/PapSidBroTSP2011R2.pdf K-‐means, ユークリッド距離を基にした共クラスタリング
"blockcluster: Coclustering Package for Binary, Categorical, Con:ngency and Con:nuous Data-‐Sets” h>ps://cran.r-‐project.org/web/packages/blockcluster/index.html EMアルゴリズムを基にした共クラスタリング
13.1 共クラスタリング実行例 "blockcluster: Coclustering Package for Binary, Categorical, Con:ngency and Con:nuous Data-‐Sets” h>ps://cran.r-‐project.org/web/packages/blockcluster/index.html
パッケージ解説はこちら: h>p://qiita.com/siero5335/items/f8e704035d7bdd5965be
EMアルゴリズムを基にした共クラスタリング
13.1 共クラスタリング実行例 "blockcluster: Coclustering Package for Binary, Categorical, Con:ngency and Con:nuous Data-‐Sets” h>ps://cran.r-‐project.org/web/packages/blockcluster/index.html
パッケージ解説はこちら: h>p://qiita.com/siero5335/items/f8e704035d7bdd5965be
尤度を見ながらクラスタ数を最適化していく
13.1 共クラスタリング実行例 "blockcluster: Coclustering Package for Binary, Categorical, Con:ngency and Con:nuous Data-‐Sets” h>ps://cran.r-‐project.org/web/packages/blockcluster/index.html
パッケージ解説はこちら: h>p://qiita.com/siero5335/items/f8e704035d7bdd5965be
つまりクラスタ数は自分で決めないとだめ
13.1 共クラスタリング色々 From K-‐means to higher-‐way co-‐clustering: mul:linear decomposi:on with sparse latent factors h>ps://www.cs.cmu.edu/~epapalex/papers/PapSidBroTSP2011R2.pdf K-‐means, ユークリッド距離を基にした共クラスタリング
"blockcluster: Coclustering Package for Binary, Categorical, Con:ngency and Con:nuous Data-‐Sets” h>ps://cran.r-‐project.org/web/packages/blockcluster/index.html EMアルゴリズムを基にした共クラスタリング
本書 無限関係モデル(IRM)による共クラスタリング ノンパラベイズに基づいてるからクラスタ数も自動決定できるよ!
顧客と商品の例なら観測データから同時にクラスタリングすることで、どんな顧客がどんな商品を買うかの関係を自動抽出することに相当
13.2 無限関係モデル (IRM)
当
13.2 無限関係モデル (IRM)
当
K: 顧客の総数 L: 商品の総数 R: 顧客・商品の関係を表す行列 Rkl: Rの(k, l)成分 Rkl =1: 顧客kが商品lを購入した Rkl =0:顧客kが商品lを購入しなかった S1: 顧客に対する潜在変数 S2: 商品に対する潜在変数 c1: 顧客クラスタの数 c2: 商品クラスタの数 ω1
i: i番目の顧客クラスタ ω2
j: j番目の商品クラスタ S1k: 顧客kの所属する顧客クラスタ S2l: 商品lの所属する商品クラスタ S1k = ω1
i: 顧客kが顧客クラスタω1に属する S2l: =ω2
j: 商品lが顧客クラスタω2jに属する
θij = θ(ω1
i, ω2j): (i, j)のパラメータブロック
def
13.2 無限関係モデル (IRM)
s!|!α!~!"#(α) s!|!α!~!"#(α) !"#!! = 1,… ,!, !"#!! = 1,… , !,
CRPの事前分布で顧客クラスタS1、商品クラスタS2が独立に分割される
13.2 無限関係モデル (IRM)
s!|!α!~!"#(α) s!|!α!~!"#(α) !"#!! = 1,… ,!, !"#!! = 1,… , !, !!"|!!! = !ω!
! , !!! = !ω!! ,Θ~!!"#$(!!" :!θ!") !!! = ω!
! , !!! = ω!!���� θ !!! , !!! = θ ω!! ,ω!! = !θ!"
CRPの事前分布で顧客クラスタS1、商品クラスタS2が独立に分割される
となり、顧客商品の関係を表す行列Rklが パラメータθijのベルヌーイ分布Bern(Rkl:θij)から生成される
13.2 無限関係モデル (IRM)
s!|!α!~!"#(α) s!|!α!~!"#(α) !"#!! = 1,… ,!, !"#!! = 1,… , !,
θ !!! , !!! |!, !!~!"(!, !)
!!"|!!! = !ω!! , !!! = !ω!! ,Θ~!!"#$(!!" :!θ!")
!!! = ω!! , !!! = ω!!���� θ !!! , !!! = θ ω!
! ,ω!! = !θ!" となり、顧客商品の関係を表す行列Rklが パラメータθijのベルヌーイ分布Bern(Rkl:θij)から生成される
θijは区間[0,1]の値を取るので、θijの事前分布として パラメータa, bのベータ分布Be(a,b)を取る
CRPの事前分布で顧客クラスタS1、商品クラスタS2が独立に分割される
13.2 無限関係モデル (IRM)
� � � � � � � �� � � �� � � � � �
� �
� ��
� �
� �
� �
� ��
� �
��
�
�� ��
�� �
��
��
�� ��
�� ��
商品
顧客
共クラスタリング
13.2 無限関係モデル (IRM)
� � � � � � � �� � � �� � � � � �
� �
� ��
� �
� �
� �
� ��
� �
��
�
�� ��
�� �
��
��
�� ��
�� ��
商品
顧客
共クラスタリング
ω11
ω21
ω31
ω41
ω12 ω2
2 ω32
15人の顧客が4つ、10種の商品が3つのクラスタに分割される
13.2 無限関係モデル (IRM)
� � � � � � � �� � � �� � � � � �
� �
� ��
� �
� �
� �
� ��
� �
��
�
�� ��
�� �
��
��
�� ��
�� ��
商品
顧客
共クラスタリング
i = 1
2
3
4
j =1 2 3
θij = 0.2 θij = 0.9
θij = 0.1
θij = 0 θij = 0.7
θij = 0.7
θij = 0.1
θij = 0.9
θij = 0.2
θij = 0.9
θij = 0.1 θij = 0.1
顧客クラスタi, 商品クラスタjの直積からなる各(i, j) ブロックに対し、 θijの値(0≤θij≤1)がベータ分布から決定される
13.2 無限関係モデル (IRM)
� � � � � � � �� � � �� � � � � �
� �
� ��
� �
� �
� �
� ��
� �
��
�
�� ��
�� �
��
��
�� ��
�� ��
商品
顧客
共クラスタリング
i = 1
2
3
4
j =1 2 3
θij = 0.2 θij = 0.9
θij = 0.1
θij = 0 θij = 0.7
θij = 0.7
θij = 0.1
θij = 0.9
θij = 0.2
θij = 0.9
θij = 0.1 θij = 0.1
θ12の大半は1
θ12 = 0.9よりRklが0.9の確率で1を発生させるベルヌーイ分布から決まるため
θijは顧客クラスタω1iと商品クラスタω2
jの関係を表す確率に相当する。
13.2 無限関係モデル (IRM)
� � � � � � � �� � � �� � � � � �
� �
� ��
� �
� �
� �
� ��
� �
��
�
�� ��
�� �
��
��
�� ��
�� ��
商品
顧客
共クラスタリング
i = 1
2
3
4
j =1 2 3
θij = 0.2 θij = 0.9
θij = 0.1
θij = 0 θij = 0.7
θij = 0.7
θij = 0.1
θij = 0.9
θij = 0.2
θij = 0.9
θij = 0.1 θij = 0.1
ベータ分布のパラメータa, bの値を変えることでθijの値が[0,1]の範囲で変化する。このため、α, a, bの値を変えることでIRMからさまざまな関係データ行列を生成することができる。
13.3 IRMの学習
13.3 IRMの学習 各オブジェクトの所属クラスタ (s1, s2) が既知であれば、その情報と観測データから共クラスタリングが可能だが、実際に既知なのは観測データのみ
IRMの学習は、観測データの背後にある共クラスタリング構造(s1, s2) を、観測データとIRMの生成モデルから推定すること
13.3 IRMの学習 各オブジェクトの所属クラスタ (s1, s2) が既知であれば、その情報と観測データから共クラスタリングが可能だが、実際に既知なのは観測データのみ
IRMの学習は、観測データの背後にある共クラスタリング構造(s1, s2) を、観測データとIRMの生成モデルから推定すること
具体的には、観測データRが得られた下で、下記で示されたパラメータを積分消去して得られたs1, s2の事後確率を最大化するs1, s2を求める問題に帰着
! !! , !! ! = !! ! !! , !! ! !! !(!!)!(!)
13.3 IRMの学習 各オブジェクトの所属クラスタ (s1, s2) が既知であれば、その情報と観測データから共クラスタリングが可能だが、実際に既知なのは観測データのみ
IRMの学習は、観測データの背後にある共クラスタリング構造(s1, s2) を、観測データとIRMの生成モデルから推定すること
具体的には、観測データRが得られた下で、下記で示されたパラメータを積分消去して得られたs1, s2の事後確率を最大化するs1, s2を求める問題に帰着
ここで、s1, s2の事前分布P(s1), P(s2)はいずれもCPR(α) ディリクレ過程混合モデルに対するギブスサンプリングで (s1, s2)を逐次サンプリングし、P(s1, s2|R)を最大化する(s1, s2)を解とする
! !! , !! ! = !! ! !! , !! ! !! !(!!)!(!)
13.3 IRMの学習: 用語追加
当
K: 顧客の総数 L: 商品の総数 R: 顧客・商品の関係を表す行列 Rkl: Rの(k, l)成分 Rkl =1: 顧客kが商品lを購入した Rkl =0:顧客kが商品lを購入しなかった S1: 顧客に対する潜在変数 S2: 商品に対する潜在変数 c1: 顧客クラスタの数 c2: 商品クラスタの数 ω1
i: i番目の顧客クラスタ ω2
j: j番目の商品クラスタ S1k: 顧客kの所属する顧客クラスタ S2l: 商品lの所属する商品クラスタ S1k = ω1
i: 顧客kが顧客クラスタω1に属する S2l: =ω2
j: 商品lが顧客クラスタω2jに属する
θij = θ(ω1
i, ω2j): (i, j)のパラメータブロック
def
Rk,+:顧客kの全商品に対する購買情報 R-‐k,+: RからRk,+を除いた余りの要素集合 S1-‐k: S1からS1kを引いた余りの要素集合 n1i: 顧客クラスタω1
iに属するk以外の顧客数 θi,+: (i,j)ブロックのパラメータ集合
13.3 IRMの学習 このs1kをギブスサンプリングするための事後確率は以下の通り
!!! = !ω!! !! ,!!, !!!! , !! ,!!! ,! ∝ !! !!! = !ω!
! !!!! !(!! ,!!|!!! = !ω!! , !! ,!!! ,!)
13.3 IRMの学習: 事後確率右辺第1項
! !!! = !ω!! !!!!
!!!! − 1+ α
α! − 1+ α
このs1kをギブスサンプリングするための事後確率は以下の通り
!!! = !ω!! !! ,!!, !!!! , !! ,!!! ,! ∝ !! !!! = !ω!
! !!!! !(!! ,!!|!!! = !ω!! , !! ,!!! ,!)
既存クラスタ
新規クラスタ
(!! ,!!|!!! = !ω!! , !! ,!!! ,!) ∝
!!! = !ω!! !! ,!!, !!!! , !! ,!!! ,! ∝ !! !!! = !ω!
! !!!! !(!! ,!!|!!! = !ω!! , !! ,!!! ,!)
13.3 IRMの学習: 事後確率右辺第2項 このs1kをギブスサンプリングするための事後確率は以下の通り
!(!
!!" !!! = !ω!! , !! , θ!,! !(θ!,!|!!! = !ω!
! , !!!! , !! ,!!! ,!)!θ!,!
!(!
!!" !!! = !ω!! , !! , θ!,! !!(θ!,!)!θ!,!
既存クラスタ
新規クラスタ
!(!
!!" !!! = !ω!! , !! , θ!,! !(θ!,!|!!! = !ω!
! , !!!! , !! ,!!! ,!)!θ!,!
(!! ,!!|!!! = !ω!! , !! ,!!! ,!) ∝
!!! = !ω!! !! ,!!, !!!! , !! ,!!! ,! ∝ !! !!! = !ω!
! !!!! !(!! ,!!|!!! = !ω!! , !! ,!!! ,!)
13.3 IRMの学習: 事後確率右辺第2項, 尤度項 このs1kをギブスサンプリングするための事後確率は以下の通り
!(!
!!" !!! = !ω!! , !! , θ!,! !!(θ!,!)!θ!,!
既存クラスタ
新規クラスタ
!!
!!" !!! = ω!! , !! , θ!,! = ! !
!!(!!"|θ!")!!!(!).!!!(!)
= θ!"!(! ,!)(!,!)!
(1− θ!")!(! ,!)(!,!) 尤度項
13.3 IRMの学習: 事後確率右辺第2項, 尤度項
!!
!!" !!! = ω!! , !! , θ!,! = ! !
!!(!!"|θ!")!!!(!).!!!(!)
= θ!"!(! ,!)(!,!)!
(1− θ!")!(! ,!)(!,!)
. δ!!(!) δ!! (!) 1 (s1k = ω1
i)
otherwise
1 (s2l = ω2j)
otherwise
! ! ,! !,! = !!"�δ!!
(!)�δ!(!)
! ! ,! !,! = ! (1− !!")�δ!!
(!)�δ!(!)
尤度項
13.3 IRMの学習: 事後確率右辺第2項, 尤度項
!!
!!" !!! = ω!! , !! , θ!,! = ! !
!!(!!"|θ!")!!!(!).!!!(!)
= θ!"!(! ,!)(!,!)!
(1− θ!")!(! ,!)(!,!)
. δ!!(!) δ!! (!) 1 (s1k = ω1
i)
otherwise
1 (s2l = ω2j)
otherwise
n(k,+)(i,j): 商品ω2jに属する商品のうち顧客ω1
iに属する顧客kが買った商品数 n(k,+)(i,j): 商品ω2
jに属する商品のうち顧客ω1iに属する顧客kが買わなかった
商品数
! ! ,! !,! = !!"�δ!!
(!)�δ!(!)
! ! ,! !,! = ! (1− !!")�δ!!
(!)�δ!(!)
!(!
!!" !!! = !ω!! , !! , θ!,! !(θ!,!|!!! = !ω!
! , !!!! , !! ,!!! ,!)!θ!,! 既存クラスタ
13.3 IRMの学習: 既存クラスタ右辺第2項
! θ!,! !!! = !ω!! , !!!! , !! ,!!! ,!
= ! θ!" !!! = !ω!! , !!!! , !! ,!!! ,!
!
= ! P(!!! ,!|!!!!! , !! , θ!")!(θ!")P(!!! ,!|!!!!! , !! , θ!")!(θ!")!θ!"!
= ! ( P !!!! θ!" !!!(!)�!!(!)!!!!! )! !(θ!")
( P !!!! θ!" !!!(!)�!!(!)!!!!! )! !(θ!")!θ!"!
ここで、p(θij) = Be(θij; a,b)とすると、
!(θ!"|!!! = !ω!! , !! ,!!! ,!) = !"(θ!" ;! ! ,! !,! + !,! ! ,! !,! + !)
= θ!"!(! ,!)(!,!)!
(1− θ!")!(! ,!)(!,!)
13.3 IRMの学習: 既存クラスタ右辺第2項
!(θ!"|!!! = !ω!! , !! ,!!! ,!) = !"(θ!" ;! ! ,! !,! + !,! ! ,! !,! + !)
!(!
!!" !!! = !ω!! , !! , θ!,! !(θ!,!|!!! = !ω!
! , !!!! , !! ,!!! ,!)!θ!,!
上記を下式に代入すると
!(!! ,!!|!!! = !ω!! , !! ,!!! ,!)
=θ!"! !,! !,! !!!! (1− θ)! !,! !,! !!!!!θ!"!(! !! ,! !,! + !,! !! ,! !,! + !)!
= !(! !,! !,! + !,! !,! !,! + !)!(! !! ,! !,! + !,! !! ,! !,! + !)!
Bはベータ分布
ωiが既存クラスタのとき
13.3 IRMの学習: 新規クラスタ
!(!
!!" !!! = !ω!! , !! , θ!,! !!(θ!,!)!θ!,!
!(!! ,!!|!!! = !ω!! , !! ,!!! ,!)
= θ!"!(! ,!)(!,!)!
(1− θ!")!(! ,!)(!,!)
!(θ!"|!!! = !ω!! , !! ,!!! ,!) = !"(θ!" ;! ! ,! !,! + !,! ! ,! !,! + !)
上記を下式に代入すると
ωiが新規クラスタのとき
= !(! ! ,! !,! + !,! ! ,! !,! + !)!(!, !)
!
13.3 IRMの学習: S1k, S2lの事後確率 !(!!! = ω!
!|!!! ,!!, !!!! , !! ,!!! ,!) ∝ !!!
! − 1+ α!(! !,! !,! + !,! !,! !,! + !)!(! !! ,! !,! + !,! !! ,! !,! + !)
α! − 1+ α
!(! ! ,! !,! + !,! ! ,! !,! + !)!(!, !)
既存クラスタ
新規クラスタ
S1kの事後確率
13.3 IRMの学習: S1k, S2lの事後確率 !(!!! = ω!
!|!!! ,!!, !!!! , !! ,!!! ,!) ∝ !!!
! − 1+ α!(! !,! !,! + !,! !,! !,! + !)!(! !! ,! !,! + !,! !! ,! !,! + !)
α! − 1+ α
!(! ! ,! !,! + !,! ! ,! !,! + !)!(!, !)
!(!!! = ω!!|!!!,!!, !!!! , !! ,!!,!!) ∝ !!!
! − 1+ α!(! !,! !,! + !,! !,! !,! + !)!(! !,!! !,! + !,! !,!! !,! + !)
α! − 1+ α
!(! !,! !,! + !,! !,! !,! + !)!(!, !)
既存クラスタ
新規クラスタ
既存クラスタ
新規クラスタ
S2lの事後確率
S1kの事後確率
13.3 IRMによる共クラスタリングアルゴリズム 入力: 関係データ行列R
出力: 行・列オブジェクトの所属クラスタを表す潜在変数 s1={s11... s1K}, s2={s21... s2L}, 行・列クラスタ数c1, c2
Step1: 初期設定 ・s1, s2を初期化(行・列クラスタ数をc1, c2とする) ・事後確率の最大値をPmax <- 0とする
13.3 IRMによる共クラスタリングアルゴリズム 入力: 関係データ行列R
出力: 行・列オブジェクトの所属クラスタを表す潜在変数 s1={s11... s1K}, s2={s21... s2L}, 行・列クラスタ数c1, c2
Step1: 初期設定 ・s1, s2を初期化(行・列クラスタ数をc1, c2とする) ・事後確率の最大値をPmax <- 0とする
Step2: 所属クラスタの更新 ・行オブジェクトkの所属クラスタs1K更新のためにkをクラスタ から除外する ・空きクラスタが発生すればc1 <- c1-1として取り除き、i以降の クラスタインデックスを1減らす ・ からs1Kを確率的に求める ・列についても同様にクラスタを更新する !(!!! = ω!
!|!!! ,!!, !!!! , !! ,!!! ,!) ∝
13.3 IRMによる共クラスタリングアルゴリズム
Step3: 事後確率最大化
! !! , !! ! = !! ! !! , !! ! !! !(!!)!(!)
・今のs1, s2から下式を使って事後確率vを計算する
! !! , !! ! !∝ ! !! !! !(!|!! , !!)
= ! !! !! !(!!" θ!" !! θ!! !θ!!!!
!!!
!!
!!!
= ! v > Pmaxなら(事後確率の最大値が更新されたら) Pmax <- v, s1<- {s11... s1K}, s2<- {s21... s2L} それ以外ならPmax, s1, s2 を保持する
13.3 IRMによる共クラスタリングアルゴリズム
Step3: 事後確率最大化
! !! , !! ! = !! ! !! , !! ! !! !(!!)!(!)
・今のs1, s2から下式を使って事後確率vを計算する
! !! , !! ! !∝ ! !! !! !(!|!! , !!)
= ! !! !! !(!!" θ!" !! θ!! !θ!!!!
!!!
!!
!!!
= ! v > Pmaxなら(事後確率の最大値が更新されたら) Pmax <- v, s1<- {s11... s1K}, s2<- {s21... s2L} それ以外ならPmax, s1, s2 を保持する Step4: 収束判定 ・Pmaxが更新されなくなったらギブスサンプリング終了 ・更新されるなら2に戻る