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

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

MENU

パターン認識と機械学習 : ガウス分布と条件付きガウス分布

ガウス分布と条件付きガウス分布

今回は、ビショップ本の2章のメインとも言えるガウス分布についてです. ガウス分布については結構な量があるのでいくつかに分けてまとめていきたいと思います.

1. ガウス分布について

ガウス分布 (Gaussian distribution)は、正規分布 (normal distribution)とも呼ばれていて、連続変数の分布をモデル化する際によく使われます.

1次元のときのガウス分布は、

{\displaystyle  N(x|\mu,\sigma^{2}) = \frac{1}{(2\pi\sigma^{2})^{\frac{1}{2}} } \exp(-\frac{1}{2\sigma^{2}}(x-\mu)^{2} )}

と表されます. ここで \mu平均\sigma^{2}分散です.

D次元のときは、

{\displaystyle  N(\boldsymbol{x}|\boldsymbol{\mu},\boldsymbol{\Sigma}) = \frac{1}{(2\pi)^{\frac{D}{2}}}\frac{1}{|\boldsymbol{\Sigma}|^{\frac{1}{2}}}  \exp\{-\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu})^{T}\boldsymbol{\Sigma}^{-1}(\boldsymbol{x}-\boldsymbol{\mu})\} }

と表され、\boldsymbol{\mu}D次元の平均ベクトル\boldsymbol{\Sigma}D \times D共分散行列です.

多変量ガウス分布と条件付き分布について

さて、多変量ガウス分布の重要な特性の一つに、2つの変数の同時分布がガウス分布に従うならば、それらの変数を用いた条件付き分布及び、周辺分布ガウス分布になるというのがあります.

今回は、その内の条件付き分布についてのお話です.

\boldsymbol{x}N(\boldsymbol{x}|\boldsymbol{\mu},\boldsymbol{\Sigma})に従うD次元ベクトルとし、これを互いに素な部分集合\boldsymbol{x_a}\boldsymbol{x_b}に分割します.

つまり、

\displaystyle \boldsymbol{x} = \begin{bmatrix}\boldsymbol{x_{a}} \\ \boldsymbol{x_{b}} \end{bmatrix}

とし、これに対する平均ベクトルと共分散行列もそれぞれ、

\displaystyle \boldsymbol{\mu} = \begin{bmatrix}\boldsymbol{\mu_a} \\ \boldsymbol{\mu_b}\end{bmatrix}
\displaystyle \boldsymbol{\Sigma} = \begin{bmatrix}\boldsymbol{\Sigma_{aa}} && \boldsymbol{\Sigma_{ab}} \\ \boldsymbol{\Sigma_{ba}} && \boldsymbol{\Sigma_{bb}} \end{bmatrix}

で与えられます.

共分散行列が与えられたが、ビショップ本をはじめとし、共分散の逆行列を考えた方が便利になることが多いため、\boldsymbol{\Lambda} = \boldsymbol{\Sigma}^{-1}を考えています. これを精度行列と呼んでいます. 以降では精度行列をベースに話が進んでいきます.

制度行列は、

\displaystyle \boldsymbol{\Lambda} = \begin{bmatrix} \boldsymbol{\Lambda_{aa}}&&\boldsymbol{\Lambda_{ab}} \\ \boldsymbol{\Lambda_{ba}} && \boldsymbol{\Lambda_{bb}}\end{bmatrix}

となるが、 \boldsymbol{\Lambda_{aa}}\boldsymbol{\Sigma_{aa}}逆行列となっていないことに注意しなくてはいけません. (このことについては最後に述べます.)

まず、一般のガウス分布の指数部は、 \displaystyle -\frac{1}{2}(\boldsymbol{x} - \boldsymbol{\mu})^{T} \boldsymbol{\Sigma}^{-1} (\boldsymbol{x} - \boldsymbol{\mu}) = - \frac{1}{2} \boldsymbol{x}^{T} \boldsymbol{\Sigma}^{-1} \boldsymbol{x} +  \boldsymbol{x}^{T} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu} + ( \boldsymbol{x}とは独立な項) と変形できます.

右辺の\boldsymbol{x}の2次の項の係数行列が精度行列(共分散の逆行列)と等しく、\boldsymbol{x}の線形項の係数は\boldsymbol{\Sigma^{-1}\mu}と等しくなります. (ここから平均ベクトルを計算することができます.)

このことを利用して、条件付き分布の平均と共分散行列を求めますが、基本的な考えとしては分割した変数が従うガウス分布を、\boldsymbol{x_b}を固定した上での\boldsymbol{x_a}の関数とみなします.

さて、分割した変数が従うガウス分布の指数部は、

