ドキュメンテーション

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

混合ガウス モデルによるクラスタリング

混合ガウス モデルによるデータのクラスタリング方法

多くの場合、データのクラスタリングには混合ガウス モデル (GMM) が使用されます。通常、近似させた GMM は、与えられたデータにおいて、クエリ データ点を事後確率が最大になる多変量正規成分に割り当てることで、クラスタリングします。つまり、近似させた GMM が与えられると、clusterは事後確率が最大になる成分にクエリ データを割り当てます。このようにデータ点を 1 つのクラスターだけに割り当てる方法は、"ハード" クラスタリングと呼ばれます。GMM をデータにあてはめる方法、近似させたモデルを使用するクラスタリングの方法、および成分の事後確率を推定する方法の例については、ハード クラスタリングの使用による混合ガウス データのクラスタリングを参照してください。

しかし、GMM によるクラスタリングは、"ファジー" または "ソフト クラスタリング" 方式と見なすことができるので、より柔軟です。ソフト クラスタリング方式では、各クラスターについてスコアをデータ点に割り当てます。スコアの値は、クラスターに対するデータ点の関連性の強さを示します。ハード クラスタリング方式とは対照的に、ソフト クラスタリング方式は 1 つのデータ点を複数のクラスターに割り当てることができるという点で柔軟です。GMM によるクラスタリングを行う場合、スコアは事後確率です。GMM を使用するソフト クラスタリングの例については、ソフト クラスタリングの使用による混合ガウス データのクラスタリングを参照してください。

さらに、GMM によるクラスタリングは、サイズおよび相関の構造が異なる複数のクラスターに対応できます。このため、k-means クラスタリングなどよりも GMM によるクラスタリングを使用する方がより適切な場合があります。

ほとんどのクラスタリング方式と同じように、モデルを近似させる前に、必要なクラスター数を指定しなければなりません。クラスター数により、GMM 内の成分数が決まります。GMM の場合、以下を考慮することもお勧めします。

  • 成分の共分散の構造。対角またはフルの共分散行列を指定できます。また、すべての成分について共分散行列を同じにするかどうかを指定できます。

  • 初期条件。GMM の近似には、期待値最大化 (EM) アルゴリズムを使用します。k-means クラスタリング アルゴリズムと同じように、EM は初期条件の影響を受け、局所的な最適解に収束する場合があります。パラメーターの初期値を指定するか、データ点についてクラスターの初期割り当てを指定または無作為に選択するか、k-means++ アルゴリズムを使用するように指定できます。

  • 正則化パラメーター。たとえば、データ点の数より予測子の数が多い場合、推定を安定させるために正則化を行うことができます。

共分散の構造のオプション

フィッシャーのアヤメのデータセットを読み込みます。がく片の測定値をクラスタリングすることを考えます。

load fisheriris;
X = meas(:,1:2);
[n,p] = size(X);
rng(3); % For reproducibility

figure;
plot(X(:,1),X(:,2),'.','MarkerSize',15);
title('Fisher''s Iris Data Set');
xlabel('Sepal length (cm)');
ylabel('Sepal width (cm)');

GMM の成分数 k により、部分母集団またはクラスターの数が決まります。この図では、適切な成分の数が 2、3 またはそれ以上であるかを判別することが困難です。k が大きくなると、GMM の複雑さが増大します。

各成分には共分散行列があります。幾何学的に、共分散の構造は部分母集団またはクラスターに対して描いた信頼楕円体の形状を決定します。すべての成分について共分散行列を対角または非スパースにするかどうかを指定できます。また、すべての成分について共分散行列を同じにするかどうかを指定できます。指定の組み合わせにより、楕円の形状と方向が決まります。

