最后更新于
最后更新于
K-Means算法高效, 使用广泛, 但对样本中的异常值十分敏感, 异常点的存在会使聚类的结果发生严重的偏离.
K-Medoids算法则消除了这种不足之处. 利用代表对象(即用样本中的一个点, 代表多个点)这种形式. 在消除噪声和异常值显著的背后, 是很高的算法复杂度, 计算效率很低, 只能再中小数据集中使用.
在K-means算法的迭代中, 每次计算新的中心点时, 使用该簇的所有点计算平均值, 以这个平均值作为新的中心. K-Medoids算法不选用平均值, 而是采用簇中位置最中心的对象, 即中心点(medoids)作为参照点.
K-Medoids的重点, 在于中心点的选取. 选取簇中心点的原则为: 当前簇中所有其他点到该中心点的距离之和最小, 需要遍历簇中所有点. 其他的步骤与K-Means算法中的相同.
K-Medoids的使用绝对差值和(Sum of Absolute Differences, SAD)来的度量来衡量聚类结果的优劣, SAD的公式如下:
PAM, Partitioning Around Medoids. PAM算法是K-Medoids算法的衍生算法. 基本流程如下:
首先随机选择k个对象作为中心, 把每个对象分配给离它最近的中心
然后随机地选择一个非中心对象替换中心对象, 每次交换一个中心点和非中心点, 然后执行将非中心点指派到最近的中心点, 计算得到的SAD值越小, 则聚类质量越好
如果总的损失减少, 则交换中心对象和非中心对象; 如果总的损失增加, 则不进行交换
聚类的过程就是不断迭代, 进行中心对象和非中心对象的反复替换过程, 直到目标函数不再有改进为止
在交换中心点和非中心点时, 应当遍历当前所有的中心点和非中心点, 选取最优的交换组合, 但这样的效率很低, 使用随机的方法代替遍历.
这种算法通常适用于聚类比较小的点的集合, 因为如果能够迭代所有情况, 那么最终得到的划分一定是最优的划分, 得到最好的聚类效果. 但是如果待聚类的点的集合比较大, 则需要通过限制迭代次数来终止迭代计算, 从而得到一个能够满足实际精度需要的聚类结果.
CLARA, Clustering LARge Applications, 也是K-Medoids的一种衍生算法. 由于PAM在面对大样本时很慢, CLARA从数据集中抽取多个样本集, 对每个样本集使用PAM, 并以最好的聚类作为输出. 具体步骤如下:
设定从数据集中抽取子样本集的次数, 进行循环
将整个数据集中的所有样本点根据最近距离匹配到这K个样本点上
计算SAD值, 如果当前的K个中心点对应的聚类结果计算得到的SAD值小于之前的模型, 则用现在的这K个中心点对应的模型作为最优模型
得到最优的聚类模型
从整体数据集中抽取个对象的样本子集, 调用PAM算法, 得到K个中心点