DBScan (具有噪声的应用程序的基于密度的空间聚类) 是一种非线性、无监督的聚类算法,它能够识别密集堆积的数据点组(聚类),而无需预先指定聚类的数量。与 k-means 等算法不同,DBScan 能够发现任意形状的聚类,并区分数据集中的噪声或离群点。
DBSCAN 是如何工作的?
- 选择参数 INLINECODE05ca7f75(邻域半径)和 INLINECODE4856e56b(形成密集区域的最小点数)。
- 选择一个未访问的点,并查找
eps半径内的所有邻点。 - 如果邻点的数量至少达到
MinPts,则将其归类为核心点并开始一个新的聚类。 - 通过包含连接到核心点的所有密度可达点来扩展聚类。
- 对所有未访问的点重复该过程,直到每个点都被分配到聚类或被标记为噪声。
!imageDBScan 聚类
该图展示了 DBSCAN 聚类,其中核心点在 1 单位半径内具有 ≥ 4 个邻居,边界点靠近核心点但密度不够,而噪声点位于任何密集区域之外。
在 R 中实现 DBScan 聚类
我们在 R 中实现 DBScan 聚类算法,用于在 无监督学习 设置中识别非线性聚类并检测噪声。
1. 安装和加载必需的包
我们安装并加载 fpc 包,该包提供了 DBScan 功能。
- install.packages: 用于安装外部包。
- library: 用于将已安装的包加载到会话中。
R
CODEBLOCK_27796283
2. 加载和查看数据集
我们加载并查看内置的 Iris(鸢尾花)数据集,以了解其结构。
- data: 用于加载内置数据集。
- str: 用于查看数据集的结构。
R
CODEBLOCK_d3f147bd
输出:
!datasetOutput
3. 准备用于聚类的数据
我们移除标签列,为无监督聚类准备数据集。
- [-5]: 用于从数据集中排除第五列(Species)。
R
CODEBLOCK_bf664b6a
4. 拟合 DBScan 模型
我们在准备好的数据集上拟合 DBScan 聚类模型,并指定参数。
- set.seed: 用于固定随机初始化以保证结果可复现。
- dbscan: 用于应用 DBScan 聚类算法。
- eps: 定义邻域的半径。
- MinPts: 定义形成聚类的邻域中最小点数。
R
CODEBLOCK_08815320
输出:
!dbscanOutput
5. 检查聚类分配
我们提取聚类分配结果,并将其与原始物种进行比较以进行评估。
- $cluster: 用于访问聚类标签。
- table: 用于将实际物种与聚类分配进行比较。
R
CODEBLOCK_d3326d2b
输出:
!dataOutput
6. 绘制聚类图
我们对聚类进行可视化,以理解 DBScan 形成的空间分组。
- plot: 用于在 2D 空间中绘制聚类数据。
R
CODEBLOCK_390341b3
输出:
输出显示了 DBSCAN 聚类结果的 2D 散点图,其中点根据聚类标签着色,噪声点被单独标记,这有助于直观地了解 Iris 数据集中的空间分组情况。