版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在
聚类算法K-Means,K-Medoids,GMM,Spectralclustering,Ncut一文中我们给出了GMM算法的根本模型与似然函数,在EM算法原理中对EM算法的实现与收敛性证明进行了详细说明。本文主要针对如何用EM算法在混合高斯模型下进行聚类进行代码上的分析说明。
1.GMM模型:每个GMM由K
个Gaussian分布组成,每个Gaussian称为一个“Component〞,这些Component线性加成在一起就组成了GMM的概率密度函数:
根据上面的式子,如果我们要从GMM的分布中随机地取一个点的话,实际上可以分为两步:首先随机地在这K个GaussianComponent之中选一个,每个Component被选中的概率实际上就是它的系数pi(k)
,选中了Component之后,再单独地考虑从这个Component的分布中选取一个点就可以了──这里已经回到了普通的Gaussian分布,转化为了的问题。那么如何用GMM来做clustering呢?其实很简单,现在我们有了数据,假定它们是由GMM生成出来的,那么我们只要根据数据推出GMM的概率分布来就可以了,然后GMM的K
个Component实际上就对应了K
个cluster了。根据数据来推算概率密度通常被称作densityestimation,特别地,当我们在〔或假定〕了概率密度函数的形式,而要估计其中的参数的过程被称作“参数估计〞。
2.参数与似然函数:现在假设我们有N
个数据点,并假设它们服从某个分布〔记作p(x)
〕,现在要确定里面的一些参数的值,例如,在GMM中,我们就需要确定影响因子pi(k)、各类均值pMiu(k)
和各类协方差pSigma(k)
这些参数。我们的想法是,找到这样一组参数,它所确定的概率分布生成这些给定的数据点的概率最大,而这个概率实际上就等于
,我们把这个乘积称作似然函数(LikelihoodFunction)。通常单个点的概率都很小,许多很小的数字相乘起来在计算机里很容易造成浮点数下溢,因此我们通常会对其取对数,把乘积变成加和
,得到log-likelihoodfunction。接下来我们只要将这个函数最大化〔通常的做法是求导并令导数等于零,然后解方程〕,亦即找到这样一组参数值,它让似然函数取得最大值,我们就认为这是最适宜的参数,这样就完成了参数估计的过程。下面让我们来看一看GMM的log-likelihoodfunction:
由于在对数函数里面又有加和,我们没法直接用求导解方程的方法直接求得最大值。为了解决这个问题,我们采取之前从GMM中随机选点的方法:分成两步,实际上也就类似于K-means
的两步。
3.算法流程:1.
估计数据由每个Component生成的概率〔并不是每个Component被选中的概率〕:对于每个数据
来说,它由第
个Component生成的概率为
其中N〔xi|μk,Σk〕就是后验概率。
2.通过极大似然估计可以通过求到令参数=0得到参数pMiu,pSigma的值。具体请见这篇文章第三局部。
其中
,并且
也顺理成章地可以估计为
。
3.
重复迭代前面两步,直到似然函数的值收敛为止。
4.matlab实现GMM聚类代码与解释:
说明:fea为训练样本数据,gnd为样本标号。算法中的思想和上面写的一模一样,在最后的判断accuracy方面,由于聚类和分类不同,只是得到一些cluster,而并不知道这些cluster应该被打上什么标签,或者说。由于我们的目的是衡量聚类算法的performance,因此直接假定这一步能实现最优的对应关系,将每个cluster对应到一类上去。一种方法是枚举所有可能的情况并选出最优解,另外,对于这样的问题,我们还可以用
Hungarianalgorithm
来求解。具体的Hungarian代码我放在了资源里,调用方法已经写在下面函数中了。
注意:资源里我放的是Kmeans的代码,大家下载的时候只要用bestMap.m等几个文件就好~
1.gmm.m,最核心的函数,进行模型与参数确定。[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(通过令导数
=
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所占权重〔influence
factor〕
pSigma
=
zeros(D,
D,
K);
%k类GMM的协方差矩阵,每个是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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健康素养志愿服务政策保障与资源整合
- 声带白斑的术后护理要点
- 健康环境建设与行为文明提升
- 健康教育科室在居民健康素养提升中的作用
- 剖宫产产妇的出院指导
- 健康传播循证技术应用规范
- 偏远地区3D打印医疗技术的多学科协作模式
- 多学科合作优化管道护理模式
- ESD穿孔缝合术后患者再手术原因分析
- 2026年长沙环境保护职业技术学院单招综合素质笔试备考试题带答案解析
- 全球AI应用平台市场全景图与趋势洞察报告
- 2026.05.01施行的中华人民共和国渔业法(2025修订)课件
- 维持性血液透析患者管理
- 2025年大学大四(临床诊断学)症状鉴别诊断试题及答案
- 2026液态氧储罐泄漏事故应急处置方案
- 直肠解剖课件
- 2025年消控员初级证试题及答案
- 辽宁省丹东市凤城市2024-2025学年八年级上学期1月期末语文试题
- 楼宇智能弱电系统培训资料
- 人力资源调研报告
- 下水箱液位控制系统设计
评论
0/150
提交评论