ward_tree#
- sklearn.cluster.ward_tree(X, *, connectivity=None, n_clusters=None, return_distance=False)[source]#
基于特征矩阵的 Ward 聚类。
递归地合并使簇内方差增加最小的簇对。
惯性矩阵使用基于 Heapq 的表示形式。
这是结构化版本,它考虑了样本之间的一些拓扑结构。
在 User Guide 中阅读更多内容。
- 参数:
- Xshape 为 (n_samples, n_features) 的 array-like
表示要聚类的
n_samples个样本的特征矩阵。- connectivity{array-like, sparse matrix}, default=None
连接矩阵。根据给定的数据结构,为每个样本定义相邻样本。假设矩阵是对称的,只使用上三角部分。默认值为 None,即 Ward 算法是非结构化的。
- n_clustersint, default=None
n_clusters应小于n_samples。在n_clusters处提前停止树的构建。如果簇的数量与样本数量相比不小,这有助于减少计算时间。在这种情况下,不计算完整的树,因此“children”输出的用途有限,“parents”输出应该被使用。此选项仅在指定连接矩阵时有效。- return_distancebool, default=False
如果为
True,返回簇之间的距离。
- 返回:
- childrenndarray of shape (n_nodes-1, 2)
每个非叶节点的子节点。小于
n_samples的值对应于作为原始样本的树的叶节点。大于或等于n_samples的节点i是一个非叶节点,其子节点为children_[i - n_samples]。或者,在第 i 次迭代中,children[i][0]和children[i][1]合并形成节点n_samples + i。- n_connected_componentsint
图中的连通分量数。
- n_leavesint
树中的叶节点数。
- parentsndarray of shape (n_nodes,) or None
每个节点的父节点。仅在指定连接矩阵时返回,否则返回“None”。
- distancesndarray of shape (n_nodes-1,)
仅当
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