【谷速軟件】matlab源碼-GMM的EM算法實現(xiàn)_第1頁
【谷速軟件】matlab源碼-GMM的EM算法實現(xiàn)_第2頁
【谷速軟件】matlab源碼-GMM的EM算法實現(xiàn)_第3頁
【谷速軟件】matlab源碼-GMM的EM算法實現(xiàn)_第4頁
【谷速軟件】matlab源碼-GMM的EM算法實現(xiàn)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論