文章整理了五种常见聚类算法的基本原理,通过简易图解的形式对算法原理进行形象化的描述,同时给出了算法的实现流程和数学表达。全文约4192字。

相关名词的英文翻译

监督学习Supervised Learning无监督学习Unsupervised Learning半监督学习Semi-Supervised Learning, SSL强化学习Reinforcement Learning, RL聚类 Clustering高斯混合模型Gaussian Mixture Model, GMM最大期望算法Expectation-Maximization algorithm, EMDBSCAN聚类算法Density-Based Spatial Clustering of Applications with Noise层次聚类Hierarchical Clustering学习向量量化Learning Vector Quantization, LVQ一、无监督学习与聚类01Learning家族

机器学习的一种常见划分方式如下

【监督学习】
训练数据有标签,使机器根据已有的示例进行学习,如分类和回归【无监督学习】
训练数据无标签,机器根据数据性质自主进行学习,如聚类【半监督学习】
训练时使用大量未标记数据及一部分标记数据,充分利用未标记样本来提升模型的泛化能力【强化学习】
在学习过程中不断收到环境的反馈,最佳的行为由环境的正回报来强化,强化学习的典型代表为AlphaGo02聚类任务

聚类任务是一种无监督学习,通过聚类将数据集中的样本划分为若干子集(“簇”),每个簇可能对应于一些潜在的概念和类别。之所以说是“潜在”,是因为聚类得到的划分结果是事先未知的,因此通过聚类任务,可以发掘数据内在的分布结构,探究数据样本之间的潜在联系。

二、K-Means算法01K-Means算法原理演示

现在有一个任务,把下面六个点分成两类:

首先选择两个点作为初始中心(x1和x2)

分别计算剩下的四个点到两个初始中心的距离,选择距离较近的一个初始中心,归为一类

第1次迭代完成,六个样本被分成了两类{x1,x3,x5}(黄色)和{x2,x4,x6}(蓝色),然后对于划分好的两类,重新计算每一类的均值,如红色点1和2所示

开始第2次迭代,计算每个样本点到两个新均值的距离,选择距离较近的一个中心归为一类

第2次迭代结束之后,六个样本被重新分成了两类{x1,x3,x5,x6}(黄色)和{x2,x4 }(蓝色),重新计算每一类的均值,如红色点1和2所示。

判断这次迭代得到的中心点与上次迭代的结果是否有更新,若有变动,则继续上述过程,计算每个样本点到两个中心的距离,生成新的簇划分,再计算新的簇中心……依次循环,直至各个簇的中心点不再更新,得到最终的聚类结果。

注:上述过程给出的距离划分结果仅用作演示说明算法的流程,并非严格按照背景方格纸的刻度进行计算得出。

02算法实现流程【输入】样本集和预设聚类个数k【过程】

  1. 在样本集中随机选择k个样本作为每个簇初始的均值;
  2. 重复步骤3-5,直至每个簇的均值不再更新;
  3. 计算样本集中每个样本到各个簇均值向量的距离,将该样本划分到距离该样本最近的均值向量所对应的簇;
  4. 一次划分完成后重新计算每一簇的均值;
  5. 查看均值向量是否更新。

【输出】簇划分结果03K-means聚类过程演示

04K-Means算法的数学表达

给定样本集

k均值算法针对聚类所得的簇划分最小化平方误差

其中

表示第i簇的均值向量。E在一定程度上刻画了簇内样本围绕簇均值向量的紧密程度,求解簇划分的过程即为最小化上述E值的过程。但直接求解E的最小值需要考察样本集D内所有可能的簇划分,这是一个NP难问题。因此在k均值算法的实际求解中,采用了贪心策略,通过迭代更新当前的簇划分及均值向量进行近似求解。

05K-Means算法的变体:K-modes和K-prototype

K-Means是用每个聚类中的均值(mean)做中心点,K-Modes是用每个聚类中的众数(mode)做中心点。通常K-Means较多使用欧式距离,而K-Modes一般是汉明距离,也就是对于每个特征来说,如果不同记为1,相同则为0。

K-prototype则是K-means与K-modes的一种结合形式。

K-modes算法的适用情形:对于非数值集合上的聚类任务,我们通常会采用K-modes算法,将原本K-means使用的欧式距离替换成字符间的汉明距离。

K-prototype算法的适用情形:适用于数值类型与字符类型结合的数据。

