В этом примере показано, как реализовать мягкую кластеризацию на моделируемых данных из смеси гауссовых распределений.
cluster оценивает апостериорные вероятности членства в кластере, а затем назначает каждую точку кластеру, соответствующему максимальной апостериорной вероятности. Мягкая кластеризация - альтернативный метод кластеризации, позволяющий некоторым точкам данных принадлежать к нескольким кластерам. Для реализации программной кластеризации:
Назначьте каждой точке данных оценку членства в кластере, которая описывает, насколько каждая точка аналогична архетипу каждого кластера. Для смеси гауссовых распределений кластерный архетип является соответствующим средним компонентом, и компонент может быть оцененной апостериорной вероятностью принадлежности кластера.
Ранжируйте баллы по их показателю членства в кластере.
Проверьте баллы и определите членство в кластере.
Для алгоритмов, использующих апостериорные вероятности в качестве баллов, точка данных является членом кластера, соответствующего максимальной апостериорной вероятности. Однако если существуют другие кластеры с соответствующими задними вероятностями, близкими к максимальным, то точка данных также может быть членом этих кластеров. Перед кластеризацией рекомендуется определить пороговое значение баллов, которые дают множественные членства в кластерах.
Этот пример следует из кластерной гауссовой смеси данных с использованием жесткой кластеризации.
Моделирование данных из смеси двух двумерных гауссовых распределений.
rng(0,'twister') % 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)];
Установите двухкомпонентную модель гауссовой смеси (GMM). Поскольку существует два компонента, предположим, что любая точка данных с апостериорными вероятностями членства в кластере в интервале [0,4,0,6] может быть членом обоих кластеров.
gm = fitgmdist(X,2); threshold = [0.4 0.6];
Оценить апостериорные вероятности компонентов для всех точек данных с использованием установленного GMM gm. Они представляют оценки членства в кластере.
P = posterior(gm,X);
Для каждого кластера ранжируйте баллы членства для всех точек данных. Для каждого кластера постройте график каждого балла членства в точках данных относительно его ранжирования относительно всех других точек данных.
n = size(X,1); [~,order] = sort(P(:,1)); figure plot(1:n,P(order,1),'r-',1:n,P(order,2),'b-') legend({'Cluster 1', 'Cluster 2'}) ylabel('Cluster Membership Score') xlabel('Point Ranking') title('GMM with Full Unshared Covariances')

Хотя четкое разделение трудно увидеть на графике рассеяния данных, построение графиков оценки членства указывает на то, что подходящее распределение делает хорошую работу по разделению данных на группы.
Постройте график данных и назначьте кластеры по максимальной апостериорной вероятности. Определите точки, которые могут находиться в любом кластере.
idx = cluster(gm,X); idxBoth = find(P(:,1)>=threshold(1) & P(:,1)<=threshold(2)); numInBoth = numel(idxBoth)
numInBoth = 7
figure gscatter(X(:,1),X(:,2),idx,'rb','+o',5) hold on plot(X(idxBoth,1),X(idxBoth,2),'ko','MarkerSize',10) legend({'Cluster 1','Cluster 2','Both Clusters'},'Location','SouthEast') title('Scatter Plot - GMM with Full Unshared Covariances') hold off

Используя пороговый интервал оценки, семь точек данных могут находиться в любом кластере.
Мягкая кластеризация с использованием GMM аналогична нечеткой кластеризации k-means, которая также назначает каждую точку каждому кластеру с оценкой членства. Алгоритм нечетких k-средних предполагает, что кластеры имеют приблизительно сферическую форму и все примерно одинаковый размер. Это сравнимо с распределением гауссовой смеси с одной ковариационной матрицей, которая является общей для всех компонентов и кратной единичной матрице. Напротив, gmdistribution позволяет задать различные ковариационные структуры. По умолчанию для каждого компонента оценивается отдельная, неограниченная ковариационная матрица. Более ограниченным вариантом, ближе к k-среднему, является оценка общей диагональной ковариационной матрицы.
Поместите GMM в данные, но укажите, что компоненты имеют одинаковую диагональную ковариационную матрицу. Эта спецификация аналогична реализации нечеткой кластеризации k-means, но обеспечивает большую гибкость, допуская неравные дисперсии для различных переменных.
gmSharedDiag = fitgmdist(X,2,'CovType','Diagonal','SharedCovariance',true');
Оценить апостериорные вероятности компонентов для всех точек данных с использованием установленного GMM gmSharedDiag. Оценить мягкие назначения кластеров.
[idxSharedDiag,~,PSharedDiag] = cluster(gmSharedDiag,X);
idxBothSharedDiag = find(PSharedDiag(:,1)>=threshold(1) & ...
PSharedDiag(:,1)<=threshold(2));
numInBoth = numel(idxBothSharedDiag)numInBoth = 5
Предполагая общие диагональные ковариации между компонентами, пять точек данных могут находиться в любом кластере.
Для каждого кластера:
Ранжирование баллов членства для всех точек данных.
Постройте график каждой оценки членства в точках данных относительно ее ранжирования относительно всех других точек данных.
[~,orderSharedDiag] = sort(PSharedDiag(:,1)); figure plot(1:n,PSharedDiag(orderSharedDiag,1),'r-',... 1:n,PSharedDiag(orderSharedDiag,2),'b-') legend({'Cluster 1' 'Cluster 2'},'Location','NorthEast') ylabel('Cluster Membership Score') xlabel('Point Ranking') title('GMM with Shared Diagonal Component Covariances')

Постройте график данных и определите жесткие назначения кластеризации из анализа GMM, предполагая общие диагональные ковариации между компонентами. Кроме того, определите те точки данных, которые могут находиться в любом кластере.
figure gscatter(X(:,1),X(:,2),idxSharedDiag,'rb','+o',5) hold on plot(X(idxBothSharedDiag,1),X(idxBothSharedDiag,2),'ko','MarkerSize',10) legend({'Cluster 1','Cluster 2','Both Clusters'},'Location','SouthEast') title('Scatter Plot - GMM with Shared Diagonal Component Covariances') hold off

cluster | fitgmdist | gmdistribution