GMM をデータにあてはめ、共分散の構造のオプションをすべて組み合わせて指定すると楕円の形状にどのような影響があるかを調べます。つまり、名前と値のペアの引数 'CovarianceType' および 'SharedCovariance' についてすべての組み合わせを指定します。共分散の構造の指定は、すべての成分に適用されます。説明のため、3 つの成分を指定します。次のように楕円を描きます。

  1. 近似させた GMM を使用して、測定値の極値から構成される平面をカバーするグリッドをクラスタリングします。

  2. 各信頼領域について 99% の確率しきい値を指定するスコアを取得します。この指定により、楕円の長径と短径の長さが決まります。

  3. クラスターと似た色を楕円に付けます。

k = 3;
Sigma = {'diagonal','full'};
nSigma = numel(Sigma);
SharedCovariance = {true,false};
SCtext = {'true','false'};
nSC = numel(SharedCovariance);
d = 500;
x1 = linspace(min(X(:,1)) - 2,max(X(:,1)) + 2,d);
x2 = linspace(min(X(:,2)) - 2,max(X(:,2)) + 2,d);
[x1grid,x2grid] = meshgrid(x1,x2);
X0 = [x1grid(:) x2grid(:)];
threshold = sqrt(chi2inv(0.99,2));
options = statset('MaxIter',1000); % Increase number of EM iterations

figure;
c = 1;
for i = 1:nSigma;
    for j = 1:nSC;
        gmfit = fitgmdist(X,k,'CovarianceType',Sigma{i},...
            'SharedCovariance',SharedCovariance{j},'Options',options);
        clusterX = cluster(gmfit,X);
        mahalDist = mahal(gmfit,X0);
        subplot(2,2,c);
        h1 = gscatter(X(:,1),X(:,2),clusterX);
        hold on;
            for m = 1:k;
                idx = mahalDist(:,m)<=threshold;
                Color = h1(m).Color*0.75 + -0.5*(h1(m).Color - 1);
                h2 = plot(X0(idx,1),X0(idx,2),'.','Color',Color,'MarkerSize',1);
                uistack(h2,'bottom');
            end
        plot(gmfit.mu(:,1),gmfit.mu(:,2),'kx','LineWidth',2,'MarkerSize',10)
        title(sprintf('Sigma is %s, SharedCovariance = %s',...
            Sigma{i},SCtext{j}),'FontSize',8)
        legend(h1,{'1','2','3'});
        hold off
        c = c + 1;
    end
end

長径と短径の長さは信頼領域の確率しきい値によって決まりますが、軸の方向は共分散のタイプによって決まります。

  • 対角共分散行列は、予測子に相関がないことを示します。楕円の長径と短径は、x 軸および y 軸に対して水平または垂直になります。この指定では、各成分についてパラメーターの総数が予測子数 p だけ増えますが、フルの共分散を指定する場合より単純になります。

  • フルの共分散行列は、相関関係がある予測子に対応します。x 軸と y 軸に対する楕円の方向に制限はありません。各成分についてパラメーターの総数が だけ増えますが、予測子間の相関の構造が得られます。この指定は、過適合の原因になる可能性があります。

  • 共有共分散行列は、すべての成分で共分散行列が同じであることを示します。すべての楕円のサイズおよび方向が同じになります。パラメーターの総数は 1 つの成分の共分散パラメーターの数以上は増えないため、この指定は非共有の指定より単純です。

  • 非共有の共分散行列は、すべての成分が独自の共分散行列をもつことを示します。どの楕円も、サイズおよび方向が異なる可能性があります。この指定は 1 つの成分の共分散パラメーター数の k 倍だけパラメーターの総数を増加させますが、成分ごとの共分散の違いを得ることができるようになります。

この図は、cluster が必ずしもクラスターの順序を保持するわけではないことも示しています。つまり、複数の近似させた gmdistribution モデルをクラスタリングした場合、cluster は同じ成分に対して異なるクラスター ラベルを割り当てる可能性があります。

