ベイズ機械学習における学習による事後分布の推移 ~Bernoulli分布、Categorical分布、Poisson分布~

# <font color = 'forestgreen'>1. はじめに</font>  
* 今回はベイズ機械学習における離散型確率分布の学習による事後分布の推移をPythonを用いて可視化していきます。
* また、数式的な理解だけでなく視覚的に理解することで次の章である混合モデルへ繋げていくことも目的としています。
* 途中式については長さの関係上省きますが、参考資料に載せてあるしょこさんという方が書かれている[**からっぽのしょこ**](https://www.anarchive-beta.com)というブログが個人的にとても分かりやすいと思うのでそちらを参照してください。
# <font color = 'forestgreen'>2. ベイズ機械学習における学習とは　
ベイズ機械学習において学習とは、ある観測データが与えられたときにそのデータをもとにして
事前に設定しておいたパラメータの確率分布(<font color = 'Royal blue'>事前分布</font>)を真の確率分布に近づけていく過程のことを意味します。　
また、学習によって更新された確率分布のことを<font color = 'Royal blue'>事後分布</font>といい、事前分布と事後分布が同じ種類の確率分布をもつように設定された事前分布のことを<font color = 'Royal blue'>**共役事前分布**</font>といいます。
# <font color = 'forestgreen'>3. ベルヌーイ分布</font>
ベルヌーイ分布におけるパラメータはある事象が起きる確率を表す$u\in(0, 1)$であり、これに対する共役事前分布は**ベータ分布**とされているため、ベータ分布の推移について考えていく。
(本来はuではなくpを用いいるべきだが、確率分布と同じアルファベットを用いるのは気持ち悪いためuを用いる。)
##### [事前分布]
$$
p(u) = Beta(u\ |\ a, b) \\\\
[a\in \mathbb{R}^D, b \in \mathbb{R}^D:ハイパーパラメータ]
$$
* N個のデータ点 $X = \lbrace x_1,\cdots, x_N \rbrace$ を観測した後の事後分布は以下のようになる。
##### [事後分布]
$$
p(u | X) = Beta(u\ |\ \hat{a} \ ,\hat{b}  \ )\\\\
\left[
\begin{array}{l}
\hat{a} =  \sum_{n = 1}^{N}x_n + a\\\\
\hat{b} = N - \sum_{n = 1}^{N} + b
\end{array}
\right]
$$
* この更新をNの値の変化に伴う事後分布の推移として捉えて作成したアニメーション
![Bernoulli_事後.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983590/cc65293f-bd92-aa54-51d3-b7c8575dedc1.gif)

# <font color = 'forestgreen'>4. カテゴリ分布</font>
カテゴリ分布におけるパラメータはあるK個の各事象が起きる確率を表し、$\pi\in(0, 1)かつ\sum_{k=1}^{K}\pi_k=1$を満たすπであり、これに対する共役事前分布は**ディリクレ分布**とされているため、ディリクレ分布の推移について考えていく。
##### [事前分布]
$$
p(\pi ) = Dir(\pi \ |\ \boldsymbol{\alpha}) \\\\
[\boldsymbol{\alpha} =\lbrace \alpha_1, \cdots , \alpha_k\rbrace :ハイパーパラメータ, \alpha_k \in \mathbb{R}^+]
$$
* カテゴリ分布に従うN個の離散値データ $S = \lbrace s_1,\cdots, s_N \rbrace$ を観測した後の事後分布は以下のようになる。
##### [事後分布]
$$
p(\pi\ |\ S) = Dir(\pi\ |\ \hat{\boldsymbol{\alpha}}  \ )\\\\
\left[
\hat{\alpha_k} =  \sum_{n = 1}^{N}s_{n, k} + \alpha_k \quad k = 1, \cdots ,K
\right]
$$
* この更新をNの値の変化に伴う事後分布の推移として捉えて作成したアニメーション
(今回はK = 3の時のディリクレ分布を等高線を用いたヒートマップでグラフ表示している。)
![Categorical_事後.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983590/07d63e14-e858-c48c-942a-fd612f0b4675.gif)

# <font color = 'forestgreen'>5. ポアソン分布</font>
ポアソン分布におけるパラメータは分布の形状を決める$\lambda \in \mathbb{R}^+$であり、これに対する共役事前分布は**ガンマ分布**とされているため、ガンマ分布の推移について考えていく。
##### [事前分布]
$$
p(\lambda) = Gam(\lambda \ |\ a, b) \\\\
[a\in \mathbb{R}^+, b \in \mathbb{R}^+:ハイパーパラメータ]
$$
* ポアソン分布に従っていると仮定したN個の非負の離散値 $X = \lbrace x_1,\cdots, x_N \rbrace$ を観測した後の事後分布は以下のようになる。
##### [事後分布]
$$
p(\lambda | X) = Gam(\lambda \ |\ \hat{a} \ ,\hat{b}  \ )\\\\
\left[
\begin{array}{l}
\hat{a} =  \sum_{n = 1}^{N}x_n + a\\\\
\hat{b} = N + b
\end{array}
\right]
$$
* この更新をNの値の変化に伴う事後分布の推移として捉えて作成したアニメーション
![Poisson_事後.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983590/a1114817-db9f-86da-2bd6-112b87585cd3.gif)

# <font color = 'forestgreen'>6. まとめ</font>
今回は離散型確率分布に関する学習過程について数式をコードに落とし、Animationを作成することで理解を深めました。 
## <font color = 'forestgreen'>7. 参考資料</font>
◆ [**機械学習スタートアップシリーズ ベイズ推論による機械学習入門**](https://bookclub.kodansha.co.jp/product?item=0000148222)
◆ [**からっぽのしょこ**](https://www.anarchive-beta.com)