聚类算法整理


无监督学习希望通过对无标记训练样本的学习来揭露数据的内在性质以及规律,而其中应用最广泛的就是聚类算法(clustering):给定数据集,聚类试图将数据集中的样本划分为 K 个不相交的子集,每个子集称为一个簇(cluster),每个簇可能对应于一个潜在的概念,这些概念对于聚类算法而言,事先可能是未知的。

聚类可以作为一个单独的过程,用于寻找数据内在的分布结构,也可以作为其他学习任务的前驱过程。需要注意的是,聚类并没有唯一的评价标准,可能很多不同的聚类都很好地对应了现实世界的某些属性,它们都是合理的。如:在图片识别中包含的图片有:红色卡车、红色汽车、灰色卡车、灰色汽车。可以聚类成:红色一类、灰色一类;也可以聚类成:卡车一类、汽车一类。

有效性指标

对于聚类任务,希望同一簇的样本尽可能彼此相似,不同簇的样本之间尽可能不同,即簇内相似度高,簇间相似度低。聚类的有效性指标分为两类:聚类结果与某个参考模型(reference model)进行比较,称作外部指标(external index);直接考察聚类结果而不利用任何参考模型,称作内部指标(internal index)。
常用的外部指标有:Jaccard系数、FM指数、Rand指数、ARI指数;
常用的内部指标有:DB指数、Dunn指数;

原型聚类

原型聚类算法假设聚类结构可以通过一组原型刻画,通常算法选会对原型进行初始化,然后对原型进行迭代更新求解,不同的原型表示和不同的求解方式会产生不同的算法。

k-means 算法

k-means算法的目标是通过设立 k 个原型,将训练集划分成 k 簇,然后最小化簇中实例和对应原型的欧氏距离,即:
在这里插入图片描述
上式是一个 NP-hard 问题,因此 k-means 算法采用了一种“贪心”策略,通过迭代优化来求近似解(EM算法)。

算法步骤
输入: 训练集 D,聚类簇数量 k
输出: k 个均值向量
(1) 初始化均值向量:从训练集 D 中随机抽取 k 个样本作为初始化均值向量;
(2) 聚类划分:对训练集 D 中每个样本分别计算其离各个均值向量的欧氏距离,将样本划分到距离最小的那一簇;
(3) 重置均值向量:对每个簇,按照极大似然估计的思想,计算其均值向量,作为该簇的新的均值向量;
(4) 迭代求解:迭代 (2)、(3) 直至均值向量未发生变化或者迭代次数到达上限为止,返回均值向量。

k-means的优点: 计算复杂度低,为 O(N x K x q) ,其中 N 为样本数量,q 为迭代次数,通常 K 和 q 要远远小于 N,此时复杂度相当于 O(N);当数据集是密集的、球状或团状的簇群,且簇与簇之间区别明显时,聚类效果很好。
k-means的缺点: 需要首先确定聚类的数量K;分类结果严重依赖于分类中心的初始化;对噪声敏感。因为簇的中心是取平均,因此聚类簇很远地方的噪音会导致簇的中心点偏移;无法解决不规则形状的聚类;

k值的选择

手肘法: 核心指标是SSE(sum of the squared errors,误差平方和),
在这里插入图片描述
其中Ci是第i个簇,p是Ci中的样本点,mi是Ci的质心,SSE是所有样本的聚类误差,代表了聚类效果的好坏。
手肘法的核心思想是:随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差平方和SSE自然会逐渐变小。并且,当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大,而当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓,也就是说SSE和k的关系图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数,如下图所示:
在这里插入图片描述

轮廓系数法: 某个样本点Xi的轮廓系数定义如下,
在这里插入图片描述
其中,a是Xi与同簇的其他样本的平均距离,称为凝聚度,b是Xi与最近簇中所有样本的平均距离,称为分离度。而最近簇的定义是:
在这里插入图片描述
其中p是某个簇Ck中的样本。事实上,简单点讲,就是用Xi到某个簇所有样本平均距离作为衡量该点到该簇的距离后,选择离Xi最近的一个簇作为最近簇。

求出所有样本的轮廓系数后再求平均值就得到了平均轮廓系数。平均轮廓系数的取值范围为[-1,1],且簇内样本的距离越近,簇间样本距离越远,平均轮廓系数越大,聚类效果越好。那么,很自然地,平均轮廓系数最大的k便是最佳聚类数。

