转载自coder_Gray的CSDN博客,感谢!
上一篇文章我们了解了k-means算法,在文章末尾指出k-means算法对于异常值十分敏感,因为具有极大值的对象可能会产生严重扭曲的数据分布。因此我们可以使用k-medoids算法,它是集群中位于最中心的对象,而不是将集群中的平均值作为参考点。因此,分区的方法仍然可以基于最小化每个对象与其参考点之间的不相似程度之和的原理来进行。这构成了k-medoids方法的基础。
k-means对比k-medoids
k-means与k-medoids之间的差异就是可以理解为对于数据样本的平均值和中位数之间的差异:前者的取值范围可以是连续空间中的任意值,而后者的取值却只能是数据样本范围中的样本。这个原因就是k-means对于数据样本的要求太高了,要求所有数据样本处在一个欧式空间中,对于有很多噪声的数据就会造成极大的误差。同时对于非数值型数据样本,不能够计算平均值等实数型变量。
k-medoids算法介绍
在k-medoids中,相对于k-means的目标函数,我们将目标函数(J)中的欧式距离改写成了一个任意的dissimilarity measure函数 :
其中函数表示样本点和当前参考点之间的差异值,这个值对于非实数型的数据样本是人为提前设定的,这样,又将问题转换为了最小化目标函数的问题。
算法步骤
算法步骤与k-means类似,只是将平均值为参考点改变成用样本做参考点,要全部遍历一遍。
具体如下:
在数据样本D中随机选择k个数据样本作为质点(参考点)Oj(j=1.2.3…k)。
重复地将剩下的样本点分配到k个簇类当中。
随机选择一个非质点样本Orandom;计算交换对象Orandom和O1参考点,重复2中的操作,产生新的一组簇类,计算目标函数S,若S<0则将Orandom和O1交换,保留新的簇类,否则,保留原中心点和聚类。重复此步骤直到k个中心点不再变化。
k-medoids变种算法
PAM算法(Partitioning Around Medoid,围绕中心点的划分)是聚类分析算法中划分法的一个聚类方法,是最早提出的k-中心点算法之一。基本原理为:选用簇中位置最中心的对象,试图对n个对象给出k个划分;代表对象也被称为是中心点,其他对象则被称为非代表对象;最初随机选择k个对象作为中心点,该算法反复地用非代表对象来代替代表对象,试图找出更好的中心点,以改进聚类的质量;在每次迭代中,所有可能的对象对被分析,每个对中的一个对象是中心点,而另一个是非代表对象。对可能的各种组合,估算聚类结果的质量;一个对象Oi可以被使最大平方-误差值减少的对象代替;在一次迭代中产生的最佳对象集合成为下次迭代的中心点。
CLARA(Clustering LARge Applications,大型应用中的聚类方法)(Kaufmann and Rousseeuw in 1990):不考虑整个数据集, 而是选择数据的一小部分作为样本。它从数据集中抽取多个样本集, 对每个样本集使用PAM, 并以最好的聚类作为输出
CLARA 算法的步骤:
(1) for i = 1 to v (选样的次数) ,重复执行下列步骤( (2) ~ (4) ) :
(2) 随机地从整个数据库中抽取一个N(例如:(40 + 2 k))个对象的样本,调用PAM方法从样本中找出样本的k个最优的中心点。
(3)将这k个中心点应用到整个数据库上, 对于每一个非代表对象Oj ,判断它与从样本中选出的哪个代表对象距离最近.
(4) 计算上一步中得到的聚类的总代价. 若该值小于当前的最小值,用该值替换当前的最小值,保留在这次选样中得到的k个代表对象作为到目前为止得到的最好的代表对象的集合.
(5) 返回到步骤(1) ,开始下一个循环.
算法结束后,输出最好的聚类结果。