混合ガウスモデルとEMアルゴリズム
前回の記事で、単純なガウスモデルと最尤推定について紹介しました。
今回は、ガウスモデルよりも少し複雑なモデルを紹介したいと思います。
- 混合ガウスモデル(Gaussian Mixture Model)
以下のグラフのように、ガウス分布が合わさった分布の事を混合ガウスモデルと言います。以下の例では単純に二つのガウス分布が混合した分布になります。
上記グラフ出力の為の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次元の混合ガウスモデルを数式で表現すると以下のようになります。
は混合数で今回は,が混合比で今回はです。また、とはそれぞれのガウスモデルの期待値と分散になります。
混合比は
となります。
混合比に変更した場合は以下のような混合ガウスモデルとなります。
- 多変量の混合ガウスモデル
多変量の場合、が分散共分散行列に置き換わり、以下の式のように表現できます。
2次元のガウス分布を2つ用いてサンプルを生成し、EMアルゴリズムを用い、混合ガウス分布で近似した結果が以下のようになります。
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