\displaystyle -\frac{1}{2} (\boldsymbol{x} - \boldsymbol{\mu} )^{T} \boldsymbol{\Sigma}^{-1} (\boldsymbol{x} - \boldsymbol{\mu}) = \frac{1}{2}(\boldsymbol{x_a} - \boldsymbol{\mu_a})^{T}\boldsymbol{\Lambda_{aa}}(\boldsymbol{x_a} - \boldsymbol{\mu_a}) - \frac{1}{2}(\boldsymbol{x_a} - \boldsymbol{\mu_a})^{T}\boldsymbol{\Lambda_{ab}}(\boldsymbol{x_b} -  \boldsymbol{\mu_b}) -\\  \frac{1}{2}(\boldsymbol{x_b} - \boldsymbol{\mu_b})^{T}\boldsymbol{\Lambda_{ba}}(\boldsymbol{x_a} - \boldsymbol{\mu_a}) -
\frac{1}{2}(\boldsymbol{x_b} - \boldsymbol{\mu_b})^{T}\boldsymbol{\Lambda_{bb}}(\boldsymbol{x_b} - \boldsymbol{\mu_b})

となることはすぐ確認できると思います.

この中の\boldsymbol{x_a}の2次の項を全て取り出すと、

\displaystyle -\frac{1}{2}\boldsymbol{x_a}^{T}\boldsymbol{\Lambda_{aa}}\boldsymbol{x_a}

となるので、\boldsymbol{\Sigma_{a|b}} = \boldsymbol{\Lambda_{aa}}^{-1}となります.

次に、\boldsymbol{x_a}について線形の項を全て取り出すと、 \boldsymbol{x_a}^{T}
{\boldsymbol{\Lambda_{aa}}\boldsymbol{\mu_a} - \boldsymbol{\Lambda_{ab}}(\boldsymbol{x_b} - \boldsymbol{\mu_b}) }が得られます.

この式の\boldsymbol{x_a}の係数が  \boldsymbol{\Sigma_{a|b}}^{-1}\boldsymbol{\mu_{a|b}}になることは説明しました.

これらより、\boldsymbol{\mu_{a|b} = \boldsymbol{\mu_a} - \boldsymbol{\Lambda_{aa}}^{-1} \boldsymbol{\Lambda_{ab}}(\boldsymbol{x_a} - \boldsymbol{\mu_b})}となります.

今までの結果は精度行列を用いての表現方法でしたがもちろん共分散行列での表現も可能です.

分割された行列の逆行列に関する計算

分割された行列の逆行列に関する計算はビショップ本では公式のように取り上げられています. (演習問題にも取り上げられており、東京大学大学院試でも出題されていました笑)

\displaystyle \begin{bmatrix}A && B \\ C && D\end{bmatrix}^{-1} = \begin{bmatrix} M && -MBD^{-1} \\ -D^{-1}CM && D^{-1} + D^{-1}CMBD^{-1}\end{bmatrix}

となります.

ここでM = (A - BD^{-1}C)^{-1}となります.

このMの逆行列には部分行列Dに関するシューア補行列という名前がついているようです.

この公式と、

\displaystyle \begin{bmatrix}\Sigma_{aa} && \Sigma_{ab} \\ \Sigma_{ba} &&\Sigma_{bb}\end{bmatrix}^{-1} = \begin{bmatrix} \boldsymbol{\Lambda_{aa}} && \boldsymbol{\Lambda_{ab}} \\ \boldsymbol{\Lambda_{ba}} && \boldsymbol{\Lambda_{bb}}\end{bmatrix}

より、

\displaystyle \boldsymbol{\Lambda_{aa}} = (\boldsymbol{\Sigma_{aa}} - \boldsymbol{\Sigma_{ab}}\boldsymbol{\Sigma_{bb}}^{-1}\boldsymbol{\Sigma_{ba}})^{-1}
\displaystyle \boldsymbol{\Lambda_{ab}} = -(\boldsymbol{\Sigma_aa} - \boldsymbol{\Sigma_{ab}}\boldsymbol{\Sigma_{bb}}^{-1}\boldsymbol{\Sigma_{ba}})^{-1}\boldsymbol{\Sigma_{ab}}\boldsymbol{\Sigma_{bb}}^{-1}

が得られます.

これらから、

\displaystyle \boldsymbol{\mu_{a|b}} = \boldsymbol{\mu_a} +  \boldsymbol{\Sigma_{ab} \boldsymbol{\Sigma_{bb}}^{-1}( \boldsymbol{x_b} -\boldsymbol{ \mu_b}})
\displaystyle \boldsymbol{\Sigma_{a|b}} = \boldsymbol{\Sigma_{aa}} +  \boldsymbol{\Sigma_{ab}} \boldsymbol{\Sigma_{bb}}^{-1}\boldsymbol{\Sigma_{ba}}

となります.

1次と2次のガウス分布の実装例

1次と2次の時のガウス分布を実装してみたので以下にソースコードと結果をあげておきます.

ガウス分布 (1次の場合)

f:id:linearml:20170828234310p:plain

ガウス分布 (2次の場合)

f:id:linearml:20170828234316p:plain