web-dev-qa-db-ja.com

ガウス混合モデルの概念を理解する

オンラインで入手可能なソースを読んで、GMMを理解しようとしています。 K-Meansを使用してクラスタリングを達成し、GMMがK-meansとどのように比較されるかを見ていました。

ここに私が理解したことがあります、私の概念が間違っているかどうか教えてください:

GMMは、両方のケースでクラスタリングが実現されるという意味で、KNNに似ています。しかし、GMMでは、各クラスターには独自の独立した平均と共分散があります。さらに、k-meansはクラスターへのデータポイントの厳密な割り当てを実行しますが、GMMでは独立したガウス分布のコレクションを取得し、各データポイントについて、分布の1つに属する確率があります。

理解を深めるために、MatLabを使用してコーディングし、目的のクラスタリングを実現しました。特徴抽出の目的でSIFT特徴を使用しました。また、k-meansクラスタリングを使用して値を初期化しました。 (これは VLFeat ドキュメンテーションからです)

_%images is a 459 x 1 cell array where each cell contains the training image
[locations, all_feats] = vl_dsift(single(images{1}), 'fast', 'step', 50); %all_feats will be 128 x no. of keypoints detected
for i=2:(size(images,1))
    [locations, feats] = vl_dsift(single(images{i}), 'fast', 'step', 50);
    all_feats = cat(2, all_feats, feats); %cat column wise all features
end

numClusters = 50; %Just a random selection.
% Run KMeans to pre-cluster the data
[initMeans, assignments] = vl_kmeans(single(all_feats), numClusters, ...
    'Algorithm','Lloyd', ...
    'MaxNumIterations',5);

initMeans = double(initMeans); %GMM needs it to be double

