В этом примере показано, как реализовать жесткую кластеризацию на моделируемых данных из смеси гауссовых распределений.
Модели гауссовой смеси можно использовать для кластеризации данных, понимая, что многомерные нормальные компоненты подогнанной модели могут представлять кластеры.
Моделирование данных из смеси двух двумерных гауссовых распределений с использованием 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
Постройте график расчетных контуров плотности вероятности для двухкомпонентного распределения смеси. Два двумерных нормальных компонента перекрываются, но их пики различны. Это говорит о том, что данные можно разумно разделить на два кластера.
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