dbscan#

sklearn.cluster.dbscan(X, eps=0.5, *, min_samples=5, metric='minkowski', metric_params=None, algorithm='auto', leaf_size=30, p=2, sample_weight=None, n_jobs=None)[source]#

从向量数组或距离矩阵执行 DBSCAN 聚类。

用户指南中阅读更多。

参数:
X{类数组, 稀疏 (CSR) 矩阵} 形状为 (n_samples, n_features) 或 (n_samples, n_samples)

一个特征数组,如果 metric='precomputed',则为样本之间的距离数组。

eps浮点数, 默认值=0.5

两个样本之间的最大距离,使得一个样本被视为另一个样本的邻域内。这并不是聚类中点之间距离的最大上限。这是为您的数据集和距离函数选择最合适的 DBSCAN 参数。

min_samples整数, 默认值=5

一个邻域中样本(或总权重)的数量,使得该点被视为核心点。这包括点本身。

metric字符串或可调用对象, 默认值='minkowski'

在计算特征数组中实例之间的距离时使用的度量。如果度量是字符串或可调用对象,则它必须是 sklearn.metrics.pairwise_distances 的 `metric` 参数允许的选项之一。如果 `metric` 是“precomputed”,则假定 X 是一个距离矩阵,并且在拟合期间必须是方阵。X 可以是稀疏图,在这种情况下,只有“非零”元素才可能被视为邻居。

metric_params字典, 默认值=None

度量函数的额外关键字参数。

在 0.19 版中新增。

algorithm{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, 默认值='auto'

NearestNeighbors 模块用于计算点间距离和查找最近邻的算法。详细信息请参阅 NearestNeighbors 模块文档。

leaf_size整数, 默认值=30

传递给 BallTree 或 cKDTree 的叶子大小。这会影响构造和查询的速度,以及存储树所需的内存。最佳值取决于问题的性质。

p浮点数, 默认值=2

用于计算点之间距离的 Minkowski 度量的幂。

sample_weight类数组,形状为 (n_samples,), 默认值=None

每个样本的权重,使得权重至少为 min_samples 的样本本身就是一个核心样本;权重为负的样本可能会阻止其 eps-邻居成为核心样本。请注意,权重是绝对值,默认值为 1。

n_jobs整数, 默认值=None

用于邻居搜索的并行作业数量。None 表示 1,除非在 joblib.parallel_backend 上下文中。-1 表示使用所有处理器。有关详细信息,请参阅术语表。如果使用预计算距离,则并行执行不可用,因此 `n_jobs` 将不起作用。

返回:
core_samplesndarray 形状为 (n_core_samples,)

核心样本的索引。

labelsndarray 形状为 (n_samples,)

每个点的聚类标签。噪声样本的标签为 -1。

另请参阅

DBSCAN

此聚类算法的估计器接口。

OPTICS

一个类似的估计器接口,在多个 eps 值上进行聚类。我们的实现针对内存使用进行了优化。

备注

有关示例,请参阅DBSCAN 聚类算法演示

此实现批量计算所有邻域查询,这将内存复杂度增加到 O(n.d),其中 d 是平均邻居数量,而原始 DBSCAN 的内存复杂度为 O(n)。根据 algorithm 的不同,查询这些最近邻域时可能会导致更高的内存复杂度。

避免查询复杂性的一种方法是使用 NearestNeighbors.radius_neighbors_graph 并在 mode='distance' 模式下分块预计算稀疏邻域,然后在此处使用 metric='precomputed'

另一种减少内存和计算时间的方法是移除(接近)重复点,并改用 sample_weight

OPTICS 提供了一种类似的聚类方法,且内存使用量更低。

参考文献

Ester, M., H. P. Kriegel, J. Sander, and X. Xu,《一种用于发现大型空间数据库中带噪声聚类的基于密度的算法》。收录于:第二届知识发现与数据挖掘国际会议论文集,波特兰,俄勒冈州,AAAI 出版社,页 226-231。1996

Schubert, E., Sander, J., Ester, M., Kriegel, H. P., & Xu, X. (2017). 《DBSCAN 再探究:为什么以及如何(仍然)使用 DBSCAN》。ACM Transactions on Database Systems (TODS), 42(3), 19。

示例

>>> from sklearn.cluster import dbscan
>>> X = [[1, 2], [2, 2], [2, 3], [8, 7], [8, 8], [25, 80]]
>>> core_samples, labels = dbscan(X, eps=3, min_samples=2)
>>> core_samples
array([0, 1, 2, 3, 4])
>>> labels
array([ 0,  0,  0,  1,  1, -1])