Model)のギブズサンプリング(MCMC)による推論を、3次元にカスタマイズした3D-IRM(勝手に名前)をPythonで実装します。モデルと推論方法に関しては、書籍「続・わかりやすいパターン認識」の13章を参考にしています。詳しくはこちらをご参照ください。見る今回のコードを全てgithubに載せています。遊べるようにnotebookもつけてます。twitterはこちら無限関係モデルとは?詳しくは書籍「続・わかりやすいパターン認識」の13章を参考にしてください。ここでは簡単に説明します。Model:IRM)とは、異種オブジェクトを同時にクラスタリングする共クラスタリング手法の一つで、ノンパラメトリックベイズに基づきます。言うと、データの値は「1」か「0」で、軸毎にカチャカチャ入れ替えて、「1」が比較的多いグループと「0」が比較的多いグループにクラスタリングするイメージです。下図が3D-IRMによるクラスタ結果の例です。「1」のみをプロットしています。ルービックキューブみたいです。Z軸は固定」と動かし方に制限があるところです。元のトイデータを4×4×4のキューブで全て統一していますが、データ次第ではクラスタ毎にバラバラの大きさになります。(同軸上の長さは固定)ノンパラメトリックベイズなので、クラスタ数は予め決めず、データから自動で推論してくれます。Process、略してCRP)に従って独立に各軸がクラスタリングされると仮定しています。k)\)毎にパラメータ\(\theta_{ijk}\)がベータ分布から別々に決まり、1セルずつ\(R_{xyz}\)(「1」か「0」)がベルヌーイ分布から生成されるといった具合です。z)軸に(店舗、顧客、商品)をセットして、購入したを「1」、購入しないを「0」とすると、各クラスターから「この(地域A)では、(顧客層B)に対して、(商品カテゴリーC)が売れやすい、売れにくい」などが分かります。z)に何をセットするかは自由です。応用幅は広いと思います。モデルに関しては以上で、推論方法について書籍では、崩壊型ギブスサンプリングで数式と手続きが書かれているのですが、今回は自分の勉強のために普通のギブスサンプリングに直して実装しました。ギブズサンプリングとは?MCMCの一手法で、各パラメーター毎にそれ以外のパラメーターで条件付けした分布から、順にサンプリングしていく手法です。Carlo)とは違い、自動化が難しい手法になっています。ギブズサンプリングは、推移核を工夫したメトロポリス・ヘイスティング法(MH法)とも解釈ができ、MH法で言うところの採択率が1になり、サンプルが棄却されないことで知られています。1パラメーターずつサンプルしていくため、各軸平行に直角にサンプル点が動いていくイメージです。そのためパラメーター間の相関が強い分布に対しては、サンプリング数が多く必要になります。パラメーターの条件付き分布がいつも簡単にサンプリングできる分布になるとは限らないので要注意です。s}\)の条件付き分布が中華料理店過程にちょうど対応します。\Theta\)を最終結果として採用します。実装ほとんどNumpyとScipyで実装しました。データも自分で作成しています。出来るだけfor文を使わずにNumpyで書くようにしたので可読性は低いです(Numpyのせいにする)。それでも次元を増やしすぎると極端に遅くなります。3D-IRMによる共クラスタリングアルゴリズムの箇所です。max_theta早い段階で更新されなくなり局所解にはまっている印象を受けたので数十サンプル毎にパラメーターを初期化して、広範囲探索するようにしました。具体的なギブズサンプリングの部分です。theta今回、ギブズサンプリングを使用していますが、ベルヌーイ分布のパラメーターだけはサンプリングせず、条件付き分布の平均値をサンプルとみなして使っています。(この手法もなんか名前があるらしい)サンプリングしてもOKです。軸毎に\(s\)をサンプルする毎にベルヌーイ分布のパラメーターもサンプル。\(s_x\)→\(\Theta\)→\(s_y\)→\(\Theta\)→\(s_z\)→\(\Theta\)と更新しています。今回のコードを全てgithubに載せています。遊べるようにnotebookもつけてます。githubはこちら動かしてみたまずは、見やすさのためベルヌーイ分布のパラメーターを1か0にした超理想的なデータに適用しました。クラスタリング手法なのでデータによって、局所解が多く存在します。次にノイジーなデータにも試しました。パラメーターが0.8と0.2と0の3種類のベルヌーイ分布で生成しました。クラスタ数(4,4,4)で推定できました。X軸で切ってクラスタ毎のパラメータ\(\Theta\)を可視化しました。0.2や0.8付近ででまとまっています。今回のコードを全てgithubに載せています。遊べるようにnotebookもつけてます。»プロフィールid:gashin_learning新卒入社したコンサル会社にてデータ分析しています。サルとエンジニアを兼務しています。【Python実装】HMM(隠れマルコフモデル)を構造化変分ベイズで推論はてなブログをはじめよう!gashin_learningさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。