k-Medoids 聚类系列算法:PAM, CLARA, CLARANS

news/2024/5/20 8:46:34 标签: 聚类, 机器学习, PAM, CLARA, CLARANS

前言

如果你对这篇文章可感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。

k k k-Means 作为一种经典聚类算法,相信大家都比较熟悉,其将簇中所有的点的均值作为簇中心,整个过程采用欧式空间中的距离度量。不同于 k k k-Means, k k k-Medoids 将距簇中所有点距离之和最小的点作为簇中心,如下所示:
medoid ⁡ ( C ) : = arg ⁡ min ⁡ x i ∈ C ∑ x j ∈ C d ( x i , x j ) , \operatorname{medoid}(C):=\underset{x_i \in C}{\arg \min } \sum_{x_j \in C} d\left(x_i, x_j\right), medoid(C):=xiCargminxjCd(xi,xj),

其中 d ( ⋅ , ⋅ ) d(\cdot, \cdot) d(,) 为采用的度量。整个过程希望最小化:
Loss : = ∑ i = 1 k ∑ x c ∈ C i d ( x c , m i ) , \text{Loss}:=\sum_{i=1}^k\sum_{x_c\in C_i} d(x_c, m_i), Loss:=i=1kxcCid(xc,mi),

其中 k k k 表示 k k k 个簇, C i C_i Ci 表示第 i i i 个簇, m i m_i mi C i C_i Ci 的簇中心。接下来介绍一些实现上述目标的算法。


PAM_Partitioning_Around_Medoids_17">PAM (Partitioning Around Medoids)

在最初版本的 PAM 中,整体流程分为两步:

  • 第一步为 BUILD,即贪心选取 k k k 个点作为 Medoids;
  • 第二步为 SWAP,需迭代多次,每一次选取一对点 ( m i , x o ) (m_i,x_o) (mi,xo),用 x o x_o xo 将中心点 m i m_i mi 替换掉。

具体来说,在得到预处理的距离矩阵后,第一步一共贪心地执行 k k k 次,每一次选择一个使 Loss \text{Loss} Loss 下降最多的点作为 Medoids,这一步总的复杂度为 O ( n 2 k ) O(n^2k) O(n2k)

第二步需迭代多次,每一次遍历所有的 ( m i , x o ) (m_i,x_o) (mi,xo) 组合,并计算采用该组合后, Loss \text{Loss} Loss 下降的幅度,选取下降幅度最大的组合作为交换,每一次迭代的复杂度为 O ( k ( n − k ) 2 ) O(k(n-k)^2) O(k(nk)2)

上述流程为比较暴力的方式,如果经过合理优化,SWAP 步可以做到每一次迭代复杂度降为 O ( n 2 ) O(n^2) O(n2) [FasterPAM]。


CLARA_30">CLARA

CLARA (Clustering LARge Applications) 是一种通过采样方式来加速 PAM 的方法,具体如下:

  • 从大小为 N N N 的数据集中采样 n n n 次,每次采样出 s s s 个点;
  • 对这 s s s 个点使用 PAM 算法,得到 k k k 个 medoids candidates;
  • 从所有的 medoids candidates(一共 s ∗ k s*k sk 个)中挑出 k k k 个作为最终的 medoids.

最后一步可以采用随机抽取,投票加权,以及对 s ∗ k s*k sk 个点再执行一遍 PAM 算法等方式,整体过程的伪代码如下所示:

在这里插入图片描述


CLARANS_42">CLARANS

上述 CLARA 有一个问题,即每次采样出一个子集后,该次采样最终选择的 medoids candidates 就被限制在了这个子集中。那有没有什么方法,使得 medoids 的挑选仍然在所有点中进行,而不是局限在一个固定的子集中。

基于上述想法,CLARANS (Clustering Large Applications based on RANdomized Search) 提出在 PAM 的 SWAP 步骤中加入随机化采样,使得整体复杂度下降,具体如下:

  • 随机挑选 k k k 个点作为初始 medoids;
  • 随机将 k k k 个点中某一个点换成其它 n − k n-k nk 个点中任意一个,判断 Loss \text{Loss} Loss 有无下降,若下降则重新执行该步,若持续 m a x n e i g h b o r maxneighbor maxneighbor 次置换 Loss \text{Loss} Loss 均未下降,则认为当前这组 medoids 为局部最优,进入下一步;
  • 将当前这组 medoids 记录下来,并重复执行上述两步 n u m l o c a l numlocal numlocal 次,并从得到的 n u m l o c a l numlocal numlocal 局部最优中选一组 Loss \text{Loss} Loss 最小的输出。

