DBSCAN (Density-Based Spatial Clustering of Applications with Noise)
探索用于基于密度的聚类和异常检测的 DBSCAN。学习它如何配合 Ultralytics YOLO26 识别数据集中的任意形状和噪声。
DBSCAN(基于密度的带噪声空间聚类应用)是一种强大的无监督学习算法,用于根据密度识别数据中的不同群组。与假设球形聚类或需要预定群组数量的传统聚类方法不同,DBSCAN 可以定位由低密度区域分隔的高密度区域。这种能力使其能够发现任意形状和大小的聚类,因此在分析底层结构未知的复杂真实世界数据集时异常有效。该算法的一个关键优势是其内置的异常检测功能,它会自动将低密度区域中的点分类为噪声,而不是强行将它们归入某个聚类。
核心概念与参数#
该算法通过在每个数据点周围定义一个邻域并计算该邻域内落入了多少其他点来运行。两个主要的超参数控制着这个过程,需要进行仔细的超参数调整以匹配数据的特定特征:
- Epsilon (eps): 此参数指定搜索邻居的点周围的最大半径。它定义了“可达性”距离。
- 最小点数 (minPts): 这设定了在 Epsilon 半径内形成密集区域或“核心”所需的最小数据点数量。
基于这些参数,DBSCAN 将数据集中的每个点归类为以下三种类型之一:
-
**核心点:**在
eps半径内拥有至少minPts个邻居的点。这些点构成了聚类的内部。 -
**边界点:**在核心点的
eps半径内,但自身邻居数量少于minPts的点。这些点构成了聚类的边缘。 -
**噪声点:**既不是核心点也不是边界点的点。这些点实际上被视为异常值,这对于异常值检测等任务非常有用。
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) 中提取的高维特征。这种混合方法允许根据语义相似性而不是单纯的像素位置来对复杂的图像数据进行聚类。这在标记的训练数据稀缺的无监督学习场景中特别有用,可帮助研究人员高效地组织庞大的未标记图像库。






