混合高斯模型聚類

2021-06-28 01:07:37 字數 3929 閱讀 6855

翻譯自matlab幫助。

混合高斯模型簡介

混合高斯模型基於多變數正

態分布。

類gmdistribution通過使用em演算法來擬合資料,它基於各觀測量計算各成分密度的後驗概率。

高斯混合模型常用於聚類,通過選擇成分最大化後驗概率來完成聚類。

與k-means聚類相似,高斯混合模型也使用迭代演算法計算,最終收斂到區域性最優。高斯混合模型在各類尺寸不同、聚類間有相關關係的的時候可能比k-means聚類更合適。使用高斯混合模型的聚類屬於軟聚類方法(乙個觀測量按概率屬於各個類,而不是完全屬於某個類),各點的後驗概率提示了各資料點屬於各個類的可能性。

高斯混合聚類

高斯混合分布可以用來做資料聚類。

1. 為了展示高斯混合聚類的過程,先利用

mvnrnd函式產生一些二變數高斯分布**資料:

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)];

scatter(x(:,1),x(:,2),10,'ko')

2. 然後擬合兩成分高斯混合分布。這裡,準確的成分數是已知的,而

在處理實際資料時就需要通過測試、比較多個成分的擬合結果來決定這一數量。

options = statset('display','final');

gm = gmdistribution.fit(x,2,'options',options);

結果為49 iterations, log-likelihood = -1207.91

3. 繪製估計的兩成分混合分布的

概率密度等高線如下。可以看到,

兩變數正態成分是相互重疊的,但是它們的峰值不同,這表明資料有理由分成兩個聚類:

hold on

ezcontour(@(x,y)pdf(gm,[x y]),[-8 6],[-8 6]);

hold off

4. 使用cluster函式將擬合的混合分布資料分離成兩類:

idx = cluster(gm,x);

cluster1 = (idx == 1);

cluster2 = (idx == 2);

scatter(x(cluster1,1),x(cluster1,2),10,'r+');

hold on

scatter(x(cluster2,1),x(cluster2,2),10,'bo');

hold off

legend('cluster 1','cluster 2','location','nw')

每個聚類與混合分布中的乙個成分有關。

cluster基於估計的後驗概率對各點做分類,屬於哪個類的後驗概率大則屬於哪個類。posterior函式可以返回這個後驗概率值。

例如,繪製各點屬於第一成分的後驗概率如下

p = posterior(gm,x);

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

legend('cluster 1','cluster 2','location','nw')

clrmap = jet(80); colormap(clrmap(9:72,:))

ylabel(colorbar,'component 1 posterior probability')

使用高斯混合分布做軟聚類

另一種分類的方法是使用前面計算的後驗概率做軟聚類。各點可以被賦予屬於各類的乙個得分,這個得分就是簡單的後驗概率,描述了各點與各聚類原型的相似程度。這樣,各點可以按在聚類中的得分排序:

[~,order] = sort(p(:,1));

plot(1:size(x,1),p(order,1),'r-',1:size(x,1),p(order,2),'b-');

legend(,'location','nw');

ylabel('cluster membership score');

xlabel('point ranking');

儘管在資料散點圖中很難看出分類的好壞,但

得分圖可以更明顯的看出擬合的分布很好地完成了資料聚類,在得分0.5附近的點很少,即大多數點都易於分開。

使用高斯混合分布的軟聚類與模糊k-means聚類方法相似,

後者也是賦予各點相對各類的乙個得分,但它進一步假設各聚類形狀上近似球形,尺寸大小上也近似相等。這相當於所有成分協方差矩陣相同的高斯混合分布。而

gmdistribution函式允許你設定各成分不同的協方差,預設情況下是為每個成分估計乙個分離的無約束的協方差矩陣;而如果設定估計乙個公共的對角協方差矩陣,則就與k-means相近了:

gm2 = gmdistribution.fit(x,2,'covtype','diagonal',...

'sharedcov',true);

上面對於協方差的選項與模糊k-means聚類相似,但更靈活,允許不同的變數有不等的方差。

計算軟聚類的得分可以不用先算硬聚類,可以直接使用posterior或cluster函式直接計算,如下

p2 = posterior(gm2,x); % equivalently [idx,p2] = cluster(gm2,x)

[~,order] = sort(p2(:,1));

plot(1:size(x,1),p2(order,1),'r-',1:size(x,1),p2(order,2),'b-');

legend(,'location','nw');

ylabel('cluster membership score');

xlabel('point ranking');

對新來點的聚類

前面的例子中,混合分布的資料擬合與資料聚類是分開的,兩步中使用了相同的資料。

當然你也可以在cluster函式做聚類時使用新的資料點,實現新來點在原資料聚類中的分類。

1. 給定資料集x,首先擬合高斯混合分布,前面的**已經實現gm

gm =

gaussian mixture distribution with 2 components in 2 dimensions

component 1:

mixing proportion: 0.312592

mean:    -0.9082   -2.1109

component 2:

mixing proportion: 0.687408

mean:     0.9532    1.8940

2. 然後可以對新資料集中的點分類到對x的聚類中

y = [mvnrnd(mu1,sigma1,50);mvnrnd(mu2,sigma2,25)];

idx = cluster(gm,y);

cluster1 = (idx == 1);

cluster2 = (idx == 2);

scatter(y(cluster1,1),y(cluster1,2),10,'r+');

hold on

scatter(y(cluster2,1),y(cluster2,2),10,'bo');

hold off

legend('class 1','class 2','location','nw')

與前面的例子一樣,各點的後驗概率被作為得分,而不是直接做硬聚類。

完成聚類的新資料集y應該來自與x相同的種群,即來自x的混合分布中,因為在估計y的後驗概率時使用了基於x擬合的混合高斯分布的聯合概率。

高斯混合聚類

高斯混合聚類 將高斯分布 貝葉斯公式 極大似然法 em 估計 的思路混合在這一種方法中。高斯混合聚類是從概率的角度對樣本進行聚類的,而且這個概率是連續概率。先驗概率 指根據以往經驗和分析得到的概率。類條件概率 指已知乙個條件下,結果發生的概率。後驗概率 判斷結果的發生是由哪個原因引起的概率。一元高斯...

聚類演算法之高斯混合模型

高斯混合模型 gmm gaussian mixture model 統計學習的模型有兩種,一種是概率模型,一種是非概率模型。所謂概率模型,是指訓練模型的形式是p y x 輸入是x,輸出是y,訓練後模型得到的輸出不是乙個具體的值,而是一系列的概率值 對應於分類問題來說,就是輸入x對應於各個不同y 類 ...

用matlab做高斯混合模型 GMM 聚類分析

訓練gmm引數 options statset maxiter 1000 gmm gmdistribution.fit feature,k,covtype diagonal regularize 1e 10,options options k 聚類的總類別數 covtype 設定協方差矩陣的型別 r...