気ままに実装する機械学習

機械学習に興味のある大学院生によるブログです. 機械学習以外のトピック多めです.

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

ベルヌーイ分布

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

ベルヌーイ分布について

二値確率変数 (binary random variable, 以下二値 r.v.) {x \in \{0,1\}}が1つの場合について考えます.

例えば、 x = 1で「」、x = 0で「」を表現するとします.

これを使えばコイン投げの結果が二値 r.v.で表現できます.
今回は一般の話を扱うので「」が出る確率は0.5ではなくパラメータ\muで表すことにします.

つまり、 $$ p(x = 1 | \mu) = \mu $$ となります.
確率なので  0 \leq \mu \leq 1 を満たし、 p(x = 0 | \mu) = 1 - \muとなります.

表が出る確率と裏が出る確率を一つの式で表したくなります. 表が出たときは、x = 11 - x = 0となり、裏が出たときはx = 01 - x = 1となります. したがってこのx1 - xを用いて一つの式で表すことを考えます.

その式が、 $$ Bern(x | \mu) = \mu ^{x} (1 - \mu)^{1-x} $$ となり、これがベルヌーイ分布です.

具体的に値を代入してみると、表が出る確率は\mu^{1} (1 - \mu)^{1 -1} = \muであり、裏が出る確率は\mu^{0} (1 - \mu) ^ {1 - 0} = 1 - \muで表すことが出来ています.

また、ベルヌーイ分布の平均分散はそれぞれ、E[x] = \mu, V[x] = \mu (1-\mu)です.

ベルヌーイ分布の実装例

ベルヌーイ分布pythonmatplotlibを使って可視化したので参考程度に載せておこうと思います.
私が書いたソースは以下の通りです.

#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に設定したものを載せておきます.

f:id:linearml:20170818103828p:plain:w240 f:id:linearml:20170818103833p:plain:w240 f:id:linearml:20170818103839p:plain:w240

次に、観測データ集合 \{x_{1},\cdots,x_{N}\}ベルヌーイ分布から独立に与えられたとします.
その時の尤度

$$ \prod_{n=1}^{N}\mu^{x_{n}}(1-\mu)^{1-x_{n}} $$ となり、この尤度を最大にするようにしてパラメータを推定するのが最尤推定です.
積の形では扱いにくいので尤度の対数をとって和の形にします.
この対数尤度をパラメータ \mu微分して0とおき、方程式を解けば最尤推定が求まり以下のように得られます. $$ \mu_{ML} = \frac{1}{N} \sum_{n=1}^{N} x_{n} $$ ここで表が出た回数、つまりx = 1となった回数をmとすると、 $$ \mu_{ML} = \frac{m}{N} $$ となります.

例えば試行3回中3回とも表が出た場合に、最尤推定量は1となるので、今後もずっと表が出続けると予測していることになります.
これは過学習の極端な例ですが、3回の観測だけで、今後全く表が出ないと断定してしまうのはまずいことです.

今後はパラメータが従う事前分布を導入して、もっと常識的な結果を得る方法について考えていきます.