划分方法
聚类分析最简单、最基本的版本是划分,它把对象组织成多个互斥的簇。这一方法,要求每个对象必须/恰好属于每一个簇。(事实上,我们应该知道,这个要求是很不合理的,因为它忽略了离群点,假若把噪声数据强行划分在簇里,那势必会降低聚类的准确率,所以为了改进这一点,在模糊划分中适当放宽了这一要求。
大部分的划分算法都是基于距离的。(这个应该也很好理解吧,我们在前面应该提到过不止一次,这里说的距离实际上是用来度量相似性的)。他们的操作步骤通常是这样的:
1、首先给定要构建的分区数K,然后直接创建一个初始划分;
2、然后,使用一种称之为迭代的重定位技术来不断的调整,改进划分。(它的改进准则是:同一个簇中的对象要尽可能接近,不同簇中的对象要尽可能的远离)
从上面我们可以看到,这种传统的操作方法,为了达到全局最优,算法很有可能要穷举所有可能的划分,这显示不是不可接受的。因此实际上,目前的划分算法一般都采用启发式的方法,即渐进的提高聚类质量,以逼近局部最优解。
下面,我们就来讲解目前流行的划分算法:K-均值算法和K-中心点算法。这类算法非常适合发现中小规模的数据库中的球状簇(实际上是近似于球)
K-均值算法:一种基于形心的技术
假设数据集D中包含n个欧式空间中的对象,划分方法就是把D中的对象分配到k个簇中,其中各个簇之间互斥。然后通过目标函数来评估划分簇的质量,然后不断调整。
其实我们可以看到,这里叙述的划分方法和上面的传统方法基本一样。但是还没有完!!!
我们知道,划分方法一般聚类的都是球状簇。那么既然是球,就自然有球心。因此,这里说的基于形心的/形心实质上就可以理解为球心。
我们一般用簇Ci的形心来代表该簇。从概念上来讲,簇的形心就是它的中心点。而这个中心点可以用多种方法定义(为什么呢?因为,这个球状只是我们看起来是球的形状而已,他并不是几何意义上的球,所以,要找出这个“球”的中心,自然不像几何那么严谨),例如可以取该簇中所有对象的均值或中心点
上面我们提到了目标函数,它的值被称为簇内变差。它的作用就是用来评估簇划分的质量的,即一个簇的划分质量可以用簇内变差度量。我们的目的就是要让簇内高相似性和簇间低相似性。
这里p是空间中的点,Ci表示簇的形心。实际上,簇内变差就是求簇内每个对象到簇中心点(K-均值算法的话均值就是中心点)的距离平方,然后求和。
总的来说,我们要提高聚类质量,那么就要不断的去优化簇内变差。但是传统划分算法开销巨大,所以这里我们引出了k-均值算法。
这个算法就是把簇的形心定义为簇内点的均值。它的处理流程如下
1、在数据集中,随机地选择k个对象,每个对象代表一个簇的初始均值(中心);
2、对剩下的每个对象,分别计算其与各个簇中心的欧式距离(事实上就是计算相似性),将它分配到最相似的簇;
3、更新簇中心。对于每个簇来说,就是根据簇中的当前对象,来重新计算每个簇的均值,然后把该均值作为新的簇的中心。
4、然后重复第2,3步直至分配稳定。
K-均值算法的特点是:不能保证该算法收敛域全局最优解,并且它常常终止于一个局部最优解。结果可能依赖于初始簇中心的随机选择,所以为了尽可能的得到好的结果,我们通常会选择不同的初始簇中心,来多疑运行K-均值算法。
k-均值算法的优缺点
优点:
1、对于处理大数据集,该算法是相对可伸缩的和有效的;
缺点:
1、仅当簇的均值有定义时才能使用K-均值定义。例如,处理标称数据就不能使用K-均值算法。因为它无法计算簇内均值呀(映射???我想应该不可以吧=。=),所以针对这种情况,可以使用k-众数算法来处理标称数据
2、对噪声和离群点敏感。上面已经提到了,因为它的划分是互斥的,所以必然会出现这种情况。所以针对这种情况,出现了模糊划分技术。上面已经提到过。
3、必须用户自己指定要生成的簇数K。然而要求用户自己指定参数一般都是不靠谱的,所以这里给出了一种解决方法,那就是提供一个k的取值范围然后去试,然后取一个相对较好的。实际上,我们也能想象到这种方法其实也不好。
如何提高K-均值算法的性能
因为这个算法实在太简单了,所以它的性能能够提升的方面也就是伸缩性了。
在面对大数据集时,通过使用这三种方法来提高K-均值的伸缩性
1、使用样本;
2、过滤方法(使用空间层次索引以降低计算均值时的开销);
3、微聚类方案。
我们接下来稍稍引申一下
K-中心点:一种基于代表对象的技术
K-中心点算法是针对K-均值算法对离群点和噪声敏感的缺点提出的一种改进算法。
类比于K-均值算法,K-中心点聚类算法的变动主要有两点
1、中心点不是均值,而是用一个实际的对象(称作“代表对象”)来表示中心点;
2、目标函数不是距离的平方和了而是绝对距离和了。
其中,Oi是代表对象。
关于这个公式需要好好理解下, 它的值表示的是数据集中所有对象P与Ci的代表对象Oi的绝对误差之和。
同样的,K-中心点方法通过最小化该绝对误差,来实现对划分的优化。
下面我们是否要更新代表对象,就靠这个目标函数的值来决定了。
PAM算法是K-中心点聚类的一种流行的实现。它的主要流程如下
1、随机选择K个对象,每个对象代表一个簇的中心点;
2、对剩下的每个对象,分别计算其与各个簇中心(代表对象)的欧式距离,将它分配到最相似的簇;
3、更新代表对象了。这一步稍微有点复杂,我拆开来说。
3.1:为了决定一个非代表对象是否是当前的一个代表对象更好的替代,我们需要来计算一下。
3.2:首先计算所有点(除开该候选对象)到当前代表对象集合的绝对误差之和(实际上就是计算公式10.2)
3.3:然后计算所有点(除开待替换对象)到当前代表对象集合(该集合目前是少了待替换对象,多了该候选对象)的绝对误差之和(公式10.2)
3.4:接着,比较这两次计算的值,如果3.3的值比3.2的值小,那么说明如果我们使用该候选点替换该中心点之后,聚类的效果会更好。所以我们进行中心点的替换(代表对象)。
4、重复第2,3步直至聚类稳定。
从算法我们可以看出,使用了新的目标函数之后,K-中心点算法(具体来说是PAM算法)相对与K-均值算法来说,它对于离群点和噪声数据不那么敏感了。但同时,我们也能看到,该算法的计算量是相当巨大的。
所以,一般来说,PAM算法一般都应用与小型的数据集上。