0
点赞
收藏
分享

微信扫一扫

聚类算法(part1)--DBSCAN

学习笔记,仅供参考,有错必纠

参考书目:《数据挖掘导论》;《R语言实战》;《应用预测建模》;《R语言与数据挖掘》;等

聚类



密度聚类



基于密度的聚类寻找被低密度区域分离的高密度区域。DBSCAN是一种简单、有效的基于密度的聚类算法,它解释了基于密度的聚类方法的许多重要概念。



基于中心的方法



在基于中心的方法中,数据集中特定点的密度通过对该点聚类算法(part1)--DBSCAN_数据挖掘半径之内的点计数(包括点本身)来估计。如下图所示,点A的聚类算法(part1)--DBSCAN_数据挖掘半径内点个数为7,且包括A本身:

聚类算法(part1)--DBSCAN_数据挖掘_03

该方法实现简单,但是点的密度取决于指定的半径,例如,如果半径足够大,则所有点的密度都等于数据集中的点数m,同理,如果半径太小,则所有点的密度都是1。



根据基于中心的密度进行点分类



密度的基于中心的方法使得我们可以将点分类为(1)稠密区域内部的点(核心点),(2)稠密区域边缘上的点(边界点),(3)稀疏区域中的点(噪声或背景点)。下图展示了核心点、边界点和噪声点的概念:

聚类算法(part1)--DBSCAN_数据挖掘_04

  • 核心点:这些点在基于密度的簇内部。点的邻域由距离函数和用户指定的距离参数聚类算法(part1)--DBSCAN_数据挖掘_05决定,核心点的定义是,如果该点的给定邻域内的点的个数超过给定的阈值
    聚类算法(part1)--DBSCAN_聚类_06,则该点为核心点,其中聚类算法(part1)--DBSCAN_聚类_06也是一个用户指定的参数。上图中,点A是核心点。
  • 边界点:边界点不是核心点,但它落在某个核心点的邻域内。上图中,点B是边界点。边界点可能落在多个核心点的邻域内。
  • 噪声点:噪声点是既非核心点也非边界点的任何点。上图中,点C是噪声点。


DBSCAN算法



给定核心点、边界点和噪声点的定义,DBSCAN算法可以非正式地描述如下,任意两个足
够靠近(相互之间的距离在Eps之内)的核心点将放在同一个簇中。同样,任何与核心点足够靠近的边界点也放到与核心点相同的簇中中,如果一个边界点靠近不同簇的核心点,则可能需要解决平局问题。噪声点被丢弃。下面是实现步骤:

  1. 将所有点标记为核心点、边界点或噪声点;
  2. 删除噪声点;
  3. 为距离在Eps之内的所有核心点之间赋予一条边;
  4. 每组连通的核心点形成一个簇;
  5. 将每个边界点指派到一个与之关联的核心点的簇中。


时间复杂性和空间复杂性



DBSCAN的基本时间复杂度是聚类算法(part1)--DBSCAN_时间复杂度_08(m*找出Eps邻域中的点所需要的时间),其中m是点的个数。在最坏的情况下,时间复杂度是聚类算法(part1)--DBSCAN_聚类_09.然而,在低维空间,有一些数据结构,比如kd树,可以有效地检索特定点给定距离内的所有点,时间复杂度将降至聚类算法(part1)--DBSCAN_邻域_10

即使对于高维数据,DBSCAN的空间复杂度依然是聚类算法(part1)--DBSCAN_邻域_11,因为对每个点,它只需要维持少量数据,即簇标号和每个点是核心点、边界点还是噪声点的标识。



选择DBSCAN的参数



当然,还有如何确定Eps和MinPts的问题。基本方法是观察点到它的k个最近邻的距离(称为k-距离)的特性。对于属于某个簇的点,如果k不大于簇的大小的话,则​​k-距离​​将很小(理解:因为在同一个族内)。

注意,尽管因簇的密度和点的随机分布不同而有一些变化,但是如果簇密度的差异不是很极端的话,在平均情况下变化不会太大,然而,对于不在簇中的点(如噪声点),​​k-距离​​​将相对较大。因此,如果我们对于某个k,计算所有点的​​k-路离​​​,以递增次序将它们排序,然后绘制排序后的值,则我们会看到​​k-距离​​​的急剧变化,对应于合适的Eps值。如果我们选取该距离为Eps参数,而取k的值为MinPts参数,则​​k-距离​​小Eps的点将被标记为核心点,而其他点将被标记为噪声或边界点。

如果k的值太小,则少量邻近点的噪声或离群点将可能不正确地标一记为簇。如果k的值太大,则小簇(尺寸小于k的簇)可能会标记为噪声。



R语言实践



相关函数:

library(fpc)
db = dbscan(data, eps, MinPts)
plotcluster(data, db$cluster)



举报

相关推荐

0 条评论