Этот пример показывает, как реализовать мягкую кластеризацию на моделируемых данных из смеси Распределений Гаусса.
Оценки 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];
Оцените апостериорные вероятности участника компонента для всех точек данных с помощью подходящего gm
GMM. Они представляют кластерные очки членства.
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');
Оцените апостериорные вероятности участника компонента для всех точек данных с помощью подходящего gmSharedDiag
GMM. Оцените мягкие кластерные присвоения.
[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