% Find the initial means, covariances and priors
for i=1:numClusters
    data_k = all_feats(:,assignments==i);
    initPriors(i) = size(data_k,2) / numClusters;

    if size(data_k,1) == 0 || size(data_k,2) == 0
        initCovariances(:,i) = diag(cov(data'));
    else
        initCovariances(:,i) = double(diag(cov(double((data_k')))));
    end
end

% Run EM starting from the given parameters
[means,covariances,priors,ll,posteriors] = vl_gmm(double(all_feats), numClusters, ...
    'initialization','custom', ...
    'InitMeans',initMeans, ...
    'InitCovariances',initCovariances, ...
    'InitPriors',initPriors);
_

上記に基づいて、meanscovariances、およびpriorsがあります。私の主な質問は、今何ですか?今はちょっと迷ってる。

また、meanscovariancesベクトルのサイズはそれぞれ_128 x 50_です。各列はクラスターであるため、それらが_1 x 50_になると期待していましたが、各クラスターには平均と共分散が1つしかありませんか? (128がSIFT機能であることは知っていますが、平均と共分散を期待していました)。

K-meansでは、MatLabコマンドknnsearch(X,Y)を使用しました。これは基本的に、Yの各ポイントについてXの最近傍を見つけます。

GMMでこれをどのように達成するか、その確率のコレクションを知っています。もちろん、その確率から最も近い一致が勝者クラスターになります。そして、これは私が混乱しているところです。オンラインのすべてのチュートリアルは、meanscovariancesの値を達成する方法を教えていますが、クラスタリングの観点から実際にそれらを使用する方法についてはあまり述べていません。

ありがとうございました

24
StuckInPhD

[〜#〜] gmm [〜#〜] モデルが何を表しているかを最初に見れば役立つと思います。 Statistics Toolboxfunctions を使用しますが、VLFeatを使用しても同じことができるはずです。

2つの1次元の混合 正規分布 の場合から始めましょう。各ガウス分布は meanvariance のペアで表されます。混合物は各コンポーネントに重みを割り当てます(前)。

たとえば、2つの正規分布を等しい重み(_p = [0.5; 0.5]_)、最初の中心を0、2番目の中心を5(_mu = [0; 5]_)、1番目と2番目の分散をそれぞれ1と2に等しくする分布(sigma = cat(3, 1, 2))。

以下でわかるように、平均は分布を効果的にシフトしますが、分散はそれがどれだけ広く/狭く、平坦/先のとがっているかを決定します。前者は、混合比率を設定して、最終的な結合モデルを取得します。

_% create GMM
mu = [0; 5];
sigma = cat(3, 1, 2);
p = [0.5; 0.5];
gmm = gmdistribution(mu, sigma, p);

% view PDF
ezplot(@(x) pdf(gmm,x));
_

2-mixtures of 1D gaussians

EMクラスタリング の考え方は、各分布がクラスターを表すということです。したがって、1次元データを使用した上記の例では、インスタンス_x = 0.5_が与えられた場合、99.5%の確率で最初のクラスター/モードに属するものとして割り当てます

_>> x = 0.5;
>> posterior(gmm, x)
ans =
    0.9950    0.0050    % probability x came from each component
_

インスタンスが最初のベル曲線の下にどのように収まるかを確認できます。一方、真ん中に点をとると、答えはより曖昧になります(点はclass = 2に割り当てられますが、確実性ははるかに低くなります)。

_>> x = 2.2
>> posterior(gmm, 2.2)
ans =
    0.4717    0.5283
_

同じ概念が 多変量正規分布 でより高い次元に拡張されます。複数の次元で、 共分散行列 は、特徴間の相互依存関係を説明するための分散の一般化です。

2次元の2つのMVN分布が混在する場合の例を再び示します。

_% first distribution is centered at (0,0), second at (-1,3)
mu = [0 0; 3 3];

% covariance of first is identity matrix, second diagonal
sigma = cat(3, eye(2), [5 0; 0 1]);

% again I'm using equal priors
p = [0.5; 0.5];

% build GMM
gmm = gmdistribution(mu, sigma, p);

% 2D projection
ezcontourf(@(x,y) pdf(gmm,[x y]));

% view PDF surface
ezsurfc(@(x,y) pdf(gmm,[x y]));
_

2-mixtures of 2D gaussians

共分散行列がジョイント密度関数の形状にどのように影響するかについては、いくつかの直観があります。たとえば、2Dでは、行列が対角線の場合、2つの次元が共変しないことを意味します。その場合、PDFは、どの次元の分散が大きいかに応じて、水平または垂直に伸びた軸に沿った楕円のように見えます。等しい場合、形状は完全な円(最後に、共分散行列が任意(非対角であるが定義上まだ対称的)である場合、おそらくある角度で回転した引き伸ばされた楕円のように見えます。

したがって、前の図では、2つの「バンプ」を区別し、それぞれがどのような分布を表しているのかを確認できるはずです。 3D以上の次元に移動するとき、それを(ハイパー-) 楕円体 のN次元で表すと考えてください。

2d covariance matrix


GMMを使用して clustering を実行する場合、目標は、結果のモデルがデータに最も適合するようにモデルパラメーター(各分布の平均と共分散、および事前分布)を見つけることです。最適な推定は、GMMモデルのデータの 尤度の最大化 に変換されます(Pr(data|model)を最大化するモデルを選択することを意味します)。

他の人が説明したように、これは EMアルゴリズム ;を使用して反復的に解決されます。 EMは、混合モデルのパラメーターの初期推定または推定から始まります。パラメータによって生成された混合密度に対してデータインスタンスを繰り返し再スコアリングします。再スコアリングされたインスタンスは、パラメーター推定値を更新するために使用されます。これは、アルゴリズムが収束するまで繰り返されます。

残念ながら、EMアルゴリズムはモデルの初期化に非常に敏感であるため、不適切な初期値を設定した場合、または local optima でスタックした場合でも収束に時間がかかる場合があります。 GMMパラメーターを初期化するより良い方法は、最初のステップとして K-means を使用し(コードで示したように)、それらのクラスターの平均/ covを使用してEMを初期化することです。

他のクラスター分析手法と同様に、まず使用するために クラスターの数を決定する が必要です。 クロス検証 は、クラスター数の適切な推定値を見つけるための堅牢な方法です。

EMクラスタリングは、多くのパラメーターを適合させる必要があるという事実に悩まされており、通常、良好な結果を得るには、多くのデータと多くの反復を必要とします。 M混合物とD次元データを含む制約のないモデルには、_D*D*M + D*M + M_パラメーター(それぞれサイズDxDのM共分散行列、長さDのM平均ベクトル、および長さMの事前分布のベクトル)のフィッティングが含まれます。 多数の次元 のデータセットでは問題になる可能性があります。そのため、問題を単純化するために制限と仮定を課すのが慣習です( overfitting 問題を避けるために regularization のようなものです)。たとえば、共分散行列を対角線のみに固定したり、すべてのガウス分布で共分散行列 shared を持つこともできます。

最後に、混合モデルを適合させたら、各混合成分を使用してデータインスタンスの事後確率を計算することでクラスターを探索できます(1Dの例で示したように)。 GMMは、この「メンバーシップ」の可能性に従って各インスタンスをクラスターに割り当てます。


ガウス混合モデルを使用したデータのクラスタリングのより完全な例を次に示します。

_% load Fisher Iris dataset
load fisheriris

% project it down to 2 dimensions for the sake of visualization
[~,data] = pca(meas,'NumComponents',2);
mn = min(data); mx = max(data);
D = size(data,2);    % data dimension    

% inital kmeans step used to initialize EM
K = 3;               % number of mixtures/clusters
cInd = kmeans(data, K, 'EmptyAction','singleton');

% fit a GMM model
gmm = fitgmdist(data, K, 'Options',statset('MaxIter',1000), ...
    'CovType','full', 'SharedCov',false, 'Regularize',0.01, 'Start',cInd);

% means, covariances, and mixing-weights
mu = gmm.mu;
sigma = gmm.Sigma;
p = gmm.PComponents;

% cluster and posterior probablity of each instance
% note that: [~,clustIdx] = max(p,[],2)
[clustInd,~,p] = cluster(gmm, data);
tabulate(clustInd)

% plot data, clustering of the entire domain, and the GMM contours
clrLite = [1 0.6 0.6 ; 0.6 1 0.6 ; 0.6 0.6 1];
clrDark = [0.7 0 0 ; 0 0.7 0 ; 0 0 0.7];
[X,Y] = meshgrid(linspace(mn(1),mx(1),50), linspace(mn(2),mx(2),50));
C = cluster(gmm, [X(:) Y(:)]);
image(X(:), Y(:), reshape(C,size(X))), hold on
gscatter(data(:,1), data(:,2), species, clrDark)
h = ezcontour(@(x,y)pdf(gmm,[x y]), [mn(1) mx(1) mn(2) mx(2)]);
set(h, 'LineColor','k', 'LineStyle',':')
hold off, axis xy, colormap(clrLite)
title('2D data and fitted GMM'), xlabel('PC1'), ylabel('PC2')
_

EM clustering

61
Amro

K-MeansまたはGMMを使用したクラスタリングの背後には同じ洞察があります。しかし、あなたが言及したように、混合ガウスはデータの共分散を考慮に入れます。 GMM統計モデルの最尤パラメーター(または最大事後MAP)を見つけるには、 EMアルゴリズム と呼ばれる反復プロセスを使用する必要があります。各反復はEステップ(期待値)とMステップ(最大化)で構成され、収束するまで繰り返します。収束後、各クラスターモデルの各データベクトルのメンバーシップ確率を簡単に推定できます。

3
Eric

共分散は、空間内でデータがどのように変化するかを示します。分布に大きな共分散がある場合、データの広がりが大きく、逆もまた同様です。ガウス分布(平均および共分散パラメーター)のPDF)がある場合、その分布下のテストポイントのメンバーシップ信頼度を確認できます。

ただし、GMMにはK平均の弱点もあるため、クラスターの数であるパラメーターKを選択する必要があります。これには、データの多様性を十分に理解する必要があります。

2
Taygun