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)#

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

更多信息请参阅 用户指南

Parameters:
X{array-like, 稀疏(CSR)矩阵} 形状为 (n_samples, n_features) 或 (n_samples, n_samples)

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

epsfloat, 默认=0.5

两个样本之间的最大距离,其中一个样本被认为是另一个样本的邻域。这不是集群内点之间距离的最大界限。这是为您的数据集和距离函数选择适当的最重要DBSCAN参数。

min_samplesint, 默认=5

邻域中点的样本数(或总权重),以便将点视为核心点。这包括点本身。

metricstr 或 callable, 默认=’minkowski’

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

metric_paramsdict, 默认=None

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

Added in version 0.19.

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

由 NearestNeighbors 模块用于计算点对距离和寻找最近邻居的算法。有关详细信息,请参阅 NearestNeighbors 模块文档。

leaf_sizeint, 默认=30

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

pfloat, 默认=2

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

sample_weightarray-like 形状为 (n_samples,), 默认=None

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

n_jobsint, 默认=None

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

Returns:
core_samplesndarray 形状为 (n_core_samples,)

核心样本的索引。

labelsndarray 形状为 (n_samples,)

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

See also

DBSCAN

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

OPTICS

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

Notes

有关示例,请参阅 examples/cluster/plot_dbscan.py

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

避免查询复杂性的一种方法是使用 mode='distance' 预先计算块中的稀疏邻域,然后使用 metric='precomputed' 在这里。

另一种减少内存和计算时间的方法是删除(近)重复点并使用 sample_weight 代替。

OPTICS 提供了类似的聚类,内存使用更低。

References

Ester, M., H. P. Kriegel, J. Sander, and X. Xu, “A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise” . In: Proceedings of the 2nd International Conference on Knowledge Discovery and Data Mining, Portland, OR, AAAI Press, pp. 226-231. 1996

Schubert, E., Sander, J., Ester, M., Kriegel, H. P., & Xu, X. (2017). “DBSCAN revisited, revisited: why and how you should (still) use DBSCAN.” ACM Transactions on Database Systems (TODS), 42(3), 19.

Examples

>>> 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])