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集群。

阅读更多的 User Guide .

参数:
X形状(n_样本,n_特征)的{类阵列、稀疏(CSR)矩阵}或 (n_samples,n_samples)

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

eps浮点数,默认值=0.5

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

min_samplesint,默认=5

要被视为核心点的点的邻近区域中的样本数量(或总权重)。这包括要点本身。

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

计算要素数组中实例之间的距离时使用的指标。如果指标是字符串或可调用,则它必须是允许的选项之一 sklearn.metrics.pairwise_distances 其指标参数。如果“预先计算”指标,则假设X是距离矩阵,并且在匹配期间必须为平方。X可以是 sparse graph ,在这种情况下,只有“非零”元素可以被视为邻居。

metric_paramsdict,默认=无

指标函数的附加关键字参数。

Added in version 0.19.

algorithm'自动',' ball_tree ',',',默认='自动'

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

leaf_sizeint,默认=30

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

pfloat,默认=2

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

sample_weight形状类似数组(n_samples,),默认=无

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

n_jobsint,默认=无

为邻居搜索运行的并行作业数。 None 意思是1,除非在a中 joblib.parallel_backend 上下文 -1 意味着使用所有处理器。看到 Glossary 了解更多详细信息。如果使用预先计算的距离,则并行执行不可用,因此n_jobs将没有影响。

返回:
core_samples形状的nd数组(n_core_samples,)

核心样本指数。

labels形状的nd数组(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 提供了一个类似的集群,但内存使用量较低。

引用

埃斯特,M.,H. P. Kriegel、J. Sander和X.徐, "A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise" .载于:第二届知识发现和数据挖掘国际会议论文集,俄勒冈州波特兰,AAAI出版社,pp。226-231. 1996

舒伯特,E.,桑德,J.,埃斯特,M.,克里格尔,H. P.,& Xu,X.(2017)。 "DBSCAN revisited, revisited: why and how you should (still) use DBSCAN." ACC数据库系统交易(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])