Python 层次聚类不一致:不一致的输出意味着什么

GH.*_*iou 2 python hierarchy scipy

我正在尝试学习如何使用scipy.cluster.hierarchy.inconsistant。我从文档和这个中知道第一列和第二列分别代表平均值和标准差;第三个是链接数量,第四个是不一致性系数。
然而,我不明白的是:

  1. 计算中包含的所有链接的真正含义是什么?
  2. scipy.hierarchy.cluster.inconfirm(Z, d=2)d 参数到底有什么作用?

例如,假设 X 矩阵如下:

[[2], [8], [0], [4], [1], [9], [9], [0]]
Run Code Online (Sandbox Code Playgroud)

然后,通过以下方式获取 Z 值

Z = linkage(X, 'single')
Run Code Online (Sandbox Code Playgroud)

并且,我们得到

[[  2.   7.   0.   2.]
 [  5.   6.   0.   2.]
 [  0.   4.   1.   2.]
 [  8.  10.   1.   4.]
 [  1.   9.   1.   3.]
 [  3.  11.   2.   5.]
 [ 12.  13.   4.   8.]]
Run Code Online (Sandbox Code Playgroud)

最后,得到不一致的情况

inconsistent(Z)
Run Code Online (Sandbox Code Playgroud)

输出是

[[ 0.       0.       1.       0.     ]
 [ 0.       0.       1.       0.     ]
 [ 1.       0.       1.       0.     ]
 [ 0.66667  0.57735  3.       0.57735]
 [ 0.5      0.70711  2.       0.70711]
 [ 1.5      0.70711  2.       0.70711]
 [ 2.33333  1.52753  3.       1.09109]]
Run Code Online (Sandbox Code Playgroud)

对于第四行,使用哪三个链接计算均值和标准差才能准确得到0.666670.57735的值?

[ 0.66667  0.57735  3.       0.57735]
Run Code Online (Sandbox Code Playgroud)

小智 6

首先你必须了解Z矩阵:

[[  2.   7.   0.   2.] <== x[2] is linked with x[7], forming cluster x[8] = {x[2], x[7]}
 [  5.   6.   0.   2.]
 [  0.   4.   1.   2.] <== x[10] = {x[0], x[4]}
 [  8.  10.   1.   4.] <== x[11] = {x[8], x[10]} = {x[2], x[7], x[0], x[4]}
 [  1.   9.   1.   3.]
 [  3.  11.   2.   5.]
 [ 12.  13.   4.   8.]]
Run Code Online (Sandbox Code Playgroud)

第四行的计算包含3个环节:

|     Link       | Height/Distance |
| x[2] - x[7]    |   Z[0,2] = 0    |
| x[0] - x[4]    |   Z[2,2] = 1    |
| x[8] - x[10]   |   Z[3,2] = 1    |
Run Code Online (Sandbox Code Playgroud)

(1,1,0) 的平均值为R[3,0] = 0.66667,标准差为R[3,1] = 0.57735(用 N-1 标准化,而不是 N)。不一致的值计算如下:

           Z[i,2] - R[i,0]      1 - 0.6667
R[i,3]  =  ---------------  =   ----------  =  0.57735
              R[i,1]             0.57735
Run Code Online (Sandbox Code Playgroud)
  1. 计算中包含的所有链接的真正含义是什么?
  2. scipy.hierarchy.cluster.inconfirm(Z, d=2) 的 d 参数到底有什么作用?

对于聚类 C,聚类 C 下面直至深度 d 的所有链接都被视为计算统计数据(均值和标准差)。在上面的示例中,d=2 意味着我们查看创建 x[11](深度 1)的链接,以及 x[8] 和 x[10](深度 2)下面的链接。