DBSCAN聚类算法的原理与实现步骤
字数 1411 2025-10-28 08:36:45
DBSCAN聚类算法的原理与实现步骤
题目描述
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,能够发现任意形状的簇,并有效识别噪声点。与K-means不同,DBSCAN无需预设簇数量,而是通过数据分布的紧密程度划分簇。假设某数据集包含分布不均匀的样本点,其中部分区域密度高(簇核心),部分区域密度低(边界或噪声),要求使用DBSCAN将数据划分为簇,并解释其过程。
解题过程
1. 核心概念定义
DBSCAN通过两个参数控制聚类效果:
- ε(eps):邻域半径,定义点的邻域范围。
- MinPts:最小点数,表示在ε邻域内需包含的最少点数。
基于这两个参数,点被分为三类:
- 核心点(Core Point):在ε邻域内至少包含MinPts个点(包括自身)。
- 边界点(Border Point):自身非核心点,但落在某个核心点的ε邻域内。
- 噪声点(Noise Point):既非核心点也非边界点的点。
2. 邻域与密度直达
- 点A的ε邻域是以A为中心、半径为ε的圆形区域内的所有点。
- 若点B在点A的ε邻域内,且A是核心点,则称B从A密度直达。密度直达关系具有方向性(仅核心点能密度直达其他点)。
3. 密度可达与密度相连
- 密度可达:若存在点链A→P₁→P₂→...→B,其中每个点均从前者密度直达,则A密度可达B(传递性)。
- 密度相连:若存在点C,使得A和B均从C密度可达,则A和B密度相连(对称性)。
- 簇的定义:由密度相连关系的最大点集构成,簇内至少包含一个核心点。
4. 算法步骤
步骤1:初始化
- 标记所有点为未访问(unvisited)。
- 初始化簇编号
cluster_id = 0。
步骤2:遍历点并判断核心点
- 随机选择一个未访问点P,计算其ε邻域内的点数。
- 若点数 < MinPts,标记P为噪声点(后续可能被重新分类为边界点)。
- 若点数 ≥ MinPts,将P标记为核心点,并创建一个新簇(
cluster_id增加),将P加入该簇。
步骤3:扩展簇
- 遍历P的ε邻域内所有点,若某点Q未访问,则递归检查其是否为核心点:
- 若Q是核心点,将其邻域内所有点加入当前簇(避免重复访问)。
- 若Q是噪声点,将其重新标记为边界点并加入当前簇。
- 重复此过程直到P的密度可达点全部被处理。
步骤4:终止条件
- 重复步骤2-3,直到所有点被访问。
- 最终未被归入任何簇的点为噪声点。
5. 实例演示
假设数据集为二维点:A(1,1), B(1,2), C(2,2), D(8,8), E(9,9),参数ε=1.5, MinPts=3。
- A的邻域包含{A,B,C}(3个点≥MinPts),故A为核心点,创建簇C1。
- 扩展A的邻域:B和C均未访问,B的邻域为{A,B,C}(核心点),C的邻域为{A,B,C}(核心点),全部加入C1。
- D的邻域为{D,E}(2点<MinPts),标记为噪声;E的邻域为{D,E},同样标记为噪声。
- 结果:簇C1={A,B,C},噪声点{D,E}。
6. 参数选择与特点
- ε可通过k距离图( sorted k-NN距离的拐点)选择,MinPts常取维度+1。
- 优点:无需预设簇数、抗噪声、适应任意形状。
- 缺点:对密度差异大的簇效果差,高维数据距离计算不稳定。