scipy.cluster.hierarchy.is_valid_linkage

scipy.cluster.hierarchy.is_valid_linkage(Z, warning=False, throw=False, name=None)[源代码]

检查链接矩阵的有效性。

如果链接矩阵是二维数组(类型为DOUBLE),则链接矩阵有效 \(n\) 行和4列。前两列必须包含介于0和 \(2n-1\) 。对于给定行 i ,以下两个表达式必须成立:

\[0\leq\mathtt{Z [i,0] }\leq i+n-1 0\leq Z [i,1] \LEQ i+n-1\]

也就是说,除非已生成正在加入的集群,否则一个集群不能加入另一个集群。

参数
Zarray_like

链接矩阵。

warning布尔值,可选

为True时,如果传递的链接矩阵无效,则发出Python警告。

throw布尔值,可选

为True时,如果传递的链接矩阵无效,则引发Python异常。

name字符串,可选

此字符串引用无效链接矩阵的变量名。

退货
b布尔尔

如果不一致矩阵有效,则为True。

参见

linkage

有关链接矩阵是什么的说明,请参阅。

示例

>>> from scipy.cluster.hierarchy import ward, is_valid_linkage
>>> from scipy.spatial.distance import pdist

由本模块中的聚类方法生成的所有链接矩阵都将是有效的(即,它们将具有适当的维度,并且所需的两个表达式将适用于所有行)。

我们可以使用以下工具进行检查 scipy.cluster.hierarchy.is_valid_linkage

>>> 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 = ward(pdist(X))
>>> Z
array([[ 0.        ,  1.        ,  1.        ,  2.        ],
       [ 3.        ,  4.        ,  1.        ,  2.        ],
       [ 6.        ,  7.        ,  1.        ,  2.        ],
       [ 9.        , 10.        ,  1.        ,  2.        ],
       [ 2.        , 12.        ,  1.29099445,  3.        ],
       [ 5.        , 13.        ,  1.29099445,  3.        ],
       [ 8.        , 14.        ,  1.29099445,  3.        ],
       [11.        , 15.        ,  1.29099445,  3.        ],
       [16.        , 17.        ,  5.77350269,  6.        ],
       [18.        , 19.        ,  5.77350269,  6.        ],
       [20.        , 21.        ,  8.16496581, 12.        ]])
>>> is_valid_linkage(Z)
True

但是,如果我们以错误的方式创建链接矩阵-或者如果我们以任何必需的表达式都不再适用的方式修改有效的链接矩阵,则检查将失败:

>>> Z[3][1] = 20    # the cluster number 20 is not defined at this point
>>> is_valid_linkage(Z)
False