Подтвердить что ты не робот

Понимание концепции моделей гауссовой смеси

Я пытаюсь понять GMM, читая источники, доступные в Интернете. Я достиг кластеризации с использованием K-Means и видел, как GMM будет сравнивать с K-средствами.

Вот что я понял, пожалуйста, дайте мне знать, если моя концепция неверна:

GMM подобен KNN, в том смысле, что кластеризация достигается в обоих случаях. Но в GMM каждый кластер имеет собственное независимое среднее и ковариацию. Кроме того, k-средство выполняет жесткие присвоения точек данных кластерам, тогда как в GMM мы получаем коллекцию независимых гауссовских распределений, и для каждой точки данных мы имеем вероятность того, что она принадлежит к одному из распределений.

Чтобы лучше понять, я использовал MatLab для кодирования и достижения желаемой кластеризации. Я использовал функции SIFT для извлечения функции. И для инициализации значений использовалась кластеризация k-mean. (Это из документа 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);

Исходя из вышеизложенного, у меня есть means, covariances и priors. Мой главный вопрос: что теперь? Сейчас я как бы потерян.

Также векторы means, covariances имеют размер 128 x 50. Я ожидал, что они будут 1 x 50, так как каждый столбец является кластером, не будет ли у каждого кластера только одно среднее и ковариация? (Я знаю, что 128 - это функции SIFT, но я ожидал средств и ковариаций).

В k-значении я использовал команду MatLab knnsearch(X,Y), которая в основном находит ближайшего соседа в X для каждой точки в Y.

Итак, как добиться этого в GMM, я знаю его совокупность вероятностей, и, конечно, ближайший матч от этой вероятности будет нашим выигрывающим кластером. И здесь я смущен. Все обучающие программы в Интернете научили, как достичь значений means, covariances, но не много говорят о том, как их использовать в терминах кластеризации.

Спасибо

4b9b3361

Ответ 1

Я думаю, что это поможет, если вы сначала посмотрите, что представляет собой модель GMM. Я буду использовать функции из Статистика Toolbox, но вы должны быть в состоянии сделать то же самое с помощью VLFeat.

Начнем со случая смеси двух одномерных нормальных распределений. Каждый гауссов представлен парой mean и variance. Смесь присваивает вес каждому компоненту (ранее).

Например, смешайте два нормальных распределения с равными весами (p = [0.5; 0.5]), первый центрируется на 0, а второй - на 5 (mu = [0; 5]), а дисперсии равны 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 заключается в том, что каждый дистрибутив представляет собой кластер. Итак, в приведенном выше примере с одномерными данными, если вам был предоставлен экземпляр x = 0.5, мы бы присвоили его как принадлежащий первому кластеру/режиму с вероятностью 99,5%

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

вы можете видеть, как экземпляр хорошо падает под первой колоколькой. Если вы возьмете точку посередине, ответ будет более неоднозначным (точка, назначенная классу = 2, но с гораздо меньшей степенью достоверности):

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

Те же понятия распространяются на более высокую размерность с многомерными нормальными распределениями. В более чем одном измерении матрица ковариации является обобщением дисперсии для учета взаимозависимостей между функциями.

Вот пример снова со смесью двух распределений 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, если матрица диагональна, это означает, что оба измерения не меняются. В этом случае PDF будет выглядеть как выровненный по оси эллипс, растянутый либо по горизонтали, либо по вертикали, согласно которому размерность имеет большую дисперсию. Если они равны, то форма является идеальным кругом (распределение распределяется в обоих измерениях с равной скоростью). Наконец, если ковариационная матрица произвольна (недиагональная, но все еще симметричная по определению), то она, вероятно, будет выглядеть как растянутый эллипс, повернутый под некоторым углом.

Итак, на предыдущем рисунке вы должны быть в состоянии рассказать обо всех "ударах" и о том, какое индивидуальное распределение каждый представляет. Когда вы идете в 3D и более высокие измерения, подумайте об этом как о представлении (гипер-) эллипсоидов в N-dims.

2d covariance matrix


Теперь, когда вы выполняете кластеризацию с использованием GMM, цель состоит в том, чтобы найти параметры модели (среднее значение и ковариацию каждого дистрибутива, а также приоритетов), чтобы результирующая модель лучше всего подходит для данных. Оценка наилучшего соответствия переводит в максимизацию вероятности данных, данных модели GMM (что означает, что вы выбираете модель, которая максимизирует Pr(data|model)).

Как объяснили другие, это решается итеративно с помощью алгоритма EM; EM начинается с начальной оценки или догадки параметров модели смеси. Он итеративно переучитывает экземпляры данных против плотности смеси, создаваемой параметрами. Затем повторно используемые экземпляры используются для обновления оценок параметров. Это повторяется до тех пор, пока алгоритм не сходится.

К сожалению, алгоритм ЭМ очень чувствителен к инициализации модели, поэтому может потребоваться много времени, чтобы сходиться, если вы устанавливаете плохие начальные значения или даже застреваете в локальных оптимумах. Лучшим способом инициализации параметров GMM является использование K-means в качестве первого шага (например, вы указали в своем коде), и используя среднее значение /cov эти кластеры для инициализации EM.

Как и в случае других методов кластерного анализа, сначала нужно принять решение о количестве кластеров. Cross-validation - это надежный способ найти хорошую оценку количества кластеров.

Кластеризация EM страдает от того, что существует множество параметров, которые подходят, и обычно требуется много данных и много итераций для получения хороших результатов. Неконструированная модель с M-смесями и D-мерными данными включает в себя подгонку параметров D*D*M + D*M + M (M ковариационных матриц каждого размера DxD, плюс M средних векторов длины D плюс вектор перьевых длин M). Это может быть проблемой для наборов данных с большим количеством измерений. Поэтому принято налагать ограничения и предположения для упрощения проблемы (своего рода regularization, чтобы избежать overfitting). Например, вы можете исправить матрицу ковариации только диагональной или даже иметь ковариационные матрицы совместно по всем гауссианам.

Наконец, как только вы установите модель смеси, вы можете исследовать кластеры, вычисляя заднюю вероятность экземпляров данных с использованием каждого компонента смеси (например, я показал пример 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

Ответ 2

Вы правы, есть такое же понимание кластеризации с K-Means или GMM. Но поскольку вы упомянули гауссовые смеси, учитывайте ковариации данных. Чтобы найти параметры максимального правдоподобия (или максимальную апостериорную MAP) статистической модели GMM, вам необходимо использовать итеративный процесс, называемый алгоритмом EM. Каждая итерация состоит из E-шага (Ожидание) и M-шага (Максимизация) и повторения до сближения. После конвергенции вы можете легко оценить вероятности принадлежности каждого вектора данных для каждой кластерной модели.

Ответ 3

Ковариация сообщает вам, как данные изменяются в пространстве, если распределение имеет большую ковариацию, что означает, что данные более распространены и наоборот. Когда у вас есть PDF файл гауссовского дистрибутива (средний и ковариационный параметры), вы можете проверить уверенность в членстве в тестовой точке в этом дистрибутиве.

Однако GMM также страдает от слабости K-Means, что вам нужно выбрать параметр K, который является числом кластеров. Это требует хорошего понимания мультимодальности данных.