一.PAM聚类算法:
选用簇中位置最中心的对象,试图对n个对象给出k个划分;代表对象也被称为是中心点,其他对象则被称为非代表对象;最初随机选择k个对象作为中心点,该算法反复地用非代表对象来代替代表对象,试图找出更好的中心点,以改进聚类的质量;在每次迭代中,所有可能的对象对被分析,每个对中的一个对象是中心点,而另一个是非代表对象。对可能的各种组合,估算聚类结果的质量;一个对象Oi可以被使最大平方-误差值减少的对象代替;在一次迭代中产生的最佳对象集合成为下次迭代的中心点。
对比kmeans:k-means是每次选簇的均值作为新的中心,迭代直到簇中对象分布不再变化。其缺点是对于离群点是敏感的,因为一个具有很大极端值的对象会扭曲数据分布。那么我们可以考虑新的簇中心不选择均值而是选择簇内的某个对象,只要使总的代价降低就可以。kmedoids算法比kmenas对于噪声和孤立点更鲁棒,因为它最小化相异点对的和(minimizes a sum of pairwise dissimilarities )而不是欧式距离的平方和(sum of squared Euclidean distances.)。一个中心点(medoid)可以这么定义:簇中某点的平均差异性在这一簇中所有点中最小。
二.算法描述:
wiki上有对pam算法的解释,这里着重对维基百科的例子进行介绍:k-medoids
k-medoid聚类算法的最常见实现为Partitioning Around Medoids (PAM)算法,PAM利用了贪婪搜索,不一定可以找到最优解,但是比穷尽搜索更快。
输入:簇的数目k和包含n个对象的数据
输出:k个簇,使得所有对象与其距离最近中心点的相异度总和最小
1. 初始化:随机挑选n个点中的k个点作为中心点。
2. 将其余的点根据距离划分至这k个类别中。
3. 当损失值减少时:
1)对于每个中心点m,对于每个非中心点o:
i)交换m和o,重新计算损失(损失值的大小为:所有点到中心点的距离和)
ii)如果总的损失增加则不进行交换
另外的一个解释,和上面一样:
1) 任意选择k个对象作为初始的簇中心点
2) Repeat
3) 指派每个剩余对象给离他最近的中心点所表示的簇
4) Repeat
5) 选择一个未被选择的中心点Oi
6) Repeat
7) 选择一个未被选择过的非中心点对象Oh
8) 计算用Oh代替Oi的总代价并记录在S中
9) Until 所有非中心点都被选择过
10) Until 所有的中心点都被选择过
11) If 在S中的所有非中心点代替所有中心点后的计算出总代价有小于0的存在,then找出S中的用非中心点替代中心点后代价最小的一个,并用该非中心点替代对应的中心点,形成一个新的k个中心点的集合;
12) Until 没有再发生簇的重新分配,即所有的S都大于0.