三、高斯混合聚类算法01高斯混合聚类的基本思想高斯混合聚类的过程比较抽象,它采用概率模型来表达聚类原型。高斯混合模型不仅考虑到了数据分布的均值,同时也考虑到了协方差。通常利用最大期望算法(EM算法)对高斯混合模型中的参数进行估计。EM算法的推导过程较为复杂,该过程的数学推导在后面单独作为一个篇幅来整理。02高斯混合聚类过程演示

在此给出算法复现的结果,直观地对混合高斯模型在聚类中的应用进行理解。图中实线是数据对应的真实的高斯分布,虚线是估计的高斯分布,从迭代过程可以看出,高斯分布的参数不断更新,最终估计出的高斯分布与实际值几乎完全重合。

03高斯混合聚类算法流程【输入】样本集和高斯混合成分的个数【过程】

  1. 模型参数初始化;
  2. 重复步骤3-4,直到对数似然函数不再有明显的变化,或者达到迭代次数上限;
  3. E步:更新W及P,其中W是隐变量,即每个样本属于每一簇的后验概率,P为聚类每一簇所占的比重,即混合系数;
  4. M步:更新高斯分布的均值和方差;
  5. 根据W的值得到每个样本对应的簇标记,完成簇划分。

【输出】簇划分04K-Means算法与高斯混合聚类算法的内在联系

K-Means算法可以看做是高斯混合聚类的一个特例,它的各混合成分方差相等,且每个样本仅指派一个混合成分。

同样可以使用EM算法对K-means算法进行推导:K-means中每个样本所属的类就可以看成是一个隐变量,在E步中,我们固定每个类的中心,通过对每一个样本选择最近的类优化目标函数;在M步,重新更新每个类的中心点,该步骤可以通过对目标函数求导实现,最终可得新的类中心就是类中样本的均值。

对高斯混合聚类过程的深入了解需要理解EM算法的原理,后面会对其数学推导另做整理。

四、DBSCAN算法01与DBSCAN算法相关的概念定义

理解DBSCAN算法首先要理解以下几个概念:

  • ε邻域:首先我们需要设定一个邻域参数ε(即下图中的max_dis),样本x的ε邻域包含了样本集中所有与该样本距离小于ε的样本。例如下图中的两个红色区域,分别表示样本x1和x3的ε邻域。
  • 核心对象:我们需要设定一个MinPts参数,当样本x的ε邻域内样本数大于等于MinPts个时,我们将x称为一个核心对象。在下图中,假设MinPts=3,则我们可以将x1看做一个核心对象,其ε邻域内包含了三个样本{x1,x2,x5}
  • 密度直达:假设有两个样本xi和xj,如果xj位于xi的ε邻域中,并且xi是核心对象,那么我们称xj由xi密度直达。在下图中,x2位于x1的ε邻域内,且x1是核心对象,所以我们可以说x2可由x1密度直达。
  • 密度可达:对xi与xj,若存在样本序列p1,p2,p3,...pn,其中p1=x1,pn=xj,且pi+1由pi密度直达,则称xi与xj密度可达。在下图中,x2可由x1密度直达,x3可由x2密度直达,所以我们认为x1和x3是密度可达的。

02算法流程

基于上面的几种概念,给出DBSCAN算法的基本流程:

【输入】样本集和邻域参数,其中邻域参数包括判断为领域内样本的最大距离max_dis、样本被看作核心对象的最小邻域内样本数量min_pts

【过程】

  1. 根据邻域参数max_dis确定每个样本的邻域,统计邻域内样本个数

  2. 根据邻域参数min_pts生成核心对象集合

  3. 重复步骤4-5直至核心对象集合为空

  4. 随机选取一个核心对象,找到这个核心对象的所有密度可达的样本,构成一个聚类簇

  5. 在核心对象集合中去除包含在该聚类簇中的样本

【输出】簇划分结果

03DBSCAN算法执行过程演示

生成一组模拟数据用于聚类,数据分布如下:

设定两个邻域参数,找出核心对象集合(下图中红色点)

随机选取一个核心对象,找到这个核心对象的所有密度可达的样本,构成一个聚类簇。(图中红色点表示选取的核心对象),重复该过程直至核心对象集合为空

检测到核心样本集合为空,停止聚类,得到最终的聚类结果。

