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 聚类。

此函数是 DBSCAN 的封装,适用于快速、独立的聚类任务。对于需要估计器属性或流水线集成的基于估计器的工作流程,请优先使用 DBSCAN

DBSCAN(基于密度的空间聚类应用与噪声)是一种基于密度的聚类算法,它将紧密聚集在一起的点归为一类,同时将低密度区域的点标记为异常值。

用户指南 中阅读更多内容。

参数:
X{array-like, scipy sparse matrix} of shape (n_samples, n_features) or (n_samples, n_samples)

一个特征数组,或者如果 metric='precomputed',则是样本之间的距离数组。使用预计算距离时,X 必须是一个方阵且对称。

epsfloat, default=0.5

两个样本之间被视为彼此邻域内的最大距离。这不是集群内点之间距离的最大界限。这是为您的数据集和距离函数适当选择的最重要的 DBSCAN 参数。较小的值会产生更多的集群,而较大的值会产生较少、较大的集群。

min_samplesint, default=5

邻域内样本数量(或总权重),使得一个点被认为是核心点。这包括点本身。较高的值会产生较少、密度更大的集群,而较低的值会产生更多、更稀疏的集群。

metricstr or callable, default=’minkowski’

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

metric_paramsdict, default=None

度量函数的附加关键字参数。

Added in version 0.19.

algorithm{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, default=’auto’

NearestNeighbors 模块用于计算逐点距离和查找最近邻居的算法。'auto' 将尝试根据传递给 fit 方法的值来决定最合适的算法。有关详细信息,请参阅 NearestNeighbors 文档。

leaf_sizeint, default=30

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

pfloat, default=2

Minkowski 度量的幂参数。当 p = 1 时,这相当于使用 manhattan_distance (l1),而 p = 2 时使用 euclidean_distance (l2)。对于任意 p,使用 minkowski_distance (l_p)。此参数预期为正数。

sample_weightshape 为 (n_samples,) 的 array-like, default=None

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

n_jobsint, default=None

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

返回:
core_samplesndarray of shape (n_core_samples,)

核心样本的索引。

labelsndarray of shape (n_samples,)

每个点的集群标签。噪声样本被赋予标签 -1。非负整数表示集群成员身份。

另请参阅

DBSCAN

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

OPTICS

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

注意事项

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

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

避免查询复杂性的一种方法是使用 NearestNeighbors.radius_neighbors_graphmode='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.

示例

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