我有一个距离矩阵n*n M
,其中M_ij
是object_i
和object_j
之间的距离。因此,正如预期的那样,它采取了以下形式:
/ 0 M_01 M_02 ... M_0n\
| M_10 0 M_12 ... M_1n |
| M_20 M_21 0 ... M2_n |
| ... |
\ M_n0 M_n2 M_n2 ... 0 /
现在,我希望用分层聚类对这些n个对象进行聚类。Python有一个叫做scipy.cluster.hierarchy.linkage(y, method='single', metric='euclidean')
的实现。
其文件说:
Y必须是{n \选择2}大小的向量,其中n是距离矩阵中配对的原始观测数。 Y: ndarray 压缩的或多余的距离矩阵。凝聚距离矩阵是包含距离矩阵的上三角的平坦阵列。这是pdist返回的表单。或者,n维的m观测向量集合可以由n个阵列作为m传递。
我对y
的这种描述感到困惑。我可以直接将我的M
y
**?**输入到中。
更新
@洪博珠-cn 在GitHub中提出了这个问题。这正是我所关心的。然而,作为GitHub的新手,我不知道它是如何工作的,因此不知道如何处理这个问题。
发布于 2013-09-23 08:31:11
现在,您应该传递“凝聚距离矩阵”,即以向量形式表示的距离矩阵的上三角形:
y = M[np.triu_indices(n,1)]
从“洪博珠-cn的拉”请求探讨看来,解决方案似乎是在linkage
函数中添加一个额外的关键字参数,允许用户显式地指定他们传递的是一个n距离矩阵,而不是一个m观测矩阵。
https://stackoverflow.com/questions/18952587
复制相似问题