聚类算法分析

聚类分析:

k均值聚类算法:聚类属于无监督学习,监督学习是指样例中已经给出了样例的分类。聚类的目的是找到每个样本x潜在的类别y,并将相似的样本x归到同样的簇中去。簇内的对象越相似,簇间的对象越不同,聚类的效果越好。

假设:训练样本是{x1,x2,....,xm},每个xi属于R。

 聚类算法分析_第1张图片


工作流程如下:

其中k是用户指定的聚类数,C(i)代表样例i和k个类别中距离最近的那个类别,质心u(j)代表我们对于同一个类别的样本中心点的猜测。

《大数据》一书中提到K个初始点的选取有两种方法:

1.选择彼此距离尽可能远的k个点: 首先随机选择一个点作为第一个初始类簇中心点,然后选择距离该点最远的那个点作为第二个初始类簇中心点,然后再选择距离前两个点的最近距离最大的点作为第三个初始类簇的中心点,以此类推,直至选出K个初始类簇中心点。

2.选用层次聚类或者Canopy算法进行初始聚类,然后利用这些类簇的中心点或者距离中心点最近的那个点作为KMeans算法初始类簇中心点:

常用的层次聚类算法有BIRCH和ROCK,在此不作介绍,下面简单介绍一下Canopy算法,主要摘自Mahout的Wiki:

  首先定义两个距离T1和T2,T1>T2.从初始的点的集合S中随机移除一个点P,然后对于还在S中的每个点I,计算该点I与点P的距离,如果距离小于T1,则将点I加入到点P所代表的Canopy中,如果距离小于T2,则将点I从集合S中移除,并将点I加入到点P所代表的Canopy中。迭代完一次之后,重新从集合S中随机选择一个点作为新的点P,然后重复执行以上步骤。

  Canopy算法执行完毕后会得到很多Canopy,可以认为每个Canopy都是一个Cluster,与KMeans等硬划分算法不同,Canopy的聚类结果中每个点有可能属于多个Canopy。我们可以选择距离每个Canopy的中心点最近的那个数据点,或者直接选择每个Canopy的中心点作为KMeans的初始K个类簇中心点。


以星团模型为例,首先随机选取k个点作为k个星团的质心。第一步对于每个星星计算其到k个质心中每个质心的距离,选择距离最近的作为C(i),经过第一步每个星星即每个样例都有了所属的类别。第二步重新计算它的质心。重复第一步第二步直到质心不变或者变化很小。


其中重新计算质心时采用计算所有点的均值并将均值作为新的质心。

 聚类算法分析_第2张图片

由于算法的结束条件是直到收敛,下面证明k均值聚类算法的收敛性:

定义畸变函数:

 

J函数是每个样本点到其质心的距离的平方和。均值算法的目的是将调整到最小。假设J没有到达最小值,可以通过固定质心改变样例类别来使函数J减少。也可以通过固定类别改变质心来使J减小。当J递减到最小时,u,c同时收敛。

在最开始时,我们并不知道每个样例对应的隐含变量也就是最佳类别c。我们随意指定一个类别给他,然后为了使J最小,我们求出给定c情况下J最小时的u,然后我们发现有更好的类别c可以指给类别x,此时c得以调整。重复以上过程,直到对于每一个样例x没有更好的类别c来指定。

畸变函数J是非凸函数,我们并不能得到全局最小值,即k均值算法对质心初始位置的选取比较敏感,一般情况局部最优可以满足需求。可以通过选取不同价格的初始值多试几遍k均值算法,选取其中最小的J对应的u和c输出。



你可能感兴趣的:(机器学习算法)