k-means的变种

1、k-means++ 属于 k-means 的变种,它主要解决 k-means 严重依赖于分类中心初始化的问题。在选择初始均值向量时,尽量安排这些初始均值向量之间的距离尽可能的远。
2、k-modes 属于 k-means 的变种,它主要解决 k-means 无法处理离散特征的问题。主要区别在于重新定义了距离函数以及簇中心的更新规则。
3、k-medoids 属于 k-means 的变种,它主要解决 k-means 对噪声敏感的问题。在计算新的簇心时,不再通过簇内样本的均值来实现,而是挑选簇内距离其它所有点都最近的样本来实现,这就减少了孤立噪声带来的影响,但也增加了算法的复杂度。

学习向量量化

与 k 均值算法不同,学习向量量化(LVQ)的学习过程中会利用样本的类别信息,所以 LVQ 是一种监督式的聚类算法。其目标是学得一组原型向量,每一个原型向量代表一个聚类簇标记。

算法步骤
输入: 训练集 D,聚类簇数量 p
输出: p 个原型向量
(1) 初始化原型向量;
(2) 计算距离:在训练集 D 中随机抽取一个样本 xj,分别计算该样本与各个原型向量间的距离,然后找出最近的原型向量 pi;
(3) 重置均值向量:如果样本 xj 与原型向量 pi 的类别相同,则让原型向量靠近样本xj ,否则远离,更新规则如下图:
在这里插入图片描述
(4) 迭代求解:迭代 (2)、(3) 直至原型向量更新很小或者迭代次数到达上限为止,返回原型向量。

高斯混合聚类

高斯混合聚类的步骤:首先假设样本集具有一些规律,包括可以以 α α α 参数作为比例分为 k 类且每类内符合高斯分布。然后根据贝叶斯原理利用极大似然法同时求出决定分类比例的 α α α 和决定类内高斯分布的 μ μ μ Σ Σ Σ。最后将样本根据 α α α μ μ μ Σ Σ Σ 再次通过贝叶斯原理求出样本该分在哪个簇。

整个步骤下来,这种做法其实就是一种原型聚类:通过找到可以刻画样本的原型( α α α μ μ μ Σ Σ Σ参数),迭代得到 α α α μ μ μ Σ Σ Σ参数的最优解。

密度聚类

基于密度的聚类算法假设聚类结构能够通过样本分布的紧密程度确定,以数据集在空间分布上的稠密程度为依据进行聚类,即只要一个区域中的样本密度大于某个阈值,就把它划入与之相近的簇中。

密度聚类从样本密度的角度进行考察样本之间的可连接性,并由可连接样本不断扩展直到获得最终的聚类结果。这类算法可以克服K-means、BIRCH等只适用于凸样本集的情况。

DBSCAN算法

在这里插入图片描述
DBSCAN算法的优点: 不需要事先给定簇的数目k;适于稠密的非凸数据集,可以发现任意形状的簇;可以在聚类时发现噪音点、对数据集中的异常点不敏感。
DBSCAN算法的缺点: 对于高维数据效果不好;不适于数据集中样本密度差异很小的情况;数据量很大时算法收敛的时间较长;不易调参。

Mean-Shift 算法

Mean-Shift 是基于核密度估计的爬山算法,可以用于聚类、图像分割、跟踪等领域。Mean Shift 算法的关键操作是通过感兴趣区域内的数据密度变化计算中心点的漂移向量,从而移动中心点进行下一次迭代,直到到达密度最大处(中心点不变)。从每个数据点出发都可以进行该操作,在这个过程,统计出现在感兴趣区域内的数据的次数,该参数将在最后作为分类的依据。

算法步骤
1、在未被标记的数据点中随机选择一个点作为起始中心点center;
2、找出以center为中心半径为radius的区域中出现的所有数据点,认为这些点同属于一个聚类C。同时在该聚类中记录数据点出现的次数加1。
3、以center为中心点,计算从center开始到集合M中每个元素的向量,将这些向量相加,得到向量shift。
4、center = center + shift。即center沿着shift的方向移动,移动距离是||shift||。
5、重复步骤2、3、4,直到shift的很小(就是迭代到收敛),记住此时的center。注意,这个迭代过程中遇到的点都应该归类到簇C。
6、如果收敛时当前簇C的center与其它已经存在的簇C2中心的距离小于阈值,那么把C2和C合并,数据点出现次数也对应合并。否则,把C作为新的聚类。
7、重复1、2、3、4、5直到所有的点都被标记为已访问。
8、分类:根据每个类,对每个点的访问频率,取访问频率最大的那个类,作为当前点集的所属类。

