![【谷速軟件】matlab源碼-GMM的EM算法實現(xiàn)_第1頁](http://file4.renrendoc.com/view/89dfd0cd949059f1dd89cdbc07ab7490/89dfd0cd949059f1dd89cdbc07ab74901.gif)
![【谷速軟件】matlab源碼-GMM的EM算法實現(xiàn)_第2頁](http://file4.renrendoc.com/view/89dfd0cd949059f1dd89cdbc07ab7490/89dfd0cd949059f1dd89cdbc07ab74902.gif)
![【谷速軟件】matlab源碼-GMM的EM算法實現(xiàn)_第3頁](http://file4.renrendoc.com/view/89dfd0cd949059f1dd89cdbc07ab7490/89dfd0cd949059f1dd89cdbc07ab74903.gif)
![【谷速軟件】matlab源碼-GMM的EM算法實現(xiàn)_第4頁](http://file4.renrendoc.com/view/89dfd0cd949059f1dd89cdbc07ab7490/89dfd0cd949059f1dd89cdbc07ab74904.gif)
![【谷速軟件】matlab源碼-GMM的EM算法實現(xiàn)_第5頁](http://file4.renrendoc.com/view/89dfd0cd949059f1dd89cdbc07ab7490/89dfd0cd949059f1dd89cdbc07ab74905.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
在
聚類算法K-Means,K-Medoids,GMM,Spectralclustering,Ncut一文中我們給出了GMM算法的根本模型與似然函數(shù),在EM算法原理中對EM算法的實現(xiàn)與收斂性證明進行了詳細說明。本文主要針對如何用EM算法在混合高斯模型下進行聚類進行代碼上的分析說明。
1.GMM模型:每個GMM由K
個Gaussian分布組成,每個Gaussian稱為一個“Component〞,這些Component線性加成在一起就組成了GMM的概率密度函數(shù):
根據(jù)上面的式子,如果我們要從GMM的分布中隨機地取一個點的話,實際上可以分為兩步:首先隨機地在這K個GaussianComponent之中選一個,每個Component被選中的概率實際上就是它的系數(shù)pi(k)
,選中了Component之后,再單獨地考慮從這個Component的分布中選取一個點就可以了──這里已經(jīng)回到了普通的Gaussian分布,轉(zhuǎn)化為了的問題。那么如何用GMM來做clustering呢?其實很簡單,現(xiàn)在我們有了數(shù)據(jù),假定它們是由GMM生成出來的,那么我們只要根據(jù)數(shù)據(jù)推出GMM的概率分布來就可以了,然后GMM的K
個Component實際上就對應了K
個cluster了。根據(jù)數(shù)據(jù)來推算概率密度通常被稱作densityestimation,特別地,當我們在〔或假定〕了概率密度函數(shù)的形式,而要估計其中的參數(shù)的過程被稱作“參數(shù)估計〞。
2.參數(shù)與似然函數(shù):現(xiàn)在假設我們有N
個數(shù)據(jù)點,并假設它們服從某個分布〔記作p(x)
〕,現(xiàn)在要確定里面的一些參數(shù)的值,例如,在GMM中,我們就需要確定影響因子pi(k)、各類均值pMiu(k)
和各類協(xié)方差pSigma(k)
這些參數(shù)。我們的想法是,找到這樣一組參數(shù),它所確定的概率分布生成這些給定的數(shù)據(jù)點的概率最大,而這個概率實際上就等于
,我們把這個乘積稱作似然函數(shù)(LikelihoodFunction)。通常單個點的概率都很小,許多很小的數(shù)字相乘起來在計算機里很容易造成浮點數(shù)下溢,因此我們通常會對其取對數(shù),把乘積變成加和
,得到log-likelihoodfunction。接下來我們只要將這個函數(shù)最大化〔通常的做法是求導并令導數(shù)等于零,然后解方程〕,亦即找到這樣一組參數(shù)值,它讓似然函數(shù)取得最大值,我們就認為這是最適宜的參數(shù),這樣就完成了參數(shù)估計的過程。下面讓我們來看一看GMM的log-likelihoodfunction:
由于在對數(shù)函數(shù)里面又有加和,我們沒法直接用求導解方程的方法直接求得最大值。為了解決這個問題,我們采取之前從GMM中隨機選點的方法:分成兩步,實際上也就類似于K-means
的兩步。
3.算法流程:1.
估計數(shù)據(jù)由每個Component生成的概率〔并不是每個Component被選中的概率〕:對于每個數(shù)據(jù)
來說,它由第
個Component生成的概率為
其中N〔xi|μk,Σk〕就是后驗概率。
2.通過極大似然估計可以通過求到令參數(shù)=0得到參數(shù)pMiu,pSigma的值。具體請見這篇文章第三局部。
其中
,并且
也順理成章地可以估計為
。
3.
重復迭代前面兩步,直到似然函數(shù)的值收斂為止。
4.matlab實現(xiàn)GMM聚類代碼與解釋:
說明:fea為訓練樣本數(shù)據(jù),gnd為樣本標號。算法中的思想和上面寫的一模一樣,在最后的判斷accuracy方面,由于聚類和分類不同,只是得到一些cluster,而并不知道這些cluster應該被打上什么標簽,或者說。由于我們的目的是衡量聚類算法的performance,因此直接假定這一步能實現(xiàn)最優(yōu)的對應關(guān)系,將每個cluster對應到一類上去。一種方法是枚舉所有可能的情況并選出最優(yōu)解,另外,對于這樣的問題,我們還可以用
Hungarianalgorithm
來求解。具體的Hungarian代碼我放在了資源里,調(diào)用方法已經(jīng)寫在下面函數(shù)中了。
注意:資源里我放的是Kmeans的代碼,大家下載的時候只要用bestMap.m等幾個文件就好~
1.gmm.m,最核心的函數(shù),進行模型與參數(shù)確定。[cpp]
\o"viewplain"viewplain\o"copy"copy\o"print"print\o"?"?function
varargout
=
gmm(X,
K_or_centroids)
%
============================================================
%
Expectation-Maximization
iteration
implementation
of
%
Gaussian
Mixture
Model.
%
%
PX
=
GMM(X,
K_OR_CENTROIDS)
%
[PX
MODEL]
=
GMM(X,
K_OR_CENTROIDS)
%
%
-
X:
N-by-D
data
matrix.
%
-
K_OR_CENTROIDS:
either
K
indicating
the
number
of
%
components
or
a
K-by-D
matrix
indicating
the
%
choosing
of
the
initial
K
centroids.
%
%
-
PX:
N-by-K
matrix
indicating
the
probability
of
each
%
component
generating
each
point.
%
-
MODEL:
a
structure
containing
the
parameters
for
a
GMM:
%
MODEL.Miu:
a
K-by-D
matrix.
%
MODEL.Sigma:
a
D-by-D-by-K
matrix.
%
MODEL.Pi:
a
1-by-K
vector.
%
============================================================
%
@SourceCode
Author:
Pluskid
()
%
@Appended
by
:
Sophia_qing
(/abcjennifer)
%%
Generate
Initial
Centroids
threshold
=
1e-15;
[N,
D]
=
size(X);
if
isscalar(K_or_centroids)
%if
K_or_centroid
is
a
1*1
number
K
=
K_or_centroids;
Rn_index
=
randperm(N);
%random
index
N
samples
centroids
=
X(Rn_index(1:K),
:);
%generate
K
random
centroid
else
%
K_or_centroid
is
a
initial
K
centroid
K
=
size(K_or_centroids,
1);
centroids
=
K_or_centroids;
end
%%
initial
values
[pMiu
pPi
pSigma]
=
init_params();
Lprev
=
-inf;
%上一次聚類的誤差
%%
EM
Algorithm
while
true
%%
Estimation
Step
Px
=
calc_prob();
%
new
value
for
pGamma(N*k),
pGamma(i,k)
=
Xi由第k個Gaussian生成的概率
%
或者說xi中有pGamma(i,k)是由第k個Gaussian生成的
pGamma
=
Px
.*
repmat(pPi,
N,
1);
%分子
=
pi(k)
*
N(xi
|
pMiu(k),
pSigma(k))
pGamma
=
pGamma
./
repmat(sum(pGamma,
2),
1,
K);
%分母
=
pi(j)
*
N(xi
|
pMiu(j),
pSigma(j))對所有j求和
%%
Maximization
Step
-
through
Maximize
likelihood
Estimation
Nk
=
sum(pGamma,
1);
%Nk(1*k)
=
第k個高斯生成每個樣本的概率的和,所有Nk的總和為N。
%
update
pMiu
pMiu
=
diag(1./Nk)
*
pGamma'
*
X;
%update
pMiu
through
MLE(通過令導數(shù)
=
0得到)
pPi
=
Nk/N;
%
update
k個
pSigma
for
kk
=
1:K
Xshift
=
X-repmat(pMiu(kk,
:),
N,
1);
pSigma(:,
:,
kk)
=
(Xshift'
*
...
(diag(pGamma(:,
kk))
*
Xshift))
/
Nk(kk);
end
%
check
for
convergence
L
=
sum(log(Px*pPi'));
if
L-Lprev
<
threshold
break;
end
Lprev
=
L;
end
if
nargout
==
1
varargout
=
{Px};
else
model
=
[];
model.Miu
=
pMiu;
model.Sigma
=
pSigma;
model.Pi
=
pPi;
varargout
=
{Px,
model};
end
%%
Function
Definition
function
[pMiu
pPi
pSigma]
=
init_params()
pMiu
=
centroids;
%k*D,
即k類的中心點
pPi
=
zeros(1,
K);
%k類GMM所占權(quán)重〔influence
factor〕
pSigma
=
zeros(D,
D,
K);
%k類GMM的協(xié)方差矩陣,每個是D*D的
%
距離矩陣,計算N*K的矩陣〔x-pMiu〕^2
=
x^2+pMiu^2-2*x*Miu
distmat
=
repmat(sum(X.*X,
2),
1,
K)
+
...
%x^2,
N*1的矩陣replicateK列
repmat(sum(pMiu.*pMiu,
2)',
N,
1)
-
...%pMiu^2,1*K的矩陣replicateN行
2*X*pMiu';
[~,
labels]
=
min(distmat,
[],
2);%Return
the
minimum
from
each
row
for
k=1:K
Xk
=
X(labels
==
k,
:);
pPi(k)
=
size(Xk,
1)/N;
pSigma(:,
:,
k)
=
cov(Xk);
end
end
function
Px
=
calc_prob()
%Gaussian
posterior
probability
%N(x|pMiu,pSigma)
=
1/((2pi)^(D/2))*(1/(abs(sigma))^0.5)*exp(-1/2*(x-pMiu)'pSigma^(-1)*(x-pMiu))
Px
=
zeros(N,
K);
for
k
=
1:K
Xshift
=
X-repmat(pMiu(k,
:),
N,
1);
%X-pMiu
inv_pSigma
=
inv(pSigma(:,
:,
k));
tmp
=
sum((Xshift*inv_pSigma)
.*
Xshift,
2);
coef
=
(2*pi)^(-D/2)
*
sqrt(det(inv_pSigma));
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國工商銀行補償貿(mào)易借款合同(6篇)
- 2024酒店客房領(lǐng)班年終總結(jié)(7篇)
- 聘用合同模板(30篇)
- 2024年學校開展防災減災工作總結(jié)(9篇)
- 2024-2025學年第2課西方國家古代和近代政治制度的演變-勤徑學升高中歷史選擇性必修1同步練測(統(tǒng)編版2019)
- 2025年專利申請出售協(xié)議
- 2025年化工市場代理購銷居間協(xié)議書
- 2025年醫(yī)療機構(gòu)內(nèi)科承包業(yè)務協(xié)議
- 2025年授權(quán)代理合作合同標準版本
- 2025年電子線圈設備項目申請報告模板
- 2025年電力鐵塔市場分析現(xiàn)狀
- GB 12158-2024防止靜電事故通用要求
- 《教育強國建設規(guī)劃綱要(2024-2035年)》全文
- 山東省濱州市2024-2025學年高二上學期期末地理試題( 含答案)
- 體育老師籃球說課
- 化學-江蘇省蘇州市2024-2025學年2025屆高三第一學期學業(yè)期末質(zhì)量陽光指標調(diào)研卷試題和答案
- 蛋雞生產(chǎn)飼養(yǎng)養(yǎng)殖培訓課件
- 運用PDCA降低住院患者跌倒-墜床發(fā)生率
- 海底撈員工手冊
- 2024CSCO小細胞肺癌診療指南解讀
- 立春氣象與生活影響模板
評論
0/150
提交評論