HDBSCAN#

class sklearn.cluster.HDBSCAN(min_cluster_size=5, min_samples=None, cluster_selection_epsilon=0.0, max_cluster_size=None, metric='euclidean', metric_params=None, alpha=1.0, algorithm='auto', leaf_size=40, n_jobs=None, cluster_selection_method='eom', allow_single_cluster=False, store_centers=None, copy=False)[source]#

使用基于层次密度的聚类算法对数据进行聚类。

HDBSCAN - 应用于噪声的基于层次密度的空间聚类。在不同的epsilon值上执行DBSCAN,并整合结果以找到在epsilon上具有最佳稳定性的聚类。这使得HDBSCAN能够找到不同密度的聚类(不像DBSCAN),并且对参数选择更加鲁棒。更多信息请参见用户指南

有关如何使用HDBSCAN以及与DBSCAN的比较示例,请参见绘图演示

版本1.3中添加。

参数:
min_cluster_sizeint, default=5

一个组中被认为是聚类的最小样本数;小于此大小的组合将被视为噪声。

min_samplesint, default=None

用于计算点x_p与其第k个最近邻之间距离的参数k。当为None时,默认为min_cluster_size

cluster_selection_epsilonfloat, default=0.0

距离阈值。低于此值的聚类将被合并。更多信息请参见[5]

max_cluster_sizeint, default=None

"eom"聚类选择算法返回的聚类大小限制。当max_cluster_size=None时,没有限制。如果cluster_selection_method="leaf",则无效。

metricstr or callable, default=’euclidean’

计算特征数组中实例之间距离时使用的度量。

  • 如果metric是字符串或可调用对象,它必须是pairwise_distances的metric参数允许的选项之一。

  • 如果metric是“precomputed”,则假设X是距离矩阵,并且必须是方阵。

metric_paramsdict, default=None

传递给距离度量的参数。

alphafloat, default=1.0

在稳健单链接中使用的距离缩放参数。更多信息请参见[3]

algorithm{“auto”, “brute”, “kd_tree”, “ball_tree”}, default=”auto”

计算核心距离时要使用的确切算法;默认情况下,它设置为"auto",如果可能,它尝试使用KDTree树,否则它使用BallTree树。"kd_tree""ball_tree"算法都使用NearestNeighbors估计器。

如果在fit期间传递的X是稀疏的,或者metric对于KDTreeBallTree都无效,那么它将使用"brute"算法。

leaf_sizeint, default=40

当使用KDTree或BallTree作为核心距离算法时,负责快速最近邻查询的树的叶子大小。大型数据集和小的leaf_size可能会导致过度内存使用。如果您内存不足,请考虑增加leaf_size参数。对于algorithm="brute"忽略。

n_jobsint, default=None

并行计算距离的作业数量。None 表示为 1,除非在 joblib.parallel_backend 上下文中。-1 表示使用所有处理器。更多详情请参见 术语表

cluster_selection_method{“eom”, “leaf”}, default=”eom”

从凝聚树中选择聚类的方法。HDBSCAN* 的标准方法是使用质量过剩 ("eom") 算法来查找最持久的聚类。或者,您可以选择树叶上的聚类——这提供了最细粒度和最均匀的聚类。

allow_single_clusterbool, default=False

默认情况下,HDBSCAN* 不会生成单个聚类,将其设置为 True 将覆盖此设置,并在您认为这对您的数据集是有效结果的情况下允许单个聚类结果。

store_centersstr, default=None

要计算和存储的聚类中心(如果存在)。选项包括:

  • None 不计算也不存储任何中心。

  • "centroid" 通过取其位置的加权平均值来计算中心。请注意,该算法使用欧几里得度量,并且不保证输出将是观察到的数据点。

  • "medoid" 通过获取拟合数据中最小化到聚类中所有其他点的距离的点来计算中心。这比“centroid”慢,因为它需要计算同一聚类中点之间额外的成对距离,但保证输出是观察到的数据点。“medoid”对于任意度量也定义明确,并且不依赖于欧几里得度量。

  • "both" 计算并存储两种形式的中心。

copybool, default=False

如果 copy=True,则每当进行会覆盖传递给 fit 的数据的就地修改时,都会先创建一个副本,保证原始数据不会更改。目前,仅当 metric="precomputed"、传递密集数组或 CSR 稀疏矩阵以及 algorithm="brute" 时才适用。

属性:
labels_ndarray of shape (n_samples,)

