パターン認識と機械学習 : ベータ分布
ベータ分布
第2章の確率分布の一番最初に紹介されているベータ分布についての備忘録です.
ベータ分布を考える理由
ベルヌーイ分布と二項分布のパラメータを最尤推定で求めた結果はで、データ集合中でとなる観測値の割合になります. (はとなる観測値の数です.)
しかし、例えば3回の試行中3回とも表が出た場合にとなってしまい今後もずっと表が出るように予測することになります.
これは間違いなく過学習です.
そこで、この問題をベイズ主義的に扱うことを考える.
ベイズの定理は、 $$ p(x|y) = \frac{p(y|x)p(x)}{p(y)} $$ であり、を事前分布、を事後分布と呼びます.
したがって、ベイズ主義的立場でパラメータを推定するときには、パラメータの事前分布を考え、事後分布を最大にしたりすることをします.
そこで、今回はベルヌーイ分布や二項分布のパラメータの事前分布であるベータ分布についてまとめます.
ベータ分布について
まずベルヌーイ分布や二項分布の尤度はの形をしています.
したがって、事前分布をとのべき乗に比例するように選べば、事後分布は事前分布と同じ形になります.
なぜなら事後分布は尤度と事前分布に比例するからです. (この性質は共役性と呼ばれています.)
したがって、事前分布には事後分布と共役なものを選ぶと良いです.
このことから、ベルヌーイ分布や二項分布のパラメータの事前分布には次のベータ分布を選びます. $$ Beta(\mu|a,b) = \frac{\Gamma(a+b)}{\Gamma(a)\Gamma(b)}\mu^{a-1}(1-\mu)^{b-1} $$
ただし、はガンマ関数と呼ばれ、で定義されています.
また、はパラメータの分布を決めるためのパラメータで超パラメータ(hyperparameter)と呼ばれます.
に依存する部分だけを取り出すと事後分布は、 になるのは容易に確かめられます. (ただし、には注意が必要です.)
この式は事前分布の共役性によって事前分布と同じ形になっていることがわかります.
参考程度に、ベータ分布を実装したコードを以下に示します.
ベータ分布の実装例
#coding: utf-8 import numpy as np import matplotlib.pyplot as plt import matplotlib.mlab as mlab from scipy.special import gamma N = 100 alpha = [0.1,1.0,2.0,8.0,10.0] beta = [0.1,1.0,3.0,4.0,10.0] p = np.linspace(0.0,1.0, N) print p for a,b in zip(alpha,beta): y = (gamma(a+b)/(gamma(a)*gamma(b))) * pow(p,a - 1) * pow(1-p,b - 1) plt.plot(p,y,label = "a = " + str(a) + " b = " + str(b)) plt.legend(loc = "upper right") plt.savefig("beta.png") plt.show()
また、超パラメータを色々な値に設定した時のベータ分布の図を以下に載せます.