上述过程对应下述算法:

在这里插入图片描述

其中「an arbitrary node in G n , k G_{n,k} Gn,k」即「从 n n n 个点随机挑出 k k k 个点,并将 k k k 个点的集合视作一个 node」,「random neighbor of a node」即随机将 k k k 个点的集合中某一个点换成其它 n − k n-k nk 个点中的任意一个,「calculate the cost differential of the two nodes」即计算任意置换一个点后 Loss \text{Loss} Loss 的变化情况(该步复杂度为 O ( n − k ) O(n-k) O(nk))。


参考资料

  • k-medoids - Wikipedia
  • [arXiv21 - Erich Schubert] Fast and Eager k-Medoids Clustering: O(k) Runtime Improvement of the PAM, CLARA, and CLARANS Algorithms
  • [Book - Leonard Kaufman] Finding Groups in Data An Introduction to Cluster Analysis
  • Advanced Partitional clustering: medoids, PAM and CLARA and lite versions
  • [TKDE02 - Raymond T. Ng] CLARANS: A Method for Clustering Objects for Spatial Data Mining

http://www.niftyadmin.cn/n/120722.html

相关文章

Linux内核4.14版本——drm框架分析(3)——encoder分析

目录 1. struct drm_encoder结构体 1.1 struct list_head head 1.2 struct drm_mode_object base 1.3 encoder_type 1.4 struct drm_encoder_funcs 1.5 const struct drm_encoder_helper_funcs *helper_private 2. encoider的API 2.1 drm_encoder_init 2.2 drm_mode_g…

【SpringMVC】springMVC介绍

参考资料 视频资料 03_尚硅谷_SpringMVC_SpringMVC简介_哔哩哔哩_bilibili 笔记资料 第一节 SpringMVC概述 (wolai.com)链接:https://pan.baidu.com/s/1A7BX2TNfbGTpYene4x3Mew 提取码:a8d5 一、SpringMVC简介 1、什么是MVC MVC是一种软件架构的思…

关于Java连接Hive,Spark等服务的Kerberos工具类封装

关于Java连接Hive,Spark等服务的Kerberos工具类封装 idea连接服务器的hive等相关服务的kerberos认证注意事项 idea 本地配置,连接服务器;进行kerberos认证,连接hive、HDFS、Spark等服务注意事项: 本地idea连接Hadoo…

分布式事务概述

什么是分布式事务?和本地事务的区别 分布式事务是指会涉及到操作多个数据库的事务。其实就是将对同一库事务的概念扩大到了对多个库的事务。目的是为了保证分布式系统中的数据一致性。分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作&a…

数据爬取(urllib+BeautifulSoup)

文章目录知识点总结爬虫步骤爬虫三要素爬虫注意事项python爬取技术学习网页抓取库Urllib网页解析库Beautifulsoup案例知识点总结 爬虫是一种按照一定规则,自动抓取互联网上网页中的相应信息的程序或脚本。 爬虫步骤 1.需求分析 2.找到要爬取信息的网站 3.下载reque…

Linux用户空间与内核空间通信(Netlink通信机制)

一,什么是Netlink通信机制 Netlink是linux提供的用于内核和用户态进程之间的通信方式。但是注意虽然Netlink主要用于用户空间和内核空间的通信,但是也能用于用户空间的两个进程通信。只是进程间通信有其他很多方式,一般不用Netlink。除非需要…

fastadmin后台登录页修改

直接替换就行 <!DOCTYPE html> <html lang"{$config.language}"> <head>{include file"common/meta" /}<style type"text/css">body {color: #999;background-color: #f1f4fd;background-size: cover;}a {color: #444;…

【图神经网络】李宏毅

GNN 引入 假如要预测一个人是否是凶手。可以通过每个角色的特征训练出一个分类器。 有没有我们忽略的信息&#xff0c;或者我们可以利用但没有完全利用的信息。就是角色的关系。 这些角色关系可以让我们在做分类的时候获得一些额外的信息&#xff0c;可以帮助我们做更好的mode…