Ward 树#

sklearn.cluster.ward_tree(X, *, connectivity=None, n_clusters=None, return_distance=False)[source]#

基于特征矩阵的 Ward 聚类。

递归地合并最小化簇内方差的簇对。

惯性矩阵使用基于 Heapq 的表示。

这是考虑样本之间某些拓扑结构的结构化版本。

更多信息请阅读 用户指南

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

表示要聚类的 n_samples 个样本的特征矩阵。

connectivity{类数组,稀疏矩阵},默认值=None

连接矩阵。为每个样本定义遵循给定数据结构的相邻样本。假设矩阵是对称的,只使用上三角部分。默认为 None,即 Ward 算法是非结构化的。

n_clustersint,默认值=None

n_clusters 应小于 n_samples。在 n_clusters 处提前停止树的构建。如果簇的数量与样本数量相比不大,这对于减少计算时间很有用。在这种情况下,不会计算完整的树,因此 'children' 输出的用处有限,应该使用 'parents' 输出。此选项仅在指定连接矩阵时有效。

return_distancebool,默认值=False

如果为True,则返回集群之间的距离。

返回:
children形状为 (n_nodes-1, 2) 的 ndarray

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

n_connected_componentsint

图中连通分量的数量。

n_leavesint

树中叶节点的数量。

parents形状为 (n_nodes,) 的 ndarray 或 None

每个节点的父节点。仅当指定连接矩阵时返回,否则返回 'None'。

distances形状为 (n_nodes-1,) 的 ndarray

仅当return_distance设置为True时返回(为了兼容性)。节点中心的距离。distances[i]对应于节点children[i, 1]children[i, 2]之间的加权欧几里德距离。如果节点指的是树的叶节点,则distances[i]是它们的非加权欧几里德距离。距离按以下方式更新(来自 scipy.hierarchy.linkage)

新的条目\(d(u,v)\)计算如下:

\[d(u,v) = \sqrt{\frac{|v|+|s|} {T}d(v,s)^2 + \frac{|v|+|t|} {T}d(v,t)^2 - \frac{|v|} {T}d(s,t)^2}\]

其中\(u\)是由集群\(s\)\(t\)组成的新的合并集群,\(v\)是森林中未使用的集群,\(T=|v|+|s|+|t|\),而\(|*|\)是其参数的基数。这也称为增量算法。

示例

>>> import numpy as np
>>> from sklearn.cluster import ward_tree
>>> X = np.array([[1, 2], [1, 4], [1, 0],
...               [4, 2], [4, 4], [4, 0]])
>>> children, n_connected_components, n_leaves, parents = ward_tree(X)
>>> children
array([[0, 1],
       [3, 5],
       [2, 6],
       [4, 7],
       [8, 9]])
>>> n_connected_components
1
>>> n_leaves
6