Main Content

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

混合ガウス モデルを使用したクラスタリング

このトピックでは、Statistics and Machine Learning Toolbox™ の関数 cluster を使用した混合ガウス モデル (GMM) によるクラスタリングについて紹介し、fitgmdist を使用して GMM モデルをあてはめるときにオプション パラメーターを指定する効果を示す例を提供します。

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

多くの場合、データのクラスタリングには混合ガウス モデル (GMM) が使用されます。GMM を使用して、"ハード" クラスタリングまたは "ソフト" クラスタリングをクエリ データに対して実行できます。

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

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

GMM によるクラスタリングは、サイズおよび相関の構造が異なる複数のクラスターに対応できます。そのため、特定の用途では、k-means クラスタリングなどの方式よりも GMM によるクラスタリングの方がより適切な場合があります。多くのクラスタリング方式と同じように、GMM によるクラスタリングでは、モデルをあてはめる前にクラスター数を指定しなければなりません。クラスター数により、GMM 内の成分数が決まります。

GMM の場合、次のベストプラクティスに従ってください。

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

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

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

さまざまな共分散オプションおよび初期条件を使用した GMM のあてはめ

この例では、GMM によるクラスタリングを実行するときに、共分散構造および初期条件に関するさまざまなオプションを指定する効果を確認します。

フィッシャーのアヤメのデータセットを読み込みます。がく片の測定値をクラスタリングすることを考え、がく片の測定値を使用してデータを 2 次元で可視化します。

load fisheriris;
X = meas(:,1:2);
[n,p] = size(X);

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 の複雑さが増大します。

異なる共分散の構造オプションの指定

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

EM アルゴリズムについて 3 つの GMM 成分と 1,000 回の最大反復回数を指定します。再現性を得るため、乱数シードを設定します。

rng(3);
k = 3; % Number of GMM components
options = statset('MaxIter',1000);

共分散の構造オプションを指定します。

Sigma = {'diagonal','full'}; % Options for covariance matrix type
nSigma = numel(Sigma);

SharedCovariance = {true,false}; % Indicator for identical or nonidentical covariance matrices
SCtext = {'true','false'};
nSC = numel(SharedCovariance);

測定値の極値から構成される平面をカバーする 2 次元グリッドを作成します。後でこのグリッドを使用してクラスターに対して信頼楕円体を描画します。

d = 500; % Grid length
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(:)];

次を指定します。

  • 共分散の構造オプションのすべての組み合わせについて、3 つの成分を使用して GMM をあてはめます。

  • あてはめた GMM を使用して、2 次元グリッドをクラスタリングします。

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

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

threshold = sqrt(chi2inv(0.99,2));
count = 1;
for i = 1:nSigma
    for j = 1:nSC
        gmfit = fitgmdist(X,k,'CovarianceType',Sigma{i}, ...
            'SharedCovariance',SharedCovariance{j},'Options',options); % Fitted GMM
        clusterX = cluster(gmfit,X); % Cluster index 
        mahalDist = mahal(gmfit,X0); % Distance from each grid point to each GMM component
        % Draw ellipsoids over each GMM component and show clustering result.
        subplot(2,2,count);
        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\nSharedCovariance = %s',Sigma{i},SCtext{j}),'FontSize',8)
        legend(h1,{'1','2','3'})
        hold off
        count = count + 1;
    end
end

長径と短径の長さは信頼領域の確率しきい値によって決まり、軸の方向は共分散のタイプによって決まります。共分散行列のオプションについて、次に注意してください。

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

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

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

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

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

異なる初期条件の指定

GMM をデータにあてはめるアルゴリズムは、初期条件の影響を受ける可能性があります。この感度について説明するために、4 つの異なる GMM を次のようにあてはめます。

  1. 1 番目の GMM については、大部分のデータ点を最初のクラスターに割り当てます。

  2. 2 番目の GMM については、データ点を無作為にクラスターに割り当てます。

  3. 3 番目の GMM については、クラスターに対するデータ点の無作為な割り当てをもう一度行います。

  4. 4 番目の GMM については、k-means++ を使用して初期クラスター中心を取得します。

initialCond1 = [ones(n-8,1); [2; 2; 2; 2]; [3; 3; 3; 3]]; % For the first GMM
initialCond2 = randsample(1:k,n,true); % For the second GMM
initialCond3 = randsample(1:k,n,true); % For the third GMM
initialCond4 = 'plus'; % For the fourth GMM
cluster0 = {initialCond1; initialCond2; initialCond3; initialCond4};

すべてのインスタンスについて、k = 3 成分、非共有およびフルの共分散行列、同じ初期混合比率および同じ初期共分散行列を使用します。安定させるため、異なる初期値の組み合わせを試す場合は EM アルゴリズムの反復回数を増やしてください。また、クラスターに対して信頼楕円体を描画します。

converged = nan(4,1);

for j = 1:4
    gmfit = fitgmdist(X,k,'CovarianceType','full', ...
        'SharedCovariance',false,'Start',cluster0{j}, ...
        'Options',options);
    clusterX = cluster(gmfit,X); % Cluster index 
    mahalDist = mahal(gmfit,X0); % Distance from each grid point to each GMM component
    % Draw ellipsoids over each GMM component and show clustering result.
    subplot(2,2,j);
    h1 = gscatter(X(:,1),X(:,2),clusterX); % Distance from each grid point to each GMM component
    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; % Indicator for convergence
end

sum(converged)
ans = 4

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

正則化のタイミング

EM アルゴリズムの反復では、あてはめた共分散行列が悪条件になり、尤度が無限大に発散する可能性があります。こうした問題は、次の条件が 1 つ以上存在する場合に発生する可能性があります。

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

  • 多すぎる数の成分でのあてはめを指定した。

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

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

モデルのあてはめの統計

ほとんどの用途では、成分数 k と適切な共分散の構造 Σ は不明です。GMM を調整する方法の 1 つは、情報量基準を比較することです。一般的な情報量基準として、赤池情報量基準 (AIC) とベイズ情報量基準 (BIC) の 2 つがあります。

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

参考

| |

関連するトピック