一、DBSCAN 简介
基于密度的噪声应用空间聚类 (DBSCAN) 可识别数据中任意形状的聚类和噪声(异常值)。 Statistics and Machine Learning Toolbox™ 函数 dbscan 对输入数据矩阵或观测值之间的成对距离执行聚类。 dbscan 返回簇索引和一个向量,该向量指示作为核心点的观察值(簇内的点)。与 k-means 聚类不同,DBSCAN 算法不需要事先知道聚类的数量,而且聚类不一定是球形的。 DBSCAN 对于基于密度的异常值检测也很有用,因为它可以识别不属于任何聚类的点。
对于要分配给集群的点,它必须满足其 epsilon 邻域 (epsilon) 至少包含最小数量的邻居 (minpts) 的条件。或者,该点可以位于满足 epsilon 和 minpts 条件的另一个点的 epsilon 邻域内。 DBSCAN 算法识别三种点:
核心点 — 集群中的一个点,其 epsilon 邻域中至少有 minpts 个邻居
边界点 - 集群中在其 epsilon 邻域中具有少于 minpts 个邻居的点
噪声点 - 不属于任何集群的异常值
DBSCAN 使用范围广泛的距离度量,您可以为您的特定应用程序定义自定义距离度量。距离度量的选择决定了邻域的形状。
二、算法描述
对于指定的 epsilon 邻域 epsilon 值和核心点所需的最小邻域 minpts 数,dbscan 函数按如下方式实现 DBSCAN:
1. 从输入数据集 X 中,选择第一个未标记的观测值 x1 作为当前点,并将第一个聚类标签 C 初始化为 1。
2. 找到当前点的 epsilon 邻域 epsilon 内的点集。这些点是邻居。
a. 如果邻居的数量小于 minpts,则将当前点标记为噪声点(或异常值)。转到第 4 步。
注意:如果噪声点稍后满足由 X 中其他点的 epsilon 和 minpts 设置的约束,则 dbscan 可以将噪声点重新分配给集群。重新分配点的过程发生在集群的边界点上。
b. 否则,将当前点标记为属于簇 C 的核心点。
3. 迭代每个邻居(新的当前点)并重复步骤 2,直到找不到可以标记为属于当前集群 C 的新邻居。
4. 选择 X 中下一个未标记的点作为当前点,并将簇计数增加 1。
5. 重复步骤 2-4,直到 X 中的所有点都被标记。
三、其他说明(https://blog.csdn.net/sangnanpo/article/details/104313641)
1. DBSCAN的主要优点有:
a. 不需要输入簇的数量
b. 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。
c. 可以在聚类的同时发现噪声点,对数据集中的噪声点不敏感。
d. 聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。
2. DBSCAN的主要缺点有:
a. 如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。
b. 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。
c. 需要调参数,调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。这一点在具体实现时即可发现。