python hcluster,距离矩阵和浓缩距离矩阵
问题描述:
我使用模块hcluster从距离矩阵计算树状图。我的距离矩阵是这样生成的数组的数组:python hcluster,距离矩阵和浓缩距离矩阵
import hcluster
import numpy as np
mols = (..a list of molecules)
distMatrix = np.zeros((10, 10))
for i in range(0,10):
for j in range(0,10):
sim = OETanimoto(mols[i],mols[j]) # a function to calculate similarity between molecules
distMatrix[i][j] = 1 - sim
然后我使用命令distVec = hcluster.squareform(distMatrix)
到矩阵转换成冷凝矢量和与vecLink = hcluster.linkage(distVec)
计算联动矩阵。
所有这一切工作正常,但如果我计算使用距离矩阵,而不是浓缩载体的联动矩阵matLink = hcluster.linkage(distMatrix)
我得到一个不同的链接矩阵(节点之间的距离,很多大和拓扑结构略有不同)
现在我不确定这是否是因为hcluster只能用于压缩矢量,或者我在那里犯错误。
感谢您的帮助!
答
我敲了一个类似于你的快速随机的例子,并遇到同样的问题。 在文档字符串中的确如此:
对浓缩距离矩阵y执行分层/凝聚聚类。 y必须是:数学:{n \choose 2}
大小为 向量其中n是距离矩阵中配对的原始观测值 的数量。
但是,仔细查看了代码后,它似乎有意使它与矢量形状和矩阵形代码一起工作: 在hierachy.py中有一个基于矩阵形状的开关。然而 看来,信息的关键位是功能联动的文档字符串:
- Q : ndarray
A condensed or redundant distance matrix. A condensed
distance matrix is a flat array containing the upper
triangular of the distance matrix. This is the form that
``pdist`` returns. Alternatively, a collection of
:math:`m` observation vectors in n dimensions may be passed as
a :math:`m` by :math:`n` array.
所以我认为,该接口不允许距离矩阵的传递。 相反,它认为你将它传递给n维的观测向量m
。 因此,结果的差异?
这是否合理?
其他只是看看代码本身我相信你可以调试它,并找出你的例子为什么不同。
干杯 马特
马特你好,非常感谢您的回复。听到传递矢量是要走的道路是令人欣慰的。 – 2011-04-20 14:37:55