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

news2024/11/19 1:32:23

前言

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

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)

在最初版本的 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

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

上述 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.coloradmin.cn/o/388721.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript- Map、Set、WeakMap、WeakSet、简单模拟Map

文章目录Map常见方法set常见方法WeakMapWeakSet如何实现一个Map?(简单模仿)Map Map是一种键值对的结构 常见方法 Map.prototype.set()Map.prototype.has()Map.prototype.get()Map.prototype.delete() set 常见方法 Set类似于数组,但是里面成员的值都是唯一的…

【Java】Spring MVC程序开发

文章目录Spring MVC程序开发1. 什么是Spring MVC?1.1 MVC定义1.2 MVC 和 Spring MVC 的关系2. 为什么学习Spring MVC?3. 怎么学习Spring MVC?3.1 Spring MVC的创建和连接3.1.1 创建Spring MVC项目3.1.2 RequestMapping 注解介绍3.1.3 Request…

OpenCV实战(12)——图像滤波详解

OpenCV实战(12)——图像滤波详解0. 前言1. 频域分析2. 低通滤波器3. 图像下采样3.1 使用低通滤波器下采样图像3.2 内插像素值4. 中值滤波器5. 完整代码小结系列链接0. 前言 滤波是信号和图像处理中的基本任务之一,其旨在有选择地提取图像的某…

【Linux】CentOS7操作系统安装nginx实战(多种方法,超详细)

文章目录前言一. 实验环境二. 使用yum安装nginx2.1 添加yum源2.1.1 使用官网提供的源地址(方法一)2.1.2 使用epel的方式进行安装(方法二)2.2 开始安装nginx2.3 启动并进行测试2.4 其他的一些用法:三. 编译方式安装ngin…

Angular快速入门

Angular1.框架背景2.Angular CLI2.1 安装2.2 主要特性2.3 创建module,component,service,class3.架构3.1 模块3.2 组件3.2.1 创建组件3.2.2 组件生命周期3.2.3 组件交互3.3 模板3.3.1 插值语法3.3.2 属性绑定3.3.3 条件判断3.3.4 循环语句3.3…

22. linux系统基础

递归遍历指定文件下所有的文件,而且你还可以统计一下普通文件的总个数,既然能统计普通文件,能统计其他文件吗?比如目录文件, 这个是main函数里面我们调用了 ,这个checkdird这个函数,需要传递一个…

垃圾收集器以及三色标记

分代收集理论当前虚拟机的垃圾收集采用分代收集算法,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法新生代:每次收集都会有大量对象(近99%)死去,所以可…

教资教育知识与能力中学教学

目录 3.1 教学概述 3.2 教学过程 3.3 教学原则*【简答/辨析重点】 3.4 教学方法 3.5 教学组织形式 3.6 教学工作基本环节 3.7 教学评价 3.1 教学概述 1、教学的意义【14/18辨析】 教学是传授系统知识、促进学生发展的最有效形式; 教学是学校进行全面发展教…

MSTP多域实验配置

目录 实验配置 配置MSTP MSTP参数修改 查看每个设备的生成树 配置MSTP安全 实验配置 放行相关Vlan MST1域内的交换机互联接口放行Vlan 30、40 MST2域内的交换机互联接口放行Vlan 10、20、40 MST1域和MST2域之间交换机互联端口放行Vlan 40 配置MSTP 全网交换机都开启MSTP&a…

【SpringMVC】springMVC介绍

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

React(五):受控组件、高阶组件、Portals、Fragment、CSS的编写方式

React(五)一、受控组件1.什么是受控组件(v-model)2.收集表单数据:input和单选框3.收集表单数据:下拉框二、非受控组件三、高阶组件1.什么是高阶组件2.高阶组件的应用13.高阶组件的应用2-注入Context4.高阶组件的应用3-登录鉴权5.高…

十一、GoF之代理模式

1 对代理模式的理解 【在程序中,对象A和对象B无法直接交互时。】 【在程序中,功能需要增强时。】 【在程序中,目标需要被保护时】 业务场景:系统中有A、B、C三个模块,使用这些模块的前提是需要用户登录,也…

HTML的表单标签

🌟所属专栏:HTML只因变凤凰之路🐔作者简介:rchjr——五带信管菜只因一枚😮前言:该系列将持续更新HTML的相关学习笔记,欢迎和我一样的小白订阅,一起学习共同进步~👉文章简…

将对象或数组存在 dom元素的属性上,最后取不到完整数据,只取到 [{

目录 一、问题 二、问题及解决方法 三、总结 一、问题 1.我需要在dom元素里面添加了一个属性test存一个对象数组temp,以便我下一次找到这个dom元素时可以直接拿到属性里面的数据来渲染页面。 2.dom 属性上存 对象和数组,必须先JSON.stringify(arr),转…

开发手册——一、编程规约_8.注释规约

这篇文章主要梳理了在java的实际开发过程中的编程规范问题。本篇文章主要借鉴于《阿里巴巴java开发手册终极版》 下面我们一起来看一下吧。 1. 【强制】类、类属性、类方法的注释必须使用 Javadoc 规范,使用 /**内容*/ 格式,不得使用 // xxx 方式。 说…

C++ 线程库

文章目录thread 创建mutexmutexrecursive_mutextimed_mutexlock_guard原子操作atomic条件变量condition_variable其他线程安全问题shared_ptr单例模式C 线程库是 C11 标准中引入的一个特性,它使得 C 在语言级别上支持多线程编程,不需要依赖第三方库或操作…

unity开发知识点小结01

unity对象生命周期函数 Awake():最早调用,所以可以实现单例模式 OnEnable():组件激活后调用,在Awake后调用一次 Stat():在Update()之前,OnEnable…

【C++知识点】位运算

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:C/C知识点 📣专栏定位:整理一下 C 相关的知识点,供大家学习参考~ ❤️如果有收获的话,欢迎点赞👍…

海思嵌入式开发-005-OpenHarmony源码编译问题

海思嵌入式开发-005-OpenHarmony源码编译问题一、问题描述二、解决方案2.1解决原理2.2获取OpenHarmony 3.1.1 Release源码2.3最后解决问题,编译成功。一、问题描述 按照链接拉取master源码,出现如下问题,打开build.log文件 提示相应位置的文…

Servlet详细教程

文章目录Servletservlet 简介Servlet 入门案例页面编写页面提交 get 请求Servlet 和 Tomcat 关系servlet-apiget 和 post 请求Servlet 生命周期案例HttpServletRequest 接口简介文件上传FileServlet 类Servlet servlet 简介 servlet 全称为 server applet 是服务器的小程序&am…