ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

gmdistribution.fit

クラス: gmdistribution

混合ガウス分布のパラメーター推定

    メモ:    fit は将来のリリースでは削除される予定です。代わりに fitgmdist を使用してください。

構文

obj = gmdistribution.fit(X,k)
obj = gmdistribution.fit(...,param1,val1,param2,val2,...)

説明

obj = gmdistribution.fit(X,k) は、期待値最大化 (EM) アルゴリズムを使用してクラス gmdistributionobj オブジェクトを作成します。このオブジェクトには、n 行 d 列の行列 X のデータに k 個の要素をもつ混合ガウス モデルのパラメーターの最尤推定が含まれます。ここで n は観測数、d はデータの次元です。

gmdistributionNaN 値を欠損データとして処理します。NaN 値のある X の行は近似から除外されます。

obj = gmdistribution.fit(...,param1,val1,param2,val2,...) は、反復 EM アルゴリズムに対する制御を提供します。パラメーターおよび値は、次のとおりです。

パラメーター
'Start'

初期コンポーネント パラメーターの選択に使用するメソッド。次のうちのいずれかです。

  • 'randSample'X から k 観測を無作為に初期コンポーネント手段として選択します。混在の割合は統一されています。すべてのコンポーネントの初期共分散行列は対角行列です。対角行列の要素 j は、X(:,j) の分散です。これは既定値です。

  • SmuSigma、および PComponents の各フィールドをもつ構造体配列。値の詳細は、gmdistribution を参照してください。

  • s — 各点について成分インデックスの初期推定を含む、長さ n のベクトル。

'Replicates'

各回に新しいパラメーターのセットで EM アルゴリズムを反復する回数を指定するための正の整数。最尤推定をもつ解が返されます。1 を超える値の場合は、'randSample' 起動メソッドが必要です。既定値は 1 です。

'CovType'

共分散行列が対角行列に制限される場合は 'diagonal'、それ以外の場合は 'full'。既定の設定は 'full' です。

'SharedCov'

すべての共分散行列が同じ (プールされた推定) 場合は論理 true、それ以外の場合は論理 false

'Regularize'

正定にするために共分散行列の対角行列に追加される、非負の正則化数。既定値は 0 です。

'Options'

関数 statset により作成される、反復 EM アルゴリズムの options 構造体。関数 gmdistribution.fit は、既定値が 'off' であるパラメーター 'Display'、既定値が 100 であるパラメーター 'MaxIter' および既定値が 1e-6 であるパラメーター 'TolFun' を使用します。

場合によっては、gmdistribution は、1 つまたは複数のコンポーネントが悪条件のまたは 1 つの共分散行列をもつような解に収束することがあります。

次の問題があると、悪条件の共分散行列になる可能性があります。

  • データの次元数が比較的多く、十分な観測がない場合。

  • データの一部の特徴 (変数) に高い相関関係がある場合。

  • 特徴の一部またはすべてが離散である場合。

  • データの近似対象となる成分が多すぎる場合。

通常、次のいずれかの対処法により、悪条件の共分散行列の発生を回避できます。

  • データを事前処理し、相関関係のある特徴を排除します。

  • 'SharedCov'true に設定し、コンポーネントごとに同じ共分散行列を使用します。

  • 'CovType''diagonal' に設定します。

  • 'Regularize' を使用し、共分散行列ごとの対角行列に対して非常に小さい正の数値を追加します。

  • 別のセットの初期値を試します。

他の場合、gmdistribution は、1 つまたは複数のコンポーネントが悪条件の共分散行列をもつような中間ステップに進むことがあります。別のセットの初期値を試すと、データまたはモデルを変更しないで、この問題を回避できることがあります。

関数 mvnrnd を使用して 2 つの 2 変量ガウス分布の混合からデータを作成します。

MU1 = [1 2];
SIGMA1 = [2 0; 0 .5];
MU2 = [-3 -5];
SIGMA2 = [1 0; 0 1];
X = [mvnrnd(MU1,SIGMA1,1000);mvnrnd(MU2,SIGMA2,1000)];

scatter(X(:,1),X(:,2),10,'.')
hold on

次に、二成分混合ガウス モデルで近似します。

options = statset('Display','final');
obj = gmdistribution.fit(X,2,'Options',options);
10 iterations, log-likelihood = -7046.78

h = ezcontour(@(x,y)pdf(obj,[x y]),[-8 6],[-8 6]);

近似では、パラメーター推定も行います。

ComponentMeans = obj.mu
ComponentMeans =
    0.9391    2.0322
   -2.9823   -4.9737

ComponentCovariances = obj.Sigma
ComponentCovariances(:,:,1) =
    1.7786   -0.0528
   -0.0528    0.5312
ComponentCovariances(:,:,2) =
    1.0491   -0.0150
   -0.0150    0.9816

MixtureProportions = obj.PComponents
MixtureProportions =
    0.5000    0.5000

2 成分モデルが赤池情報量を最小化します。

AIC = zeros(1,4);
obj = cell(1,4);
for k = 1:4
    obj{k} = gmdistribution.fit(X,k);
    AIC(k)= obj{k}.AIC;
end

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

model = obj{2}
model = 
Gaussian mixture distribution
with 2 components in 2 dimensions
Component 1:
Mixing proportion: 0.500000
Mean:     0.9391    2.0322
Component 2:
Mixing proportion: 0.500000
Mean:    -2.9823   -4.9737

赤池情報量とベイズ情報量はいずれも、推定されたパラメーター数に対して、ペナルティ項をもつデータに対する負の対数尤度です。これらの情報量は通常、成分数が指定されていない場合に、モデルに対する適切な成分数を決めるために使用されます。

参考文献

[1] McLachlan, G., and D. Peel. Finite Mixture Models. Hoboken, NJ: John Wiley & Sons, Inc., 2000.

この情報は役に立ちましたか?