Этот пример показывает, как реализовать мягкую кластеризацию на моделируемых данных из смеси Гауссовых распределений.
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-средних значений кластеризацию, которая также присваивает каждую точку каждому кластеру с счетом принадлежности. Алгоритм нечетких k-средних значений принимает, что кластеры имеют приблизительно сферическую форму и все примерно равный размер. Это сопоставимо с распределением Гауссова смеси с одной матрицей ковариации, которая разделяется между всеми компонентами и является произведением матрицы тождеств. Напротив, gmdistribution
позволяет вам задать различные ковариационные структуры. По умолчанию необходимо оценить отдельную, без ограничений ковариационную матрицу для каждого компонента. Более ограниченной опцией, ближе к k-средних значений, является оценка общей диагональной ковариационной матрицы.
Подгонка GMM к данным, но задайте, что компоненты имеют одну и ту же диагональную ковариационную матрицу. Эта спецификация аналогична реализации нечеткой k-средних значений кластеризации, но обеспечивает большую гибкость, допуская неравные отклонения для различных переменных.
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