我们可以看到边缘稀疏处,深蓝色的点表示被识别为噪声数据的样本。这里就涉及到邻域参数的选择,参数设置不当可能会导致大量噪声样本,或者所有数据均聚成一簇(即样本间全部密度可达)。五、AGNES算法01AGNES算法基本思想

AGNES算法是一种常见的层次聚类算法,它采用自底向上的聚合策略,该算法的原理非常简单:先将数据集中的每个样本看作一个初始聚类簇,然后在算法运行的每一步中找出距离最近的两个聚类簇进行合并,直到达到预设的聚类簇个数为止。

在算法复现过程中,为了方便进行聚类簇合并及层次遍历操作,可以选择借助二叉树进行该过程的模拟。

随着聚类的进行,每一步都有两个簇被归并为一个新的簇,显然这种方式有助于发现各个簇之间的层次关系,并能够对最适用的聚类数目进行探索。但是,每个步骤都需要完成当前所有簇两两之间距离的计算,该算法的复杂度非常高。

02算法流程

【输入】样本集及聚类簇数

【过程】

  1. 将每个样本设置为一个初始聚类簇
  2. 重复步骤3-4直至当前聚类簇的个数与预设的聚类簇数相等
  3. 找到距离最近的两个聚类簇
  4. 合并两个聚类簇

【输出】簇划分结果03AGNES算法聚类过程演示

算法由将每个样本作为一个簇开始执行,每一步合并两个簇,当算法执行到聚成7个簇时,在模拟数据上的聚类结果如下图:

接下来,黄色和紫色的两个簇进行了合并,聚成6类

接下来,蓝色和红色的两个簇进行了合并,聚成5类

以此类推,聚成4类时:

聚成3类时:

六、学习向量量化(LVQ)算法01LVQ算法的基本思想

除了上面介绍的几种聚类算法外,还有一种比较特殊的聚类算法,它属于“监督学习”的范畴,学习向量量化聚类方法的每个样例均有类别标签。该算法的输出是一组原型向量,每个原型向量定义了与之相关的一个区域,区域中每个样本与自身类别的原型向量的距离不大于它与其他原型向量的距离。

02算法流程

该算法实现的流程如下,不断调整原型向量使其对样本空间的划分更符合实际的类别标签划分:

【输入】样本集,聚类个数,原型向量预设类别标记,学习率

【过程】

  1. 选取一组样本作为初始原型向量(可以按照类别标记分别选取);
  2. 重复步骤3-5,直到达到最大迭代次数,或原型向量更新很小甚至不再更新;
  3. 在样本集内随机选取一个样本;
  4. 计算该样本与每个原型向量的距离,找到距离最近的原型向量;
  5. 如果该样本与该原型向量的类别标记相同,则调整原型向量的位置靠近该样本;若类别标记不同,则调整原型向量的位置远离该样本。

【输出】一组原型向量

03LVQ算法聚类过程演示

通过聚类的过程来直观地理解原型向量如何对样本空间进行切分:

生成如下所示的模拟数据,进行LVQ聚类。

下面的动图展示了聚类过程中的原型向量变化(四个红色点表示一组原型向量,将样本空间分为四份)

04LVQ算法的数学表示

给定样本集

每个样本xj是由个n属性描述的特征向量

yj是样本的类别标记。LVQ的目标是学得一组n维的原型向量

每个原型向量代表了一个聚类簇。对于样本空间X,学习到一组原型向量后,每个样本x将被划入与其距离最近的原型向量所代表的簇中:

式中每个原型向量pi定义了一个与之相关的区域Ri,该区域中的每个样本与pi的距离不大于它与其他原型向量的距离。由此形成的样本空间X的簇划分

称为“Voronoi剖分”。

END

