scipy.cluster.hierarchy.

is_isomorphic#

scipy.cluster.hierarchy.is_isomorphic(T1, T2)[source]#

确定两个不同的聚类分配是否等效。

参数:
T1array_like

将单例聚类 ID 分配给扁平聚类 ID。

T2array_like

将单例聚类 ID 分配给扁平聚类 ID。

返回值:
bbool

扁平聚类分配 T1T2 是否等效。

另请参阅

linkage

用于描述连接矩阵是什么。

fcluster

用于创建扁平聚类分配。

示例

>>> from scipy.cluster.hierarchy import fcluster, is_isomorphic
>>> from scipy.cluster.hierarchy import single, complete
>>> from scipy.spatial.distance import pdist

两个扁平聚类分配如果表示相同的聚类分配,但标签不同,则可能同构。

例如,我们可以使用 scipy.cluster.hierarchy.single: 方法并将输出展平为四个聚类

>>> X = [[0, 0], [0, 1], [1, 0],
...      [0, 4], [0, 3], [1, 4],
...      [4, 0], [3, 0], [4, 1],
...      [4, 4], [3, 4], [4, 3]]
>>> Z = single(pdist(X))
>>> T = fcluster(Z, 1, criterion='distance')
>>> T
array([3, 3, 3, 4, 4, 4, 2, 2, 2, 1, 1, 1], dtype=int32)

然后,我们可以使用 scipy.cluster.hierarchy.complete: 方法执行相同的操作

>>> Z = complete(pdist(X))
>>> T_ = fcluster(Z, 1.5, criterion='distance')
>>> T_
array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], dtype=int32)

如我们所见,在这两种情况下,我们都得到了四个聚类,所有数据点都以相同的方式分布 - 唯一改变的是扁平聚类标签 (3 => 1, 4 => 2, 2 => 3 以及 4 => 1),因此两个聚类分配都是同构的

>>> is_isomorphic(T, T_)
True