K-means与EM算法
聚类属于无监督学习,以往的回归、朴素贝叶斯、SVM等都是有类别标签y的,也就是说样例中已经给出了样例的分类。而聚类的样本中却没有给定y,只有特征x,比如假设宇宙中的星星可以表示成三维空间中的点集(x,y,z)。聚类的目的是找到每个样本x潜在的类别y,并将同类别y的样本x放在一起。比如上面的星星,聚类后结果是一个个星团,星团里面的点相互距离比较近,星团间的星星距离就比较远了。
在聚类问题中,给我们的训练样本是{
x(1)
,
x(2)
…
x(n)
},每个
x(i)
属于
Rn
,没有了标签y。
选择k个点作为质心(指定)
repeat
将每个指派到最近质心K个簇
重新计算每个簇的质心
Until 簇不发生变化或者达到最大次数
K-means问题是如何保证收敛。描述下收敛性,定义畸变函数(distortion function)如下
- J函数表示每个样本到质心距离平方和。K-means是将J调整到最小。假设当前J没有达到最小,固定每个类的质心 μj ,调整每个样例所属类别 ci 让J减少。同样固定每个样例所属类别 ci ,调整每个类的质心 μj 也可以是J减少。这两个过程就是内循环使J单调递减的过程。
- K-means和EM之间的关系
- EM思想:用极大似然估计来度量x,y的联合分布P(x,y):1)找到y使得P(x,y)最大(此时固定其他参数),那么y就是样例x的最佳类别了,聚类了 2)P(x,y)依赖于除了y以外其他参数,给定y后调整其他参数使得P(x,y)最大。E步就是估计隐含类别y的期望值,M步调整其他参数使得在给定类别y的情况下,极大似然估计P(x,y)能够达到最值。
- EM中y对应K-means的隐含类别 ci ,P(x,y)对应畸变函J,求P(x,y)最大就是就J最小。E步是确定隐含类别变量c,M步更新其他参数 μ 最小化J。总体思想还是一个迭代优化过程,有目标函数,有参数变量,其中参数变量包含隐含变量和其他变量,确定其他参数估计隐含变量,再确定隐含变量估计其他参数(调整每个样例所属的类别)
如何选择K-means的初始K值
选用层次聚类或Canopy算法进行初始聚类,然后从k个类别中分别随机选取k个点,来作为kmeans的初始聚类中心点。
1、层次聚类
2、Canopy算法进行初始聚类
那么针对一个具体的canopy应该如何创建呢?下面介绍创建一个普通的canopy算法的步骤。
那么针对一个具体的canopy应该如何创建呢?下面介绍创建一个普通的canopy算法的步骤
阶段一:
- 原始数据集合List按照一定的规则进行排序(这个规则是任意的,但是一旦确定就不再更改),初始距离阈值为T1、T2,且T1 > T2(T1、T2的设定可以根据用户的需要,或者使用交叉验证获得)。
- 在List中随机挑选一个数据向量A,使用一个粗糙距离计算方式计算A与List中其他样本数据向量之间的距离d。
- 根据第2步中的距离d,把d小于T1的样本数据向量划到一个canopy中,同时把d小于T2的样本数据向量从候选中心向量名单(这里可以理解为就是List)中移除。
- 重复第2、3步,直到候选中心向量名单为空,即List为空,算法结束。
阶段二:
- 在阶段一的基础上应用传统聚类算法,k-means均值聚类法的距离计算方式是精准的。计算同一个canopy中的数据向量之间距离,减少了代价很大的精确距离计算。
Canopy算法优势在于可以通过第一阶段的粗糙距离计算方法把数据划入不同的可重叠的子集,只计算在同一个重叠子集中的样本数据向量减少需要精确计算的样本