パターン認識と機械学習 : ベルヌーイ分布
ベルヌーイ分布
第2章の確率分布の一番最初に紹介されているベルヌーイ分布についての備忘録です.
ベルヌーイ分布について
二値確率変数 (binary random variable, 以下二値 r.v.) が1つの場合について考えます.
例えば、で「表」、で「裏」を表現するとします.
これを使えばコイン投げの結果が二値 r.v.で表現できます.
今回は一般の話を扱うので「表」が出る確率は0.5ではなくパラメータで表すことにします.
つまり、
$$
p(x = 1 | \mu) = \mu
$$
となります.
確率なので を満たし、となります.
表が出る確率と裏が出る確率を一つの式で表したくなります. 表が出たときは、でとなり、裏が出たときはでとなります. したがってこのとを用いて一つの式で表すことを考えます.
その式が、 $$ Bern(x | \mu) = \mu ^{x} (1 - \mu)^{1-x} $$ となり、これがベルヌーイ分布です.
具体的に値を代入してみると、表が出る確率はであり、裏が出る確率はで表すことが出来ています.
また、ベルヌーイ分布の、平均、分散はそれぞれ、です.
ベルヌーイ分布の実装例
ベルヌーイ分布をpythonとmatplotlibを使って可視化したので参考程度に載せておこうと思います.
私が書いたソースは以下の通りです.
#coding: utf-8 import numpy as np import matplotlib.pyplot as plt import matplotlib.mlab as mlab def bern(x,p): return pow(p,x) * pow(1-p,1-x) if __name__ == "__main__": dist = np.zeros(2) for i in range(1,10): plt.figure() p = 0.1 * i dist[0] = bern(0,p) dist[1] = bern(1,p) x = np.array([0,1]) label = ["x = 0","x = 1"] plt.ylim([0.0,1.0]) plt.title("bernoulli distribution (p = " + str(p) + ")") plt.bar(x,dist,tick_label = label,align = "center") plt.savefig("bernoulli_" + str(p) + ".png")
可視化した図のうちパラメータをそれぞれ0.1, 0.5, 0.8に設定したものを載せておきます.
次に、観測データ集合がベルヌーイ分布から独立に与えられたとします.
その時の尤度は
$$
\prod_{n=1}^{N}\mu^{x_{n}}(1-\mu)^{1-x_{n}}
$$
となり、この尤度を最大にするようにしてパラメータを推定するのが最尤推定です.
積の形では扱いにくいので尤度の対数をとって和の形にします.
この対数尤度をパラメータで微分して0とおき、方程式を解けば最尤推定量が求まり以下のように得られます.
$$
\mu_{ML} = \frac{1}{N} \sum_{n=1}^{N} x_{n}
$$
ここで表が出た回数、つまりとなった回数をとすると、
$$
\mu_{ML} = \frac{m}{N}
$$
となります.
例えば試行3回中3回とも表が出た場合に、最尤推定量は1となるので、今後もずっと表が出続けると予測していることになります.
これは過学習の極端な例ですが、3回の観測だけで、今後全く表が出ないと断定してしまうのはまずいことです.
今後はパラメータが従う事前分布を導入して、もっと常識的な結果を得る方法について考えていきます.