В этом примере показано, как реализовать жесткую кластеризацию на моделируемых данных из смеси Гауссовых распределений.
Гауссовы смешанные модели могут использоваться для кластеризации данных, понимая, что многомерные нормальные компоненты подобранной модели могут представлять кластеры.
Симулируйте данные из смеси двух двухмерных Гауссовых распределений с помощью mvnrnd
.
rng('default') % For reproducibility mu1 = [1 2]; sigma1 = [3 .2; .2 2]; mu2 = [-1 -2]; sigma2 = [2 0; 0 1]; X = [mvnrnd(mu1,sigma1,200); mvnrnd(mu2,sigma2,100)]; n = size(X,1); figure scatter(X(:,1),X(:,2),10,'ko')
Подбор двухкомпонентной Смешанной гауссовской модели (GMM). Здесь вы знаете правильное количество используемых компонентов. На практике с реальными данными это решение потребовало бы сравнения моделей с разным количеством компонентов. Кроме того, запрос на отображение окончательной итерации стандартной программы с максимизацией ожиданий.
options = statset('Display','final'); gm = fitgmdist(X,2,'Options',options)
26 iterations, log-likelihood = -1210.59 gm = Gaussian mixture distribution with 2 components in 2 dimensions Component 1: Mixing proportion: 0.629514 Mean: 1.0756 2.0421 Component 2: Mixing proportion: 0.370486 Mean: -0.8296 -1.8488
Постройте график расчетных контуров плотности вероятностей для двухкомпонентного распределения смеси. Два двухмерных нормальных компонента перекрываются, но их peaks различны. Это говорит о том, что данные можно разумно разделить на два кластера.
hold on gmPDF = @(x,y) arrayfun(@(x0,y0) pdf(gm,[x0,y0]),x,y); fcontour(gmPDF,[-8,6]) title('Scatter Plot and Fitted GMM Contour') hold off
cluster
реализует «жесткую кластеризацию», метод, который присваивает каждую точку данных только одному кластеру. Для GMM, cluster
присваивает каждую точку одному из двух компонентов смеси в GMM. Центр каждого кластера является соответствующим средним компонентом смеси. Для получения дополнительной информации о «мягкой кластеризации», смотрите Кластерные Гауссовы смешанные данные с использованием мягкой кластеризации.
Разделите данные на кластеры путем передачи установленного GMM и данных в cluster
.
idx = cluster(gm,X); cluster1 = (idx == 1); % |1| for cluster 1 membership cluster2 = (idx == 2); % |2| for cluster 2 membership figure gscatter(X(:,1),X(:,2),idx,'rb','+o') legend('Cluster 1','Cluster 2','Location','best')
Каждый кластер соответствует одному из двухмерных нормальных компонентов в распределении смеси. cluster
присваивает данные кластерам на основе счета за членство в кластере. Каждые счета принадлежности к кластеру являются оцененной апостериорной вероятностью того, что точка данных пришла из соответствующего компонента. cluster
присваивает каждую точку компоненту смеси, соответствующему самой высокой апостериорной вероятности.
Можно оценить апостериорные вероятности принадлежности к кластеру, передав установленный GMM и данные в:
cluster
, и запрос на возврат третьего выходного аргумента
Оцените и постройте график апостериорной вероятности первого компонента для каждой точки.
P = posterior(gm,X); figure scatter(X(cluster1,1),X(cluster1,2),10,P(cluster1,1),'+') hold on scatter(X(cluster2,1),X(cluster2,2),10,P(cluster2,1),'o') hold off clrmap = jet(80); colormap(clrmap(9:72,:)) ylabel(colorbar,'Component 1 Posterior Probability') legend('Cluster 1','Cluster 2','Location','best') title('Scatter Plot and Cluster 1 Posterior Probabilities')
P
является n
-by-2 матрица апостериорных вероятностей принадлежности к кластеру. Первый столбец содержит вероятности для кластера 1, а второй столбец соответствует кластеру 2.
Можно также использовать cluster
метод назначения новых точек данных компонентам смеси, содержащимся в исходных данных.
Симулируйте новые данные из смеси Гауссовых распределений. Вместо того, чтобы использовать mvnrnd
можно создать GMM со средствами истинного компонента смеси и стандартными отклонениями с помощью gmdistribution
, и затем передайте GMM, чтобы random
для моделирования данных.
Mu = [mu1; mu2];
Sigma = cat(3,sigma1,sigma2);
p = [0.75 0.25]; % Mixing proportions
gmTrue = gmdistribution(Mu,Sigma,p);
X0 = random(gmTrue,75);
Назначьте кластеры новым данным путем прохождения установленного GMM (gm
) и новые данные для cluster
. Запросите апостериорные вероятности принадлежности к кластеру.
[idx0,~,P0] = cluster(gm,X0); figure fcontour(gmPDF,[min(X0(:,1)) max(X0(:,1)) min(X0(:,2)) max(X0(:,2))]) hold on gscatter(X0(:,1),X0(:,2),idx0,'rb','+o') legend('Fitted GMM Contour','Cluster 1','Cluster 2','Location','best') title('New Data Cluster Assignments') hold off
Для cluster
для обеспечения значимых результатов при кластеризации новых данных, X0
должен происходить из того же населения, что и X
, исходные данные, используемые для создания распределения смеси. В частности, при вычислении апостериорных вероятностей для X0
, cluster
и posterior
используйте оцененные вероятности смешения.
cluster
| fitgmdist
| gmdistribution
| posterior
| random