ほとんどの用途では、成分数 k と適切な共分散の構造 は不明です。GMM を調整する方法の 1 つは、情報量基準を比較することです。一般的な情報量基準として、赤池情報量基準 (AIC) とベイズ情報量基準 (BIC) の 2 つがあります。どちらも最適化した負の対数尤度を取り、モデル内のパラメーター数 (つまり、モデルの複雑さ) に応じてペナルティを課します。ただし、BIC では AIC より厳しいペナルティを複雑さに対して課します。このため、AIC は過適合の可能性のある、より複雑なモデルを選択する傾向があり、BIC は適合不足の可能性のある、より単純なモデルを選択する傾向があります。モデルを決定するときに両方の基準を検討することをお勧めします。AIC または BIC の値が小さいほど、より適切に近似できるモデルであることが示されます。また、用途に適した k および共分散行列の構造を選択する必要があります。fitgmdist は、近似させた gmdistribution モデル オブジェクトの AIC と BIC を AIC および BIC というプロパティに格納します。これらには、ドット表記を使用してアクセスできます。適切なパラメーターを選択する例については、混合ガウス モデルの調整を参照してください。

初期条件の影響

GMM をデータにあてはめるアルゴリズムは、初期条件の影響を受ける可能性があります。これを示すため、複数の GMM を近似させ、異なる初期条件を指定することを考えます。具体的には、初期状態ではほとんどのデータ点が 1 番目のクラスターに属していることと、2 組の無作為な初期割り当てを指定します。また、k-means++ を使用して、初期状態におけるクラスターの中心を取得します。すべてのインスタンスについて、3 つの成分、非共有およびフルの共分散行列、同じ初期混合比率および同じ初期共分散行列を指定します。安定させるため、異なる初期値の組み合わせを試す場合は EM アルゴリズムの反復回数を増やしてください。

cluster0 = {[ones(n-8,1); [2; 2; 2; 2]; [3; 3; 3; 3]];...
            randsample(1:k,n,true); randsample(1:k,n,true); 'plus'};
converged = nan(4,1);
figure;
for j = 1:4;
    gmfit = fitgmdist(X,k,'CovarianceType','full',...
        'SharedCovariance',false,'Start',cluster0{j},...
        'Options',options);
    clusterX = cluster(gmfit,X);
    mahalDist = mahal(gmfit,X0);
    subplot(2,2,j);
    h1 = gscatter(X(:,1),X(:,2),clusterX);
    hold on;
    nK = numel(unique(clusterX));
    for m = 1:nK;
        idx = mahalDist(:,m)<=threshold;
        Color = h1(m).Color*0.75 + -0.5*(h1(m).Color - 1);
        h2 = plot(X0(idx,1),X0(idx,2),'.','Color',Color,'MarkerSize',1);
        uistack(h2,'bottom');
    end
	plot(gmfit.mu(:,1),gmfit.mu(:,2),'kx','LineWidth',2,'MarkerSize',10)
    legend(h1,{'1','2','3'});
    hold off
    converged(j) = gmfit.Converged;
end
sum(converged)
ans =

     4

すべてのアルゴリズムが収束します。データ点の開始クラスター割り当てが異なると、近似させたクラスターの割り当ても異なります。名前と値のペアの引数 'Replicates' に正の整数を指定すると、その回数でアルゴリズムを実行できます。その後、fitgmdist は最大の尤度になる近似を選択します。

正則化のタイミング

EM の反復では、近似させた共分散行列が悪条件になり、尤度が無限大に発散する可能性があります。これは、次のような場合に発生する可能性があります。

  • データ点の数より予測子の数が多い。

  • 多すぎる数の成分で近似させるよう指定した。

  • 変数間に高い相関がある。

この問題を克服するには、名前と値のペアの引数 'Regularize' を使用して小さい正の数値を指定します。fitgmdist は指定された小さい正の数値をすべての共分散行列の対角要素に加算するので、すべての行列が正定になることが保証されます。正則化を行うと、最尤度の値を削減できます。詳細は、fitgmdistを参照してください。

参考

| |

関連するトピック