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不同),并且对参数选择更具鲁棒性。在用户指南中阅读更多信息。

在1.3版本中添加。

参数:
min_cluster_sizeint, 默认值=5

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

min_samplesint, 默认值=None

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

cluster_selection_epsilonfloat, 默认值=0.0

一个距离阈值。小于此值的簇将被合并。有关更多信息,请参见[5]

max_cluster_sizeint, 默认值=None

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

metricstr 或 callable, 默认值=’euclidean’

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

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

  • 如果度量是“precomputed”(预计算),则X被假定为距离矩阵且必须是方阵。

metric_paramsdict, 默认值=None

传递给距离度量的参数。

alphafloat, 默认值=1.0

一个距离缩放参数,用于鲁棒的单链接。有关更多信息,请参见[3]

algorithm{“auto”, “brute”, “kd_tree”, “ball_tree”}, 默认值=”auto”

用于计算核心距离的具体算法;默认设置为"auto",它会尝试尽可能使用KDTree树,否则使用BallTree树。"kd_tree""ball_tree"算法都使用NearestNeighbors估计器。

如果在fit期间传入的X是稀疏的,或者metricKDTreeBallTree都无效,则将使用"brute"算法。

leaf_sizeint, 默认值=40

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

n_jobsint, 默认值=None

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

cluster_selection_method{“eom”, “leaf”}, 默认值=”eom”

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

allow_single_clusterbool, 默认值=False

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

store_centersstr, 默认值=None

要计算和存储哪些聚类中心(如果有)。选项包括

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

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

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

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

copybool, 默认值=False

如果copy=True,则在任何可能覆盖传递给fit的数据的就地修改发生时,会先创建一份副本,确保原始数据保持不变。目前,它仅适用于metric="precomputed"、传递密集数组或CSR稀疏矩阵以及algorithm="brute"的情况。

属性:
labels_形状为(n_samples,)的ndarray

给定给fit的数据集中每个点的聚类标签。异常值按以下方式标记:

  • 噪声样本被标记为-1。

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

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

probabilities_形状为(n_samples,)的ndarray

每个样本属于其分配聚类的强度。

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

  • 噪声样本的概率为零。

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

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

n_features_in_int

fit期间看到的特征数量。

feature_names_in_形状为(n_features_in_,)的ndarray

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

centroids_形状为(n_clusters, n_features)的ndarray

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

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

medoids_形状为(n_clusters, n_features)的ndarray

一个集合,包含在传递给metric参数的任何度量下计算的每个聚类的中心点(medoid)。中心点是原始聚类中使到该聚类中所有其他点的平均距离最小的点(使用所选度量)。这可以被认为是将基于metric的形心投影回聚类的结果。

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

另请参见

DBSCAN

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

OPTICS

用于识别聚类结构的点排序。

Birch

内存高效的在线学习算法。

备注

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

参考文献

示例

>>> import numpy as np
>>> 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_.shape == (X.shape[0],)
True
>>> np.unique(hdb.labels_).tolist()
[-1, 0, 1, 2, 3, 4, 5, 6, 7]
dbscan_clustering(cut_distance, min_cluster_size=5)[源代码]#

返回DBSCAN在没有边界点的情况下给出的聚类。

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

这也可以被认为是源自单链接树通过恒定高度切割的扁平聚类。

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

参数:
cut_distancefloat

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

min_cluster_sizeint, 默认值=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对象

返回自身。

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)[源代码]#

获取此估计器的参数。

参数:
deepbool, 默认值=True

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

返回:
paramsdict

参数名称及其对应的值。

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

设置此估计器的参数。

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

参数:
**paramsdict

估计器参数。

返回:
self估计器实例

估计器实例。