sklearn.cluster.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-基于密度的带噪声应用空间聚类。发现高密度的核心样本并从中膨胀团簇。对于包含类似密度的簇的数据来说是很好的。
在用户指南中阅读更多内容。
参数 | 说明 |
---|---|
eps | float, default=0.5 输入数据。两个样本之间的最大距离,其中一个被视为另一个样本的邻域内。这并不是一个簇内点之间距离的最大界限。。这是为数据集和距离函数适当选择的最重要的dbscan参数。 |
min_samples | int, default=5 一个点被视为核心点的邻域内的样本数(或总权重)。这包括要该点本身 |
metric | string, or callable, default=’euclidean’ 在计算特征数组中实例之间的距离时使用的度量。如果度量是字符串或可调用的,则它必须是 sklearn.metrics.pairwise_distances 为其度量参数所允许的选项之一。如果度量是“precomputed”,则假定X是距离矩阵,并且必须是平方的。X可能是Glossary,在这种情况下,只有“非零”元素可以被视为DBSCAN的邻居。新版本0.17中:度量预计算以接受预先计算的稀疏矩阵。 |
metric_params | dict, default=None 度量函数的附加关键字参数 新版本0.19中 |
algorithm | {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, default=’auto’ NearestNeighbors模块用于计算点态距离和寻找最近邻的算法。有关详细信息,请参阅NearestNeighbors模块文档。 |
p | float, default=None 用于计算点间距离的Minkowski度量的幂。 |
n_jobs | int, default=None 要运行的并行数。 None 意味1, 除非在joblib.parallel_backend 环境中。-1 指使用所有处理器。有关详细信息,请参Glossary。 |
属性 | 说明 |
---|---|
core_sample_indices_ | ndarray of shape (n_core_samples,) 核心样本的索引。 |
components_ | ndarray of shape (n_core_samples, n_features) 通过训练找到的每个核心样本的副本 |
labels_ | ndarray of shape (n_samples) 提供fit()的数据集中每个点的聚类标签。有噪声的样本被赋予标签-1。 |
另见:
在EPS的多个值上进行类似的聚类。我们的实现是为内存使用而优化的。
注
有关示例,请看examples/cluster/plot_dbscan.py.
此实现批量计算所有邻域查询,这会将内存复杂度增加到O(n.d),其中d是邻居的平均数量,而原始DBSCAN的内存复杂度为O(n)。根据algorithm
的不同,在查询这些最近的邻域时,它可能会吸引更高的内存复杂度。
避免查询复杂性的一种方法是使用 NearestNeighbors.radius_neighbors_graph
并设置 mode='distance'
,预先计算块中的稀疏邻域,然后在这里使用 metric='precomputed'
。
另一种减少内存和计算时间的方法是删除(接近)重复点,并且使用 sample_weight
代替。
参考
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
>>> 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 (self, X[, y, sample_weight]) |
从特征或距离矩阵执行DBSCAN聚类 |
fit_predict (self, X[, y, sample_weight]) |
从特征或距离矩阵执行DBSCAN聚类,并返回聚类标签。 |
get_params (self[, deep]) |
获取此估计器的参数 |
set_params (self, **params) |
设置此估计器的参数 |
__init__(self, eps=0.5, *, min_samples=5, metric='euclidean', metric_params=None, algorithm='auto', leaf_size=30, p=None, n_jobs=None)
初始化self。请参阅help(type(self))以获得准确的说明。
fit(self, X, y=None, sample_weight=None)
从特征或距离矩阵执行DBSCAN聚类。
参数 | 说明 |
---|---|
X | {array-like, sparse matrix} of shape (n_samples, n_features), or (n_samples, n_samples) 要聚类的训练实例,或实例之间的距离, 如果 metric='precomputed' 。如果提供稀疏矩阵,则将其转换为稀疏csr_matrix 。 |
sample_weight | array-like of shape (n_samples,), default=None 每个样本的权重,例如一个权重至少为 min_samples 的样本本身就是一个核心样本;一个负权重的样本可能会抑制它的EPS-邻居成为核心。注意,权重是绝对的,默认为1。 |
y | Ignored 未使用,在此按约定呈现为API一致性。 |
返回值 | 说明 |
---|---|
self | - |
fit_predict(self, X, y=None, sample_weight=None)
从特征或距离矩阵执行DBSCAN聚类,并返回聚类标签。
参数 | 说明 |
---|---|
X | {array-like, sparse matrix} of shape (n_samples, n_features), or (n_samples, n_samples) 要聚类的训练实例,或实例之间的距离, 如果 metric='precomputed' 。如果提供稀疏矩阵,则将其转换为稀疏csr_matrix 。 |
sample_weight | array-like of shape (n_samples,), default=None 每个样本的权重,例如一个权重至少为 min_samples 的样本本身就是一个核心样本;一个负权重的样本可能会抑制它的EPS-邻居成为核心。注意,权重是绝对的,默认为1。 |
y | Ignored 未使用,在此按约定呈现为API一致性。 |
返回值 | 说明 |
---|---|
labels | ndarray, shape (n_samples,) 聚类标签。有噪音的样本被标为-1。 |
get_params(self, deep=True)
获取此估计器的参数
表格 | 说明 |
---|---|
deep | bool, default=True 如果为True,则将返回此估计器的参数和所包含的作为估计量的子对象。 |
返回值 | 说明 |
---|---|
params | mapping of string to any 映射到其值的参数名称 |
set_params(self, **params)
设置此估计器的参数
该方法适用于简单估计器以及嵌套对象(例如pipelines)。后者具有表单的 <component>__<parameter>
参数,这样就可以更新嵌套对象的每个组件。
表格 | 说明 |
---|---|
**params | dict 估计器参数 |
返回值 | 说明书 |
---|---|
self | object 估计器实例 |