Mean-Shift算法的优点: 簇的数量由算法自动确定,无需人工指定;基于密度定义,能够对抗噪音;可以处理任意形状和大小的簇。
Mean-Shift算法的缺点: 无法控制簇的数量;无法区分有意义的簇和无意义的簇,即异常点也会形成它们自己的簇。

层次聚类

层次聚类(Hierarchical Clustering)是聚类算法的一种,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树。在聚类树中,不同类别的原始数据点是树的最低层,树的顶层是一个聚类的根节点。创建聚类树有自下而上合并和自上而下分裂两种方法。

AGNES 算法

AGNES 算法是一种常用的采用自底向上聚合策略的层次聚类算法。
AGNES首先将数据集中的每个样本看作一个初始的聚类簇,然后在算法运行的每一步中,找出距离最近的两个聚类簇进行合并,合并过程不断重复,直到达到预设的聚类簇的个数。

聚类簇之间的距离有三种计算方法: 最小距离由两个簇的最近样本决定;最大距离由两个簇的最远样本决定;平均距离由两个簇的所有样本决定。

AGNES 算法的优点: 距离容易定义,使用限制较少;可以发现聚类的层次关系。
AGNES 算法的缺点: 计算复杂度较高;算法容易聚成链状;不适合大数据集。

DIANA 算法

DIANA 算法是一种常用的采用自顶向下策略的层次聚类算法。
DIANA首先将所有对象置于一个簇中,然后按照某种既定的规则逐渐细分为越来越小的簇(比如最大的欧式距离),直到达到某个终结条件(簇数目或者簇距离达到阈值)。

优缺点与AGNES类似。

BIRCH 算法

BIRCH算法(平衡迭代削减聚类法):聚类特征使用3元组进行一个簇的相关信息,通过构建满足分枝因子和簇直径限制的聚类特征树(CF-Tree)来求聚类,聚类特征树其实是一个具有两个参数分枝因子(B、L)和类直径(T)的高度平衡树;分枝因子规定了树的每个节点的子女的最多个数,而类直径体现了对这一类点的距离范围;非叶子节点为它子女的最大特征值;聚类特征树的构建可以是动态过程的,可以随时根据数据对模型进行更新操作。对应生成的结果就是一个簇(聚类特征 - CF);BIRCH算法的过程就是建立CF-Tree的过程。

BIRCH 算法的优点: 节省内存,所有样本都存放在磁盘上,内存中仅仅存放CF结构,适合大数据集;计算速度快,只需要扫描一遍就可以建立CF树;可以识别噪声点。
BIRCH 算法的缺点: 结果依赖于数据点的插入顺序;对非球状的簇聚类效果不好;每个结点只能包含规定数目的子结点,最后聚类的簇可能和真实的簇差距很大。

谱聚类

谱聚类(spectral clustering) 是一种基于图论的聚类方法。
主要思想:基于数据集 D 来构建图 G = ( V,E ),顶点V由数据集中的数据点组成;任意一对顶点V之间存在边E,距离越近的一对顶点,边的权重越高,距离越远的一对顶点,边的权重越低;通过对图 G 进行切割,使得切割之后:不同子图之间的边的权重尽可能的低、各子图内的边的权重尽可能的高,这样就完成了聚类。

常用的谱聚类算法有:最小切图、RatioCut 算法、Ncut 算法。

谱聚类算法的优点: 只需要数据之间的相似度矩阵,因此处理稀疏数据时很有效;由于使用了降维,因此在处理高维数据聚类时效果较好。
谱聚类算法的缺点: 如果最终聚类的维度非常高,则由于降维的幅度不够,则谱聚类的运行速度和最后聚类的效果均不好;聚类效果依赖于相似度矩阵,不同相似度矩阵得到的最终聚类效果可能不同。

参考博客:https://blog.csdn.net/qq_15738501/article/details/79036255

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值