まいだいありー

機械学習、技術系、日記など勉強したことのメモを書けたらなと思います。

混合正規分布の推定(Gibbs Sampling)

はじめに

今回はガウス混合分布の平均と精度が未知の場合のギブスサンプリングについてメモしとこうと思います。 また、解釈の間違いなどがあったら教えていただきたいです。

ガウス混合分布

ガウス混合正規分布の数式は以下の通りで、潜在変数とクラスタごと平均と精度行列を導入します。

{\displaystyle
p(\bf{x_n}| \bf{s_n}, \bf{μ}, \bf{ \Lambda}) = \prod_k^{K} N( \bf{x_n} | \bf{μ}_k , \Lambda_k)^{s_{n,k}}
}

また、 \bf{π} はカテゴリ分布に従います。


{\displaystyle
p(\bf{s_n}| \bf{ π})= Cat(\bf{ s_n} | \bf{π})
}

{\displaystyle \sum_k^{K} \pi_k = 1 }


2つのパラメーターに対して事前分布を導入しますが、この場合の共役事前分布はガウス・ウィシャート分布です。


{\displaystyle
p( \bf{μ} ,\bf{ \Lambda}) = N(\bf{μ}_k | \bf{m}, (\beta \Lambda_k)^{-1})W( \bf{ \Lambda_k}| \nu, \bf{W})
}


ギブスサンプリング

ギブスサンプリングでは、潜在変数と分布に関連するパラメータの事後分布に分けてサンプリングすることを考えます。

{\displaystyle p( \bf{S}, \bf{ μ}, \bf{ \Lambda}, \bf{π}| \bf{X})  }

{\displaystyle \bf{S} \sim p( \bf{S}| \bf{X}, \bf{ μ}, \bf{ \Lambda}, \bf{ π}) }

{\displaystyle \bf{ μ}, \bf{ \Lambda}, \bf{ π} \sim p( \bf{ μ}, \bf{ \Lambda}, \bf{ π}| \bf{X} ,\bf{S} ) }


潜在変数の事後分布

ベイズの定理を使って、 \bf{S} に関係する項だけをとります。


{\displaystyle p( \bf{S}| \bf{X}, \bf{ μ}, \bf{ \Lambda}, \bf{π}) \propto p(\bf{X} | \bf{ μ}, \bf{ \Lambda, \bf{S}})p(\bf{S} | \bf{π}) = \prod_n^{N} p( \bf{x_n} | \bf{s_n} ,\bf{ μ}, \bf{ \Lambda})p( \bf{s_n} | \bf{π}) }


上記の式に対数を取って展開した上で  s_{n,k} でまとめると(1項は指数部以外は定数とする)、


{\displaystyle \log p( \bf{x_n} | \bf{s_n} , \bf{ μ}, \bf{ \Lambda}) = \sum_k^{K}  s_{n,k} \Big \{ \frac{1}{2} ( \bf{x_n} -\bf{μ}_k ) \Lambda_k ( \bf{x_n} - \bf{μ}_k)^{t} + \frac{1}{2} \log | \Lambda_k | + \log \pi_k \Big \} + const  }


よって、カテゴリ分布になります。


{\displaystyle \bf{s_n} \sim Cat ( \bf{s_n} | \bf{η_n}  ) }

{\displaystyle  η_{n,k} \propto  exp \big \{ \frac{1}{2} ( \bf{x_n} - \bf{μ}_k) \Lambda_k ( \bf{x_n} - \bf{μ}_k)^{t} + \frac{1}{2} \log | \Lambda_k |  + \log \pi_k \big \} }

{\displaystyle \sum_k^{K} η_{n,k} = 1 }


パラメータの事後分布

ベイズの定理を用いて変形すると、グラフィカルモデルで考えると分かるのですが、混合率とそれ以外のパラメータの分布は独立に分解できます。

{\displaystyle p( \bf{ μ}, \bf{ \Lambda}, \bf{π}| \bf{X} ,\bf{S} ) \propto p(\bf{X} | \bf{ μ}, \bf{ \Lambda, \bf{S}})p( \bf{ μ}, \bf{ \Lambda})p(\bf{S} | \bf{ π}) p( \bf{ π}) }

潜在変数と混合率に関連した分布の後方の2項は、ポアソン混合分布のと同じなのでそれを用いて、