moead算法流程步骤_数据聚类(一)常见聚类算法的基本原理[图解]相关推荐

  1. moead算法流程步骤_匈牙利算法原理与实现

    本文介绍了匈牙利算法的计算流程和代码实现,欢迎各位抛砖.原理部分正在整理中... 分配问题 分配问题涉及将机器分配给任务,将工人分配给工作,将足球运动员分配给职位等. 目标是确定最佳分配,例如,使总成 ...

  2. moead算法流程步骤_算法——抓住程序的灵魂

    做任何事情都要有一定的步骤,为了解决一个问题而采取的方法和步骤就称为算法.C语言的算法是计算机算法,即计算机能够执行的算法.只有明确了算法后,才能使应用程序实现某些功能.所以,通常人们会将算法称为程序 ...

  3. 数据建模java_数据建模及常见分类算法

    数据建模及常见分类算法 数据建模指的是对现实世界各类数据的抽象组织,建立一个适合的模型对数据进行处理.建模流程解读 建模数据的抽取,清洗和加工以及建模算法的训练和优化会涉及大量的计算机语言和技术.比如 ...

  4. 数据建模及常见分类算法

    数据建模及常见分类算法 数据建模指的是对现实世界各类数据的抽象组织,建立一个适合的模型对数据进行处理.建模流程解读 建模数据的抽取,清洗和加工以及建模算法的训练和优化会涉及大量的计算机语言和技术.比如 ...

  5. 使用机器学习算法实现单细胞测序数据的降维和聚类(二)

    本篇主要记录一下几种常用的聚类算法 使用的参考代码和数据集还是(一)里面的 1.K-Means 算法思想大致为:先从样本集中随机选取 k个样本作为簇中心,并计算所有样本与这 k个"簇中心&q ...

  6. fcbf特征选择步骤_一文读懂 聚类特征选择

    <Feature Selection for Clustering:A Review> 0.1 introduction介绍 高通量技术导致数据维度以及样本数量呈指数增长,使得对数据集进行 ...

  7. 自动补足算法是什么_数据、算法岗的几点经验分享!

    learners |  作者Datawhale |  来源目录 有哪些好的秋招经验分享? 机器学习中常用的最优化方法有哪些? 想通过数据竞赛来提升实践能力,作为小白有什么入门经验?(今日问题) 有哪些 ...

  8. app制作流程步骤_企业画册设计流程总结 告诉你画册制作步骤

    画册设计流程是怎样的,不管什么设计都是有步骤有方法的,按照企业画册的设计流程来制作,有助于我们开展画册的制作工作.在本文我们看看企业画册设计流程是什么.其实从企业内刊设计流程,可以参看画册的设计流程. ...

  9. dbscan算法python实现_挑子学习笔记:DBSCAN算法的python实现

    DBSCAN(Density-Based Spatial Clustering of Applications with Noise)聚类算法,是一种基于高密度连通区域的.基于密度的聚类算法,能够将具 ...

最新文章

  1. 通过Redis、Memcache的 incr 原子操作防刷机制的使用差别
  2. Linux下如何创建loop device
  3. 【CodeForces - 244B】Undoubtedly Lucky Numbers (dfs打表 + 二分)
  4. 三层交换机配置实例及说明
  5. SAP License:瞎搞!你真的懂什么是ERP、中台和低代码吗?
  6. matlab2c使用c++实现matlab函数系列教程-wilkinson函数
  7. 【论文解读】图文并茂带你细致了解ELMo的各种细节
  8. MYSQL 取上一条记录,与下一条记录
  9. 串行通信协议(I2C、SPI、UART、SCCB、CAN)
  10. 卡西欧计算机fx82cnx怎么玩游戏,卡西欧fx-82ES计算器乱码玩法问题
  11. c语言程序标准输入和输出语句,C语言程序设计--输入与输出
  12. android 手机充电慢,华为手机充电慢怎么办?6个小妙招让手机快速充满电
  13. Android中的MVC详解
  14. 毛星云opencv之8.4.4查找和绘制图像轮廓矩
  15. 图片和图形之减少透支(17)
  16. php 10000并发服务器,求助 1000 并发量所需服务器配置
  17. Downie4.6.4视频下载工具
  18. Windows 2003 个人用户使用的快速入门和维护独门技巧
  19. 关于集成商们托盘式生产方式的综合密封测试方案
  20. Chatgpt插件爆了,彻底爆了

热门文章

  1. wcf高并发 mysql_使用nginx搭建高可用,高并发的wcf集群
  2. python动态显示进度条_实例详解python如何轻松实现动态进度条
  3. java调用子系统代码_深入理解JAVA虚拟机-Idea远程执行本地Java代码 - Java 技术驿站-Java 技术驿站...
  4. 类方法与静态方法的进一步理解
  5. js排序的时间复杂度_JavaScript插入排序算法通俗说明
  6. 【研发管理】结构化流程框架
  7. 《系统集成项目管理工程师》必背100个知识点-38资源平滑和资源平衡
  8. 笔记-项目沟通管理-沟通基本原则
  9. linux服务端搭配win7客户端的frp
  10. Fabricjs使用Group实现组合对象