YOLO Vision 2026:
返回 Ultralytics 术语表

DBSCAN (Density-Based Spatial Clustering of Applications with Noise)

探索用于基于密度的聚类和异常检测的 DBSCAN。了解它如何与 Ultralytics YOLO26 一起识别数据集中的任意形状和噪声。

DBSCAN(带噪声的基于密度的应用空间聚类)是一种强大的无监督学习算法,可根据数据密度识别数据中的不同群组。与假设簇呈球形或要求预先指定群组数量的传统聚类方法不同,DBSCAN 会定位由低密度区域分隔的高密度区域。该能力使其能够发现形状和大小任意的簇,因此在分析底层结构未知的复杂真实世界数据集时特别有效。该算法的一项关键优势是内置的异常检测功能,因为它会自动将低密度区域中的点分类为噪声,而不是强行将其归入某个簇。

核心概念和参数#

该算法通过围绕每个数据点定义一个邻域,并统计落在该邻域内的其他点的数量来运行。两个主要超参数控制着这一过程,需要进行仔细的超参数调优,以匹配数据的具体特征:

  • Epsilon(eps): 此参数指定围绕某个点搜索邻居的最大半径,定义了“可达”距离。
  • 最小点数(minPts): 此参数设置在 Epsilon 半径内形成密集区域或“核心”所需的数据点最小数量。

根据这些参数,DBSCAN 会将数据集中的每个点分为以下三种类型之一:

  1. 核心点:eps 半径内至少有 minPts 个邻居的点。这些点构成簇的内部区域。

  2. 边界点: 位于核心点的 eps 半径内,但自身拥有的邻居少于 minPts 个的点。这些点构成簇的边缘。

  3. 噪声点: 既不是核心点也不是边界点的点。这些点会被视为离群点,这对于离群点检测等任务很有用。

DBSCAN 与 K-Means 聚类#

虽然二者都是机器学习(ML)的基础方法,但在特定场景下,DBSCAN 相较于K-Means 聚类具有明显优势。K-Means 依赖质心和欧几里得距离,通常假设簇是凸形或球形的。这可能导致其在处理细长形或月牙形数据时表现不佳。相比之下,DBSCAN 的基于密度的方法能够沿着数据分布的自然轮廓进行聚类。

另一个显著差异在于初始化。K-Means 要求用户预先指定簇的数量(k),但在缺乏先验知识时这可能很困难。DBSCAN 则会根据数据密度自然推断簇的数量。此外,K-Means 对离群点很敏感,因为它会强制将每个点归入某个群组,从而可能使簇中心发生偏移。DBSCAN 将点标记为噪声的能力可以防止数据异常污染有效簇,从而为预测建模等下游任务提供更干净的结果。

实际应用#

DBSCAN 广泛应用于需要空间分析和稳健噪声处理的行业。

  • 地理空间分析: 在城市规划和物流领域,分析师使用 DBSCAN 对配送车队或网约车服务产生的 GPS 坐标进行分组。通过识别高密度的配送区域,公司可以优化路线规划和仓库选址。例如,物流领域的 AI通常涉及对配送停靠点进行聚类,以提高效率。
  • 基于视觉的异常检测: 在制造业中,由YOLO26等模型驱动的视觉检测系统可能会检测到表面缺陷。DBSCAN 可以对产品图上的这些缺陷坐标进行聚类。孤立的检测结果可能会被视为传感器噪声而忽略,而密集的簇则表明存在系统性的制造缺陷,并触发质量检测警报。

代码示例:对检测结果质心进行聚类#

在计算机视觉工作流中,开发者通常使用Ultralytics Platform训练目标检测器,然后对结果进行后处理。下面的示例演示了如何使用 sklearn 库对检测到的对象质心进行聚类。这有助于将空间上相关的检测结果分组,从而可能合并属于同一对象的多个边界框,或识别对象群组。

import numpy as np
from sklearn.cluster import DBSCAN

# Simulated centroids of objects detected by YOLO26
# [x, y] coordinates representing object locations
centroids = np.array(
    [
        [100, 100],
        [102, 104],
        [101, 102],  # Cluster 1 (Dense group)
        [200, 200],
        [205, 202],  # Cluster 2 (Another group)
        [500, 500],  # Noise (Outlier)
    ]
)

# Initialize DBSCAN with a radius (eps) of 10 and min_samples of 2
# This groups points close to each other
clustering = DBSCAN(eps=10, min_samples=2).fit(centroids)

# Labels: 0, 1 are cluster IDs; -1 represents noise
print(f"Cluster Labels: {clustering.labels_}")
# Output: [ 0  0  0  1  1 -1]

与深度学习集成#

虽然 DBSCAN 是一种经典算法,但它可以与现代深度学习有效结合。例如,在应用 DBSCAN 之前,可以使用 PCA 或 t-SNE 等降维技术,降低从卷积神经网络(CNN)中提取的高维特征。这种混合方法能够根据语义相似性而不仅仅是像素位置,对复杂图像数据进行聚类。这在无监督学习场景中特别有用,因为此时标注的训练数据较为稀缺,可以帮助研究人员高效整理大量未标注图像档案。

Explore solutions

让我们共同构建 AI 的未来!

开启你的机器学习未来之旅