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集群算法演示 .
该实现批量计算所有邻居查询,这将内存复杂性增加到O(n.d),其中d是邻居的平均数量,而原始DBSCAN的内存复杂性为O(n)。当查询这些最近的邻居时,它可能会吸引更高的内存复杂性,具体取决于
algorithm
.避免查询复杂性的一种方法是使用
NearestNeighbors.radius_neighbors_graph
与mode='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])