プログラミング初心者の勉強日記

情報科学専攻です. 機械学習と競技プログラミングについて日々勉強しています.

MENU

パターン認識と機械学習 : ベータ分布

ベータ分布

第2章の確率分布の一番最初に紹介されているベータ分布についての備忘録です.

ベータ分布を考える理由

ベルヌーイ分布二項分布のパラメータ\muを最尤推定で求めた結果は\mu_{ML} = \frac{m}{N}で、データ集合中でx = 1となる観測値の割合になります. (mx = 1となる観測値の数です.)

しかし、例えば3回の試行中3回とも表が出た場合に\mu_{ML} = 1となってしまい今後もずっと表が出るように予測することになります.

これは間違いなく過学習です.

そこで、この問題をベイズ主義的に扱うことを考える.

ベイズの定理は、 $$ p(x|y) = \frac{p(y|x)p(x)}{p(y)} $$ であり、p(x)事前分布p(x|y)事後分布と呼びます.

したがって、ベイズ主義的立場でパラメータを推定するときには、パラメータの事前分布p(\mu)を考え、事後分布p(\mu|x)を最大にしたりすることをします.

そこで、今回はベルヌーイ分布や二項分布のパラメータの事前分布であるベータ分布についてまとめます.

ベータ分布について

まずベルヌーイ分布や二項分布の尤度\mu^{x}(1-\mu)^{1-x}の形をしています.

したがって、事前分布を \mu 1-\muのべき乗に比例するように選べば、事後分布は事前分布と同じ形になります.

なぜなら事後分布は尤度と事前分布に比例するからです. (この性質は共役性と呼ばれています.)

したがって、事前分布には事後分布と共役なものを選ぶと良いです.

このことから、ベルヌーイ分布や二項分布のパラメータの事前分布には次のベータ分布を選びます. $$ Beta(\mu|a,b) = \frac{\Gamma(a+b)}{\Gamma(a)\Gamma(b)}\mu^{a-1}(1-\mu)^{b-1} $$

ただし、\Gamma(x)ガンマ関数と呼ばれ、\Gamma(x) \equiv \int_{0}^{\infty}u^{x-1}e^{-u}duで定義されています.

また、aとbはパラメータの分布p(\mu)を決めるためのパラメータで超パラメータ(hyperparameter)と呼ばれます.

\muに依存する部分だけを取り出すと事後分布は、 p(\mu|m,l,a,b) \propto \mu^{m+a-1}(1-\mu)^{l+b-1}になるのは容易に確かめられます. (ただし、l = N -mには注意が必要です.)

この式は事前分布の共役性によって事前分布と同じ形になっていることがわかります.

参考程度に、ベータ分布を実装したコードを以下に示します.

ベータ分布の実装例

#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()

また、超パラメータを色々な値に設定した時のベータ分布の図を以下に載せます. f:id:linearml:20170822212717p:plain