本文摘自《数据挖掘 概念与技术》,范明、孟小峰译,机械工业出版社
相关链接:
EM算法及总结
EM算法在高斯混合分布中的运用
极大似然估计
EM算法在K-Means中的运用
前言
有关于K-Means的算法介绍详情请参考另一片文章K-Means算法介绍。有关于EM算法的只是请参考我的另一篇博客EM算法及总结。
K-Means的简单介绍
假设数据集
D
包含了
基于形心的划分技术使用簇
Ci
的形心代表该簇。从概念上讲,簇的形心是它的中心点。形心可以用多种方法定义,例如用分配给该簇的对象(或点)的均值或中心店定义。对象
p∈Ci
与该簇的代表
ci
之差用
dist(p,ci)
度量,其中
dist(x,y)
是两个点
x
和
E=∑ki=1∑dist(p,ci)2p∈Ci 公式(1)
其中,E是数据集中所有对象的误差的平方和;p时空间中的点,表示给定的数据对象;
ci
是簇
Ci
的形心(
p
和
现在问题来了,如何优化簇内变差?在最坏的情况下,我们必须枚举大量可能的划分(划分的个数是簇数的指数),并检查簇内变差。在一般的俄欧式空间中,即便对于两个簇(即
k=2
),该问题也是NP-困难的。此外,即便在二维欧式空间中,对于一般的簇个数
k
,该问题也是NP-困难的。如果簇个数
算法
EM的算法核心就是E步和M步(期望步和最大化步),能够解决好这两部,问题就基本解决了。
期望步(E-步)
给定当前的簇中心,每个对象都被指派到簇中心离该对象最近的簇。这里,期望每个对象都属于最近的簇。
最大化步(M-步)
给定簇指派,对于每个簇,算法调整其中心,使得指派到该簇的对象到该新中心到的距离之和最小化。也就是说,将指派到一个簇的对象的相似度最大化。
例子
说了这么多,感觉还是很抽象,那么我们来一发示例来看看如何使用EM算法来解决K-Means算法最优化问题。
题目:考虑上图中的六个点,其中显示了点的坐标。让我们使用EM算法计算两个模糊聚类。
解答
首先,我们随机选择两点,如
E-步:对于每一个点,我们计算它属于每个簇的隶属度。对于任意点
o
,我们分别隶属权重
1dist(o, c2)21dist(o, c1)2+1dist(o, c2)2=dist(o,c1)2dist(o, c1)2+dist(o, c2)2公式(2)
其中,公式(1)对应任一点
o
对于簇
对于点
a
,我们有
M-步: 我们根据划分矩阵重新计算簇的形心,极小化误差平方和(SSE)(想了解SSE的先往下看到分割线后的内容)。新的形心应该调整为:
cj=∑w2o,cjo每个点o ∑w2o,cj每个点o 公式(3)
其中,
j=1,2
。在这个例子中,
c1=(12×3+02×4+0.482×9+0.422×14+0.412×18+0.472×2112+02+0.482+0.422+0.412+0.472,12×3+02×10+0.482×6+0.422×8+0.412×11+0.472×712+02+0.482+0.422+0..412+0.472)=(8.47,5.12)
c2=(02×3+12×4+0.522×9+0.582×14+0.592×18+0.532×2102+12+0.522+0.582+0.592+0.532,02×3+12×10+0.522×6+0.582×8+0.592×11+0.532×702+12+0.522+0.582+0.592+0.532)=(10.42,8.99)
我们重复迭代,其中每次迭代包括一个E步和一个M步。下表显示前三次迭代结果。当簇中心收敛或者变化很小的时候(什么时候算小,这取决于你设置的阈值),算法停止。
误差平方和:对象与其被指派到的簇的中心之间的距离或相似度可以用来度量该对象属于簇的程度。这一思想扩充到模糊簇类。对于任意对象
oi
和簇
Cj
,如果
wij>0
,则
dist(oi,cj)
度量
oi
被
Cj
代表,因而属于簇
Cj
的程度。由于一个对象可能参与多个簇,所以用隶属度加权的到簇中心的距离之和捕获对象拟合聚类的程度。
对于对象的误差平法和:
SSE(oi)=∑kj=1(wpjk)2dist(oi,cj)公式(4)
其中,参数
p(p≥1)
控制隶属度的影响。
p
的值越大,隶属度的影响就愈大。簇
SSE(Cj)=∑ni=1(wpij)2dist(oi,cj)公式(5)
最后,聚类
C
的SSE定义为:
聚类的SSE可以用来度量模糊聚类对数据集的拟合程度。