给定 fit 的数据集中的每个点的聚类标签。异常值的标签如下:

  • 噪声样本的标签为 -1。

  • 具有无限元素 (+/- np.inf) 的样本的标签为 -2。

  • 即使具有无限元素,具有缺失数据的样本的标签也为 -3。

probabilities_ndarray of shape (n_samples,)

每个样本作为其分配聚类成员的强度。

  • 聚类样本的概率与其作为聚类一部分的持久程度成正比。

  • 噪声样本的概率为零。

  • 具有无限元素 (+/- np.inf) 的样本的概率为 0。

  • 具有缺失数据的样本的概率为 np.nan

n_features_in_int

fit 期间看到的特征数量。

feature_names_in_ndarray of shape (n_features_in_,)

fit 期间看到的特征名称。仅当 X 具有全部为字符串的特征名称时才定义。

centroids_ndarray of shape (n_clusters, n_features)

包含根据标准欧几里得度量计算的每个聚类的质心的集合。如果聚类本身是非凸的,则质心可能会落在其各自聚类的“外部”。

请注意,n_clusters 只计算非异常值聚类。也就是说,异常值聚类的 -1, -2, -3 标签被排除在外。

medoids_ndarray of shape (n_clusters, n_features)

包含根据传递给 metric 参数的度量计算的每个聚类的中心点的集合。中心点是原始聚类中最小化在所选度量下到该聚类中所有其他点的平均距离的点。这可以被认为是将基于 metric 的质心投影回聚类的结果。

请注意,n_clusters 只计算非异常值聚类。也就是说,异常值聚类的 -1, -2, -3 标签被排除在外。

另请参见

DBSCAN

基于密度的应用空间聚类与噪声。

OPTICS

排序点以识别聚类结构。

Birch

高效的在线学习算法。

备注

min_samples 参数包含点本身,而 scikit-learn-contrib/hdbscan 中的实现则不包含。为了在两个版本中获得相同的结果,这里 min_samples 的值必须比 scikit-learn-contrib/hdbscan 中使用的值大 1。

参考文献

示例

>>> from sklearn.cluster import HDBSCAN
>>> from sklearn.datasets import load_digits
>>> X, _ = load_digits(return_X_y=True)
>>> hdb = HDBSCAN(min_cluster_size=20)
>>> hdb.fit(X)
HDBSCAN(min_cluster_size=20)
>>> hdb.labels_
array([ 2,  6, -1, ..., -1, -1, -1])
dbscan_clustering(cut_distance, min_cluster_size=5)[source]#

返回 DBSCAN 给出的不包含边界点的聚类。

返回与为特定 cut_distance(或 epsilon)运行 DBSCAN* 等效的聚类。DBSCAN* 可以被认为是不包含边界点的 DBSCAN。因此,由于非核心点上的实现差异,这些结果可能与 cluster.DBSCAN 略有不同。

这也可以被认为是从单链接树的恒定高度切割中导出的扁平聚类。

这表示选择鲁棒单链接聚类的切割值的结果。min_cluster_size 允许扁平聚类声明噪声点(和大小小于 min_cluster_size 的聚类)。

参数:
cut_distancefloat

用于生成扁平聚类的互达距离切割值。

min_cluster_sizeint, default=5

小于此值的簇将被称为“噪声”,并在最终的扁平聚类中保持未聚类状态。

返回:
labels形状为 (n_samples,) 的ndarray

每个数据点的簇标签数组。异常值的标签如下所示

  • 噪声样本的标签为 -1。

  • 具有无限元素 (+/- np.inf) 的样本的标签为 -2。

  • 即使具有无限元素,具有缺失数据的样本的标签也为 -3。

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

基于层次密度聚类查找簇。

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

特征数组,或如果metric='precomputed'则为样本间距离数组。

yNone

忽略。

返回:
self对象

返回 self。

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

对 X 进行聚类并返回相关的簇标签。

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

特征数组,或如果metric='precomputed'则为样本间距离数组。

yNone

忽略。

返回:
y形状为 (n_samples,) 的ndarray

簇标签。

get_metadata_routing()[源代码]#

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

请查看用户指南,了解路由机制的工作原理。

返回:
routingMetadataRequest

一个MetadataRequest 封装了路由信息。

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

获取此估计器的参数。

参数:
deep布尔值,默认为 True

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

返回:
params字典

参数名称映射到其值。

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

设置此估计器的参数。

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

参数:
**params字典

估计器参数。

返回:
self估计器实例

估计器实例。