Main Content

データへの混合ガウス モデルの当てはめ

この例では、多変量正規分布から派生するデータをシミュレートし、fitgmdistを使用してそのデータに混合ガウス モデル (GMM) を当てはめる方法を示します。既知の、つまり完全に指定した GMM オブジェクトを作成する方法については、混合ガウス モデルの作成を参照してください。

fitgmdist では、データの行列と GMM の成分数が必要です。有用な GMM を作成するには、k を慎重に選択しなければなりません。成分数が少なすぎると、データを正確にはモデル化できません (データへの適合不足)。成分数が多すぎると、特異な共分散行列によりモデルが過適合になります。

mvnrndを使用して、2 つの二変量ガウス分布の混合から派生するデータをシミュレートします。

mu1 = [1 2];
sigma1 = [2 0; 0 .5];
mu2 = [-3 -5];
sigma2 = [1 0; 0 1];
rng(1); % For reproducibility
X = [mvnrnd(mu1,sigma1,1000);
     mvnrnd(mu2,sigma2,1000)];

シミュレートしたデータをプロットします。

scatter(X(:,1),X(:,2),10,'.') % Scatter plot with points of size 10
title('Simulated Data')

Figure contains an axes object. The axes object with title Simulated Data contains an object of type scatter.

2 成分の GMM を近似させます。名前と値のペアの引数 'Options' を使用して、近似アルゴリズムの最終出力を表示します。

options = statset('Display','final');
gm = fitgmdist(X,2,'Options',options)
5 iterations, log-likelihood = -7105.71

gm = 

Gaussian mixture distribution with 2 components in 2 dimensions
Component 1:
Mixing proportion: 0.500000
Mean:   -3.0377   -4.9859

Component 2:
Mixing proportion: 0.500000
Mean:    0.9812    2.0563

近似させた GMM の pdf をプロットします。

gmPDF = @(x,y) arrayfun(@(x0,y0) pdf(gm,[x0 y0]),x,y);
hold on
h = fcontour(gmPDF,[-8 6]);
title('Simulated Data and Contour lines of pdf');

Figure contains an axes object. The axes object with title Simulated Data and Contour lines of pdf contains 2 objects of type scatter, functioncontour.

平均、共分散および混合比率の推定値を表示します。

ComponentMeans = gm.mu
ComponentMeans = 2×2

   -3.0377   -4.9859
    0.9812    2.0563

ComponentCovariances = gm.Sigma
ComponentCovariances = 
ComponentCovariances(:,:,1) =

    1.0132    0.0482
    0.0482    0.9796


ComponentCovariances(:,:,2) =

    1.9919    0.0127
    0.0127    0.5533

MixtureProportions = gm.ComponentProportion 
MixtureProportions = 1×2

    0.5000    0.5000

成分数を増やして 4 つのモデルをデータに当てはめ、赤池情報量基準 (AIC) の値を比較します。

AIC = zeros(1,4);
gm = cell(1,4);
for k = 1:4
    gm{k} = fitgmdist(X,k);
    AIC(k)= gm{k}.AIC;
end

AIC の値が最小になる成分数を表示します。

[minAIC,numComponents] = min(AIC);
numComponents
numComponents = 2

AIC の値が最小になるのは、2 成分のモデルです。

2 成分の GMM を表示します。

gm2 = gm{numComponents}
gm2 = 

Gaussian mixture distribution with 2 components in 2 dimensions
Component 1:
Mixing proportion: 0.500000
Mean:   -3.0377   -4.9859

Component 2:
Mixing proportion: 0.500000
Mean:    0.9812    2.0563

AIC とベイズ情報量基準 (BIC) はどちらも尤度に基づくモデル近似の尺度であり、複雑度 (特にパラメーター数) に対するペナルティが含まれています。これらの情報量を、成分数が指定されていない場合に、モデルに対する適切な成分数を決めるために使用できます。

参考

| | |

関連するトピック