画像処理とか機械学習とか

画像処理や機械学習関連の事について気まぐれで書いていきます。歩行者検出関係が多いと思います。ハリネズミもたまに出現します。

混合ガウスモデルとEMアルゴリズム

前回の記事で、単純なガウスモデルと最尤推定について紹介しました。
今回は、ガウスモデルよりも少し複雑なモデルを紹介したいと思います。

  • 混合ガウスモデル(Gaussian Mixture Model)

以下のグラフのように、ガウス分布が合わさった分布の事を混合ガウスモデルと言います。以下の例では単純に二つのガウス分布が混合した分布になります。
f:id:hiro2o2:20160211184236p:plain
上記グラフ出力の為のMatlabソースコード

clear all

%平均
mu=[4; -3];
%分散 
sigma=cat(3,4,7);
%混合比
p = ones(1,2)/2;

%1次元混合ガウスモデル
GMM = gmdistribution(mu,sigma,p);

x=-10:0.1:10;
x = transpose(x);
y = pdf(GMM,x);

plot(x,y, '-b');

上のグラフで表した1次元の混合ガウスモデルを数式で表現すると以下のようになります。
{ \displaystyle p(x|\theta)=\sum_{j=1}^K \pi_jN(x|\mu_j,\sigma_j) }
{ \displaystyle K }は混合数で今回は{ \displaystyle K=2 }{ \displaystyle \pi }が混合比で今回は{ \displaystyle \pi_1=\pi_2=0.5 }です。また、{ \displaystyle \mu }{ \displaystyle \sigma }はそれぞれのガウスモデルの期待値と分散になります。

混合比{ \displaystyle \pi }
{ \displaystyle \sum_{j=1}^K \pi_j=1 } となります。
混合比{ \displaystyle \pi_1=0.2, \pi_2=0.8 }に変更した場合は以下のような混合ガウスモデルとなります。
f:id:hiro2o2:20160211195300p:plain

多変量の場合、{ \displaystyle \sigma }が分散共分散行列に置き換わり、以下の式のように表現できます。
{ \displaystyle p(x|\theta)=\sum_{j=1}^K \pi_jN(x|\mu_j,\Sigma_j) }

2次元のガウス分布を2つ用いてサンプルを生成し、EMアルゴリズムを用い、混合ガウス分布で近似した結果が以下のようになります。
f:id:hiro2o2:20160211211712p:plain

Matlabソースコードは以下の通りです。
今回のソースコードMatlab公式のサンプルプログラムを用いています。

mu1 = [1 2];
Sigma1 = [2 0; 0 0.5];
mu2 = [-1 -2];
Sigma2 = [1 0;0 1];
rng(1); % For reproducibility
X = [mvnrnd(mu1,Sigma1,1000);mvnrnd(mu2,Sigma2,1000)];

%混合ガウス モデルを近似します。成分数を 2 に指定します。

GMModel = fitgmdist(X,2);

%近似された混合ガウス モデルの等高線上にデータをプロットします。

figure
y = [zeros(1000,1);ones(1000,1)];
h = gscatter(X(:,1),X(:,2),y);
hold on
ezcontour(@(x1,x2)pdf(GMModel,[x1 x2]),get(gca,{'XLim','YLim'}))
title('{\bf Scatter Plot and Fitted Gaussian Mixture Contours}')
legend(h,'Model 0','Model1')
hold off

混合ガウスモデルを近似するためのEMアルゴリズムの詳細については、次回の記事で紹介したいと思います。