凝聚层次聚类#

class sklearn.cluster.AgglomerativeClustering(n_clusters=2, *, metric='euclidean', memory=None, connectivity=None, compute_full_tree='auto', linkage='ward', distance_threshold=None, compute_distances=False)[source]#

凝聚聚类。

递归地合并样本数据的聚类对;使用连接距离。

用户指南中了解更多信息。

参数:
n_clustersint 或 None,默认为 2

要查找的聚类数。如果distance_threshold不为None,则必须为None

metricstr 或 callable,默认为 “euclidean”

用于计算连接的度量。可以是“euclidean”、“l1”、“l2”、“manhattan”、“cosine”或“precomputed”。如果linkage为“ward”,则只接受“euclidean”。如果为“precomputed”,则拟合方法需要距离矩阵作为输入。如果connectivity为None,linkage为“single”且affinity不为“precomputed”,则可以分配任何有效的成对距离度量。

1.2版本新增。

memorystr 或具有 joblib.Memory 接口的对象,默认为 None

用于缓存树计算的输出。默认情况下,不进行缓存。如果给定一个字符串,则它是缓存目录的路径。

connectivity类数组、稀疏矩阵或 callable,默认为 None

连接矩阵。为每个样本定义遵循给定数据结构的相邻样本。这可以是连接矩阵本身,也可以是将数据转换为连接矩阵的 callable,例如从kneighbors_graph派生。默认为None,即层次聚类算法是非结构化的。

有关使用kneighbors_graph的连接矩阵示例,请参阅带结构和不带结构的凝聚聚类

compute_full_tree‘auto’ 或 bool,默认为 ‘auto’

n_clusters处提前停止树的构建。如果聚类数量与样本数量相比不太小,这有助于减少计算时间。此选项仅在指定连接矩阵时才有用。另请注意,当改变聚类数量并使用缓存时,计算完整树可能更有利。如果distance_threshold不为None,则它必须为True。默认情况下,compute_full_tree为“auto”,当distance_threshold不为Nonen_clusters小于100或0.02 * n_samples的最大值时,它等效于True。否则,“auto”等效于False

linkage{'ward', 'complete', 'average', 'single'},默认为 'ward'

使用哪种连接准则。连接准则决定了在观测集之间使用哪个距离。该算法将合并最小化此准则的聚类对。

  • ‘ward’ 最小化被合并的聚类的方差。

  • ‘average’ 使用两个集合的每个观测值的距离的平均值。

  • ‘complete’ 或 ‘maximum’ 连接使用两个集合的所有观测值之间的最大距离。

  • ‘single’ 使用两个集合的所有观测值之间的最小距离。

0.20版本新增:添加了 'single' 选项

有关比较不同linkage准则的示例,请参阅比较玩具数据集上不同的层次连接方法

distance_thresholdfloat,默认为 None

连接距离阈值,在此阈值或高于此阈值时,聚类将不会合并。如果非None,则n_clusters必须为None,并且compute_full_tree必须为True

0.21版本新增。

compute_distancesbool,默认为 False

即使不使用distance_threshold,也会计算聚类之间的距离。这可用于制作树状图可视化,但会带来计算和内存开销。

0.24版本新增。

有关树状图可视化的示例,请参阅绘制层次聚类树状图

属性:
n_clusters_int

算法找到的聚类数。如果distance_threshold=None,它将等于给定的n_clusters

labels_ndarray,形状为 (n_samples)

每个点的聚类标签。

n_leaves_int

层次树中的叶子数。

n_connected_components_int

图中估计的连接组件数。

0.21版本新增:添加了n_connected_components_以替换n_components_

n_features_in_int

拟合过程中看到的特征数量。

0.24版本新增。

feature_names_in_形状为 (n_features_in_,) 的ndarray

拟合过程中看到的特征名称。仅当X的特征名称全部为字符串时才定义。

版本 1.0 中添加。

children_形状为 (n_samples-1, 2) 的类数组

每个非叶节点的子节点。小于n_samples的值对应于树的叶节点,它们是原始样本。大于或等于n_samples的节点i是非叶节点,其子节点为children_[i - n_samples]。或者,在第 i 次迭代中,children[i][0] 和 children[i][1] 合并形成节点n_samples + i

distances_形状为 (n_nodes-1,) 的类数组

节点在children_中对应位置之间的距离。仅当使用distance_threshold或将compute_distances设置为True时才计算。

另请参见

FeatureAgglomeration

凝聚聚类,但用于特征而不是样本。

ward_tree

使用 Ward 连接的层次聚类。

示例

>>> from sklearn.cluster import AgglomerativeClustering
>>> import numpy as np
>>> X = np.array([[1, 2], [1, 4], [1, 0],
...               [4, 2], [4, 4], [4, 0]])
>>> clustering = AgglomerativeClustering().fit(X)
>>> clustering
AgglomerativeClustering()
>>> clustering.labels_
array([1, 1, 1, 0, 0, 0])
fit(X, y=None)[source]#

根据特征或距离矩阵拟合层次聚类。

参数:
X类数组,形状为 (n_samples, n_features) 或 (n_samples, n_samples)

要聚类的训练实例,如果metric='precomputed',则为实例之间的距离。

y忽略

未使用,出于 API 一致性约定而在此处显示。

返回:
self对象

返回拟合后的实例。

fit_predict(X, y=None)[source]#

拟合并返回每个样本聚类分配的结果。

除了拟合之外,此方法还会返回训练集中每个样本的聚类分配结果。

参数:
X形状为 (n_samples, n_features) 或 (n_samples, n_samples) 的类数组

要聚类的训练实例,如果affinity='precomputed',则为实例之间的距离。

y忽略

未使用,出于 API 一致性约定而在此处显示。

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

聚类标签。

get_metadata_routing()[source]#

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

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

返回:
routingMetadataRequest

一个MetadataRequest,封装了路由信息。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool,默认为 True

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

返回:
paramsdict

参数名称映射到其值。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**paramsdict

估计器参数。

返回:
self估计器实例

估计器实例。