{\displaystyle p( \bf{S} | \bf{π})p( \bf{π}) =  Dir( \bf{π} | \bf{\hat{α}}) \\
\hat{\alpha_k} = \sum_n^{N}s_{n,k} + \alpha_k }

今回は前方の2項を計算すれば良いので、

{\displaystyle p(\bf{X} | \bf{ μ}, \bf{ \Lambda, \bf{S}})p( \bf{ μ}, \bf{ \Lambda}) = \sum_k^{K} \Big \{ \sum_n^{N}  \big \{ s_{n,k} \log N( \bf{x_n} |\bf{μ}_k, \bf{ \Lambda_k}^{-1}) \big \}N(\bf{μ}_k| \bf{ m_k}, \bf{ ( \beta \Lambda_k})^{-1})W( \bf{ \Lambda_k }| \nu, \bf{W}) \Big \} }


また、以下の関係があるので、最初に平均の分布を求めてから精度を求めます。


{\displaystyle p(μ,\bf{ \Lambda} | \bf{X},\bf{S})=p(μ|\Lambda,\bf{X},\bf{S})p(\Lambda | \bf{X},\bf{S}) \tag{1} }


平均 μ

 \bf{ μ} に関する項以外は定数とみなして平方完成すると、

{\displaystyle - \frac{1}{2} \bf{μ}_k^{t} ( \sum_n^{N} s_{n,k} + \beta) \Lambda_k \bf{μ}_k +( \sum_n^{N} s_{n,k} \bf{x_n} + \beta m )  \Lambda_k \bf{μ}_k + const }

{\displaystyle = - \frac{1}{2} ( \bf{μ}_k - \hat{ \bf{m_k}})^{t} \hat{ \beta_k} \Lambda_k ( \bf{μ}_k- \hat{ \bf{m_k}}) + const }

よって、正規分布になります。

{\displaystyle \bf{μ}_k \sim N(\bf{μ}_k| \hat{ \bf{ m_k}}, ( \hat{ \beta_k} \Lambda_k)^{-1}) }

{\displaystyle \hat{ \bf{ m_k}} = \hat{ \beta_k}^{-1}( \sum_n^{N} s_{n,k} \bf{x_n} + \beta m)}

{\displaystyle \hat{ \beta_k} = \sum_n^{N} s_{n,k} + \beta }


精度 \bf{ \Lambda}

(1)の関係を変形すると、精度を求められる形になります。

{\displaystyle \log p( \bf{\Lambda} | \bf{X},\bf{S})= \log p(μ, \bf{ \Lambda} |\bf{X},\bf{S}) - \log p(μ| \bf{ \Lambda} ,\bf{X},\bf{S}) }

上記の該当する分布を代入し、 \Lambda に関する項以外を定数とみなして、 \Lambda でまとめると、

f:id:kenzo1122:20210517145007p:plain


よって、ウィシャート分布になります。

{\displaystyle  \bf{ \Lambda_k} \sim W( \bf{ \Lambda_k} | \hat{ \nu_k} ,\hat{W_k}^{-1}) }

{\displaystyle \hat{ \nu_k} =  \sum_n^{N} s_{n,k} + \nu }

{\displaystyle \hat{W_k}^{-1} = \sum_n^{N}s_{n,k} \bf{x_n}^t \bf{x_n} + \beta \bf{m}^t \bf{m} + W^{-1}- \hat{ \beta_k} \hat{ \bf{m_k}}^t \hat{ \bf{m_k}} }


これで、実装に必要な要素は揃いました!


実装

実験で用いるデータは、データ数N = 400、クラスタK = 4、次元D = 2、です。

f:id:kenzo1122:20190325172425p:plain


ソースコード

ポアソン混合分布の時より少し複雑だったので、関数を用いて実装しました。

github.com


結果

60回学習を回した結果です。 以下の画像は左から、「元データ」、「元データへの潜在変数によるクラスタリング」、「推定したパラメータによるサンプリング(N=400)」となっています

f:id:kenzo1122:20190325172428p:plain


推定したパラメータによるガウス分布からのサンプリングの結果は、かなり似た値をサンプリングできています。

また潜在変数による色分けは、クラスタ1と3が少し怪しいので試しに個別に見てみると、元データ通りに潜在変数が振り分けられてることがわかります。

f:id:kenzo1122:20190325172616p:plainf:id:kenzo1122:20190325172618p:plain