(12)聚类算法——K-MeansMeanShiftDBSCAN

Posted AI初见

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(12)聚类算法——K-MeansMeanShiftDBSCAN相关的知识,希望对你有一定的参考价值。

定义

      聚类就是按照特定的准则把数据集分成不同的类或簇,使同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象相似度小,是不是与高内聚低耦合类似。

      聚类算法属于无监督学习,它不需要提前预知数据的类别标签信息。既然说要把根据相似度的大小进行划分,那么如何计量相似度?戳这里《相似度计量与距离》

      聚类算法有很多种,包括如划分聚类、层次聚类、密度聚类、谱聚类、网格聚类等等,下面将具体介绍几种聚类算法。


2   K-Means

      K-Means,即K均值聚类算法,简单而易于理解,一种使用比较广泛且基础的聚类算法。

 

K-Means算法流程:

输入:数据样本集,超参数K,迭代次数M

(1)    初始化K个类别中心a1/a2/…/ak,可以以k个样本数据作为中心

(2)    计算类别中心a1与每个样本的距离,然后排序选择距离最近的K个样本作为类别a1的数据,求这k个样本数据的均值,作为新的类别中心a1’

(3)    其他类别中心的操作与a1相同;

(4)    重复步骤(2)(3),当满足终止条件时,结束。终止条件包括如:迭代次数、簇中心的变化率、最小平方误差等。

 

K-means算法理解

K-means算法实现简单,聚类效果也不错,应用较为广泛,但其也有些缺陷。(1)需要预先设定超参数K;(2)对异常值敏感,如果存在异常值,会导致均值偏差严重;(3)对初值较为敏感,不同的初值可能得到不同的划分规则。

超参k的选择是一门学问,需要经验和不断的尝试;针对异常值问题,有一个改进算法——K-Mediods聚类,即中值聚类,它是通过选择样本的中位数而不是均值作为新的类别中心;对于初值敏感问题,可以通过初始化多套初始节点,构造分类规则,然后选择最佳的构造规则。


3  MeanShift均值漂移聚类

         K-means算法中,以样本的均值点作为下一个聚类的中心。均值漂移聚类在选择下一个迭代中心上有区别,其沿着密度上升方向寻找聚簇点。


计算公式:


算法流程:

(1)    在未被分类的数据点中随机选择一个点作为中心点;

(2)    找出离中心点距离在带宽之内的所有点,记为集合M,认为这些点属于簇C;同时,把这些球内点属于这个类的次数加1

(3)    计算从中心点开始到集合M中每个元素的向量,将这些向量相加,得到偏移向量

(4)    中心点沿着偏移方向移动,移动距离是偏移向量的模;

(5)    重复步骤(2)(3)(4),知道偏移向量的大小满足设定的阈值要求,记住此时的中心点;注意这个迭代过程中遇到的点都应归类到簇C

(6)    如果收敛时当前簇的中心与其他已经存在的簇中心的距离小于阈值,就将二者合并,否则增加一个新类。

(7)    重复步骤(1~5),直到所有点都被归类;

(8)    分类:根据每个类,对每个点的访问频率,取访问频率最大的那个类作为当前点集的所属类。


优缺点: 

优点:不同于K-Means,均值漂移聚类不需要预先知道多少类或组;基于密度的算法相比K-Means受均值影响较小。

缺点:窗口半径的选择可能没那么重要。


4  基于密度的聚类方法DBSCAN

         DBSCANDensity-BasedSpatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法,是一种很典型的密度聚类算法,

密度聚类算法一般假定类别可以通过样本分布的紧密程度决定,同一类别的样本,他们之间是紧密相连的,也就是说在该类别任意样本周围不远处一定有同类别的样本存在。通过将紧密相连的样本化为一类,就可以得到一个聚类类别,通过将所有各组紧密相连的样本划分成不同的类别,就得到了最终的所有聚类类别结果。

DBSCAN是基于一组邻域来描述样本集的紧密程度的,参数用来描述邻域的样本分布紧密程度。其中限定邻域距离,限定样本数目。

DBSCAN的原理就是假定一个样本属于一类,那么在该样本周围不远处一定存在同类别的样本。


前提知识

(12)聚类算法——K-Means、MeanShift、DBSCAN

算法流程

输入:样本集D=(x1,x2,….,xn),邻域参数

(a)    从数据集中随机抽取一个未被标记的样本

(b)    统计其邻域内样本个数Num,若Num大于等于MinPts,则该样本就标记为核心对象;然后找出其所有密度可达的对象(方法:寻找该样本密度直达的各个样本,确定样本是否为核心对象;若是核心对象,继续查找它的密度直达的样本,依此类推;若是边缘点,就只做个标记)

(c)     Num小于MinPts,则标记该样本为边缘点

(d)    本轮迭代中,将所有得到的核心对象和边缘点归为一类

(e)    重复步骤(1)(2)(3),直到所有的样本都被标记。


以下图对流程进行说明:


优缺点

  优点:不需要提前知道数据有多少类别;可以发现任意形状的簇类;能识别出噪声点;对异常点不敏感;

  缺点:如果样本集的密度不均匀,聚类间距相差很大时,聚类质量差;如果样本集较大,聚类收敛时间较长;与传统的K-Means相比,DBSCAN有两个超参数,调参稍复杂。


以上是关于(12)聚类算法——K-MeansMeanShiftDBSCAN的主要内容,如果未能解决你的问题,请参考以下文章

最大最小距离算法

ML-7聚类算法-实例代码

Tensorflow快速入门1--实现K-Means聚类算法

K均值算法

OPTICS 聚类算法的 ELKI 实现只检测到一个聚类

机器学习——详解经典聚类算法Kmeans