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