DBSCAN#

class sklearn.cluster.DBSCAN(eps=0.5, *, min_samples=5, metric='euclidean', metric_params=None, algorithm='auto', leaf_size=30, p=None, n_jobs=None)[源代码]#

根据向量数组或距离矩阵执行DBSCAN集群。

DBSCAN -具有噪音的应用程序的基于密度的空间集群。找到高密度的核心样本并从中扩展集群。适合包含相似密度集群的数据。

此实现的最坏情况内存复杂性为 \(O({n}^2)\) ,当 eps 参数很大, min_samples 较低,而原来的DBSCAN仅使用线性存储器。有关更多详细信息,请参阅下面的注释。

阅读更多的 User Guide .

参数:
eps浮点数,默认值=0.5

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

min_samplesint,默认=5

要被视为核心点的点的邻近区域中的样本数量(或总权重)。这包括要点本身。如果 min_samples 设置为较高的值时,DBSCAN将查找更密集的聚类,而如果设置为较低的值,则查找到的聚类将更稀疏。

metric字符串,或可调用,默认='欧几里德'

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

Added in version 0.17: 度量 precomputed 接受预先计算的稀疏矩阵。

metric_paramsdict,默认=无

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

Added in version 0.19.

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

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

leaf_sizeint,默认=30

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

pfloat,默认=无

用于计算点之间距离的Minkowski度量的功率。如果没有,那么 p=2 (相当于欧几里得距离)。

n_jobsint,默认=无

要运行的并行作业数。 None 意思是1,除非在a中 joblib.parallel_backend 上下文 -1 意味着使用所有处理器。看到 Glossary 了解更多详细信息。

属性:
core_sample_indices_形状的nd数组(n_core_samples,)

核心样本指数。

components_形状的nd数组(n_core_samples,n_features)

通过训练找到的每个核心样本的副本。

labels_形状的nd数组(n_samples)

Cluster labels for each point in the dataset given to fit(). Noisy samples are given the label -1.

n_features_in_int

期间看到的功能数量 fit .

Added in version 0.24.

feature_names_in_ :nd形状数组 (n_features_in_ ,)nd数组形状(

Names of features seen during fit. Defined only when X has feature names that are all strings.

Added in version 1.0.

参见

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
>>> import numpy as np
>>> X = np.array([[1, 2], [2, 2], [2, 3],
...               [8, 7], [8, 8], [25, 80]])
>>> clustering = DBSCAN(eps=3, min_samples=2).fit(X)
>>> clustering.labels_
array([ 0,  0,  0,  1,  1, -1])
>>> clustering
DBSCAN(eps=3, min_samples=2)
fit(X, y=None, sample_weight=None)[源代码]#

从特征或距离矩阵执行DBSCAN聚类。

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

训练实例进行集群,或实例之间的距离,如果 metric='precomputed' .如果提供了稀疏矩阵,则会将其转换为稀疏矩阵 csr_matrix .

y忽视

未使用,此处列出是为了按照惯例实现API一致性。

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

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

返回:
self对象

返回适合的自我实例。

fit_predict(X, y=None, sample_weight=None)[源代码]#

从数据或距离矩阵计算聚类并预测标签。

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

训练实例进行集群,或实例之间的距离,如果 metric='precomputed' .如果提供了稀疏矩阵,则会将其转换为稀疏矩阵 csr_matrix .

y忽视

未使用,此处列出是为了按照惯例实现API一致性。

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

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

返回:
labels形状的nd数组(n_samples,)

集群标签。有噪音的样本标有-1。

get_metadata_routing()[源代码]#

获取此对象的元数据路由。

请检查 User Guide 关于路由机制如何工作。

返回:
routingMetadataRequest

A MetadataRequest 封装路由信息。

get_params(deep=True)[源代码]#

获取此估计器的参数。

参数:
deep布尔,默认=True

如果为True,将返回此估计量和包含的作为估计量的子对象的参数。

返回:
paramsdict

参数名称映射到其值。

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') DBSCAN[源代码]#

请求元数据传递给 fit

请注意,此方法仅适用于以下情况 enable_metadata_routing=True (见 sklearn.set_config ).请参阅 User Guide 关于路由机制如何工作。

The options for each parameter are:

  • True :元数据被请求并传递给 fit 如果提供的话。如果未提供元数据,则会忽略请求。

  • False :未请求元数据,元估计器不会将其传递给 fit .

  • None :不请求元数据,如果用户提供元估计器,则元估计器将引发错误。

  • str :元数据应通过此给定别名而不是原始名称传递给元估计器。

默认 (sklearn.utils.metadata_routing.UNCHANGED )保留现有请求。这允许您更改某些参数的请求,而不是其他参数。

Added in version 1.3.

备注

只有当该估计器用作元估计器的子估计器时,该方法才相关,例如在 Pipeline .否则就没有效果了。

参数:
sample_weight字符串、真、假或无, 默认=sklearn.utils. metalics_Routing.UNChanged

元数据路由 sample_weight 参数 fit .

返回:
self对象

更新的对象。

set_params(**params)[源代码]#

设置此估计器的参数。

该方法适用于简单估计器以及嵌套对象(例如 Pipeline ).后者具有以下形式的参数 <component>__<parameter> 以便可以更新嵌套对象的每个组件。

参数:
**paramsdict

估计参数。

返回:
self估计器实例

估计实例。