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