探索DBSCAN用于基于密度的聚类和异常检测。了解它如何在数据集中识别任意形状和噪声,以及与Ultralytics YOLO26结合使用。
DBSCAN(基于密度的带噪声空间聚类)是一种强大的无监督学习算法,用于根据密度识别数据中的不同群组。与假设球形簇或需要预设群组数量的传统聚类方法不同,DBSCAN 定位由低密度区域分隔的高密度区域。这种能力使其能够发现任意形状和大小的簇,对于分析底层结构未知的复杂真实世界数据集非常有效。该算法的一个关键优势是其内置的异常检测功能,因为它会自动将低密度区域中的点分类为噪声,而不是强制它们归入某个簇。
该算法通过定义每个数据点周围的邻域并计算有多少其他点落入该邻域内来运行。两个主要的超参数控制着这一过程,需要仔细进行超参数调优以匹配数据的特定特征:
根据这些参数,DBSCAN 将数据集中的每个点分为以下三种类型之一:
minPts 个邻居在
eps 半径。这些点构成了簇的内部。
eps 核心点半径范围内的,但邻居数量少于 minPts 自身的邻居。这些点构成了簇的边缘。
尽管两者都是机器学习 (ML)的基础,DBSCAN 在特定场景下比K-Means 聚类具有明显优势。K-Means 依赖于质心和欧氏距离,通常假设簇是凸形或球形的。这可能导致其在处理细长或月牙形数据时表现不佳。相比之下,DBSCAN 基于密度的方法使其能够遵循数据分布的自然轮廓。
另一个显著区别在于初始化。K-Means 要求用户预先指定簇的数量 (k),这在缺乏先验知识的情况下可能具有挑战性。DBSCAN 则根据数据密度自然推断簇的数量。此外,K-Means 对异常值很敏感,因为它强制将每个点归入一个组,这可能会使簇中心发生偏移。DBSCAN 能够将点标记为噪声,从而防止数据异常污染有效簇,确保为预测建模等下游任务提供更清晰的结果。
DBSCAN 广泛应用于需要空间分析和鲁棒噪声处理的行业。
在计算机视觉工作流中,开发者通常使用
Ultralytics 平台 训练目标检测器,然后对结果进行后处理。以下示例演示了如何使用 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 是一种经典算法,但它能与现代深度学习有效结合。例如,从卷积神经网络 (CNN)中提取的高维特征,可以在应用 DBSCAN 之前使用 PCA 或 t-SNE 等降维技术进行降维。这种混合方法允许基于语义相似性而非仅仅像素位置对复杂图像数据进行聚类。这在标记训练数据稀缺的无监督学习场景中特别有用,有助于研究人员高效地组织大量的未标记图像。

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