PyMC3における確率分布(Probability Distributions)の実装|PyMC3チュートリアルに学ぶ統計モデリング #4

f:id:lib-arts:20200902205650p:plain

当シリーズではPyMC3のチュートリアルを元に統計モデリングについて確認しています。PyMC3はベイズ統計モデリングのためのPythonのパッケージで、Pythonにおいてベイズ統計を取り扱うにあたってはデファクトとみて良いパッケージだと思います。
#1〜#3ではPyMC3の概要の把握、インストールと簡単な動作確認、線形回帰やロジスティック回帰の例を元にした実装例の確認などを行いました。

#3までで大体の流れはわかったものの、Rライクなインターフェースにおける事前分布などのデフォルトの設定が少しわかりづらかったため、#4以降では"Tutorial Notebooks"の内容を元に処理についてよりフォーカスしてドキュメントを確認していきます。

tutorials_notebooks — PyMC3 3.9.3 documentation

以下、目次になります。
1. Tutorial Notebooksについて
2. Probability Distributions in PyMC3について
3. まとめ


1. Tutorial Notebooksについて
1節では"Tutorial Notebooks"のページについて簡単に確認に確認しておきます。

f:id:lib-arts:20200904160049p:plain

tutorials_notebooks — PyMC3 3.9.3 documentation

"Tutorial Notebooks"では上記のように様々なチュートリアルが記載されています。

f:id:lib-arts:20200904160311p:plain

今回のテーマである確率分布(Probability Distributions)の冒頭部の書き出しは上記のようになっていますが、#2や#3で確認した"Examples"の中でもメインの処理について解説してくれているようです。このように"Examples"では実際の問題に対する分析が中心でしたが、チュートリアルなのでそれぞれのコンポーネント単位で解説を行ってくれているようです。

"Tutorial Notebooks"について大体の雰囲気が確認できたので1節はここまでとします。


2. Probability Distributions in PyMC3について

f:id:lib-arts:20200904160311p:plain

Probability Distributions in PyMC3 — PyMC3 3.9.3 documentation

2節では実際に"Probability Distributions in PyMC3"の内容に入っていきます。いくつか参照ページの記載を元に確認していきます。

f:id:lib-arts:20200904161345p:plain

上記ではPyMC3を用いたモデリングにおいて用いる確率分布の例として正規分布とベータ分布が挙げられています。まず正規分布について確認しますが、確率分布はパラメータを持ち、正規分布なので平均(mu)と分散(sigma)をパラメータとしています。さらに、正規分布の例はスカラーの変数(scalar variable)とされており、それに対しベクトル値の変数(vector-valued acriable)を取り扱う際はshapeを使って表すとされています(ベータ分布の例はshapeが用いられています)。

f:id:lib-arts:20200904162614p:plain
次に上記ではPyMC3における確率分布の実装に関してのクラスの継承関係について記載されています。Distributionが大元で、二つの主要なサブクラスとしてDiscreteとContinuousが紹介されています。それぞれDiscreteが離散、Continuousが連続の意味なので、それぞれ離散的な値を持つ確率分布と連続的な値を持つ確率分布を表していると考えて良いと思います。前述の正規分布とベータ分布はどちらも変数が連続的なので、Continuousの方に入ると考えて良いと思います。さらに、このDistributionを中心とする実装の主なメソッドとしてrandam()とlogp()が挙げられています。それぞれ、random()がMCMCなどの計算を行うにあたって乱数を発生させる内部メソッド、logp()は対数尤度を計算する内部メソッドとされています。

f:id:lib-arts:20200904163352p:plain

上記ではModelと同時に確率分布(Distribution)のクラスを用いる場合について記載されています。基本的な使い方としてはModelと同時にDistributionは用いるように実装されているものの、distメソッドを用いることでModelとは別に確率分布のクラスの実装を実行することができるとされています。

f:id:lib-arts:20200904163901p:plain

実際にチュートリアルの記載を元に実行してみると上記のようになります。

f:id:lib-arts:20200904164144p:plain

また、上記のように、PyMC3にデフォルトとして実装されていない確率分布を別途実装するなどでカスタマイズして使うということも可能なようです。上記ではexponential survival functionを元にした実装について紹介されています。

確率分布(Probability Distributions)に関するチュートリアルの記載は大体確認できたので2節はここまでとします。


3. まとめ
#4ではPyMC3における確率分布の取り扱いについてチュートリアルを読み進めました。
#5では"Examples"から"GLM: Hierarchical Linear Regression"について取り扱います。

GLM: Hierarchical Linear Regression — PyMC3 3.9.3 documentation

General API quickstart — PyMC3 3.9.3 documentation