1.DBSCAN

1.基于密度的聚类算法-DBSCAN

如下的样本点,由样本点的分布可知,理想状态下,是把这些样本点分成四个聚类(四簇),即下图所示:

DBSCAN算法_sklearn

DBSCAN算法_邻域_02

但是例子中的样本点,如果采用K-means算法进行聚类分析,得到的聚类结果如下图所示(第二个图是使用DBSACAN算法得到的结果):

DBSCAN算法_聚类_03

DBSCAN算法_算法_04

K-means算法:例子中的问题,我们发现使用K-Means算法已经不再适用,因为K-means算法是基于距离度量的一种算法,K-means的理想状态就是聚完类后,每个点都能离所属簇的质心距离最近。(如果去掉外面的圈圈,这时候K-menas算法适用,圆形的样本更适合K-means)

由样本点的分布可知,我们希望的紧密相连的样本划分为一簇。DBSCAN算法就是基于密度的聚类算法。

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类。

DBSCAN算法特点总结:

(1)本算法将具有足够高密度的区域划分为簇。

(2)可发现任意形状的聚类.(即对需要聚类的样本点没有任何要求,可以是环状也可以是圆形。不同于K-menas更适合样本点是圆形的情况)

注: Density-Based Spatial Clustering of Applications with Noise-基于密度的带噪声应用的空间聚类

DBSCAN算法涉及到的参数:

DBSCAN是基于一组邻域来描述样本集的紧密程度的,参数(ε, MinPts)用来描述邻域的样本分布紧密程度。其中,ε描述邻域距离阈值,MinPts描述了某一样本的距离为ε的邻域中样本个数的阈值。

不同于K-Means算法, DBSCAN算法不用设定参数n_cluster;

2.DBSCAN 算法的相关定义

DBSCAN算法_算法_05

下图为例理解上述定义,图中MinPts=5,红色的点都是核心对象,因为其ε-邻域至少有5个样本。黑色的样本是非核心对象。所有核心对象密度直达的样本在以红色核心对象为中心的超球体内,如果不在超球体内,则不能密度直达。图中用绿色箭头连起来的核心对象组成了密度可达的样本序列。在这些密度可达的样本序列的ε-邻域内所有的样本相互都是密度相连的。

DBSCAN算法_sklearn_06

  1. DBSCAN 算法思想
    1)指定合适的ε和Minpoints.
    2)随机的从未访问的样本点里面选取一个样本点p,如果点p的ε邻域里有超过Minipoints个样本点,则创建一个以p为核心的新簇。
    3)首先反复寻找这些核心点密直达的点,之后是密度可达的点,将其加入到相应的簇当中,对于核心点发生”密度相连”状况的点,给予合并(即分到一簇里面)。
    4)当没有新的点可以被添加到任何簇时,算法结束。

伪代码

输入:

D:一个包含n个对象的数据集;ε:半径参数;

MinPts:邻域密度阈(yu)值。

输出:基于密度的簇集合。

方法:

(1)标记所有对象为unvisited;

(2)do

(3) 随机选取一个unvisited对象p

(4) 标记p为visited

(5) if p的ε-邻域至少有MinPts个对象:

(6) 创建一个新簇C,将p添加到C;

(7) 令N为p的ε-邻域中的对象的集合;

(8) for N中的每个p^′

(9) if p^′是unvisited

(10) 标记p^′为visited

(11) if p^′的ε-邻域至少有MinPts个对象,把这些点添加到N

(12) if p′还不是任何簇的成员,把p′添加到C

(13) 输出C

(14) else 标记p为噪声

(15)until没有标记为unvisited的对象

2.常见的聚类算法Mini batch k-means

常见的聚类算法:

03.Mini Batch K-Means

Mini Batch K-Means是K-Means算法的一种优化方案,主要优化了数据量大情况下的计算速度。与标准的K-Means算法相比,Mini Batch K-Means加快了计算速度,但是降低了计算精度,但是在数据量大的情况下这个精度的下降基本可以忽略。通常在数据量较大的情况下采用Mini Batch K-Means算法有更好的效果。

总结:适用范围,数据量比较大的时候才选用,样本数据量比较小的时候,选用K-menas算法即可。

算法步骤:

首先抽取部分数据集,使用K-Means算法构建出k个聚簇点的模型。

继续抽取训练数据集中的部分样本数据集(无放回的抽样),将其添加到模型中,分配给距离最近的聚簇中心点。

更新聚簇的中心点值(每次更新都只用抽取出来的那部分数据集)

循环迭代第二步和第三部操作,直至中心点稳定或者达到迭代次数,停止计算操作。

与K均值相比,质心的更新是在部分样本集上。Mini Batch K-Means比K-Means有更快的收敛速度。但同时也降低了聚类效果,但在实际项目中却表现的不明显。

Mini Batch K-Means-聚类效果对比图

DBSCAN算法_聚类_07

聚类可视化地址:

(1)K-means算法可视化:

​https://www.naftaliharris.com/blog/visualizing-k-means-clustering/​

(2) DBSCAN算法可视化

​https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/​