翻譯自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...