原理
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,适用于发现具有不同密度的点集的聚类。它不需要预先指定聚类的数量,并且能够识别出噪声点(不属于任何聚类)。
原理:
- 核心点(Core Point): 对于每个数据点,根据给定的参数 eps(邻域半径)和 MinPts(最小点数),判断其周围是否有足够数量的邻居点。如果周围邻居点的数量大于等于 MinPts,则将该点标记为核心点。
- 边界点(Border Point): 如果一个点的邻域内的点的数量小于 MinPts,但它位于某个核心点的邻域内,那么它被标记为边界点。
- 噪声点(Noise Point): 如果一个点既不是核心点也不是边界点,即它周围的邻居点数量不足以形成一个簇,并且它也不在任何核心点的邻域内,那么它被标记为噪声点。
- 聚类扩展: 从任意未被访问的核心点开始,以及其可达的点(核心点、边界点),将它们标记为一个新的聚类。这个过程一直持续到所有的核心点和边界点都被访问。
算法步骤:
- 初始化:将所有点标记为未访问状态。
- 对每个点进行检查:
○ 如果点已被访问,则跳过。
○ 如果点是核心点,以其为起点开始扩展聚类。
○ 如果点是噪声点,标记为已访问。 - 聚类扩展(expandCluster):
○ 从核心点开始,通过邻居点进行扩展。将可达的核心点和边界点标记为同一个聚类,直到所有可达点都被访问。 - 标记噪声点:
○ 将未被访问的噪声点标记为已访问。
DBSCAN 核心思想是基于密度的聚类,通过寻找密度相连的点来划分簇。它能够识别出具有不同密度的簇,并且对噪声点有一定的鲁棒性。但是,它对于高维数据和不规则形状的聚类效果可能有所不足。
代码
#include <iostream>
#inc