Этот пример показывает, как реализовать трудно кластеризацию на моделируемых данных из смеси Распределений Гаусса.
Гауссовы модели смеси могут использоваться для кластеризации данных путем понимания, что многомерные нормальные компоненты подобранной модели могут представлять кластеры.
Моделируйте данные из смеси двух двумерных Распределений Гаусса с помощью 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)reshape(pdf(gm,[x(:) y(:)]),size(x)); 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