python中二进制数据距离矩阵的计算
我正在用python执行分层聚类分析。我的变量是二进制的,所以我想知道如何计算二进制欧氏距离。根据文献,可以将此距离度量与此聚类技术结合使用 我使用的是python中二进制数据距离矩阵的计算,python,hierarchical-clustering,euclidean-distance,distance-matrix,Python,Hierarchical Clustering,Euclidean Distance,Distance Matrix,我正在用python执行分层聚类分析。我的变量是二进制的,所以我想知道如何计算二进制欧氏距离。根据文献,可以将此距离度量与此聚类技术结合使用 我使用的是scipy.spatial.distance.pdist(X,metric='euclidean'),但是这个函数对非二进制数据使用欧几里德距离 是否有任何python库可以基于二进制欧几里德距离度量计算距离矩阵?解决方案1-numpy from numpy import linalg, array M1 = [[1, 1], [0, 1]]
scipy.spatial.distance.pdist(X,metric='euclidean')
,但是这个函数对非二进制数据使用欧几里德距离
是否有任何python库可以基于二进制欧几里德距离度量计算距离矩阵?解决方案1-numpy
from numpy import linalg, array
M1 = [[1, 1], [0, 1]]
M2 = [[0, 1], [1, 1]]
print(linalg.norm(array(M1) - array(M2)))
解决方案2-自定义
M1 = [[1, 1], [0, 1]]
M2 = [[0, 1], [1, 1]]
def binary_dist(m1, m2):
sum = 0
for i in range(len(m1)):
for j in range(len(m1[i])):
if m1[i][j] != m2[i][j]:
sum += 1
return sum ** .5
print(binary_dist(M1, M2))
您引用的论文中有一个公式,它是计算二进制数据的标准欧氏距离的一种更快的方法。在这种情况下,
scipy
方法可以正常工作。您是否希望使用不同的距离,或者您的数据是否以某种方式格式化,使得pdist()
在本机上无法工作?这可能会有所帮助:将二进制文件转换为位数组您可以使用两个位数组计算欧几里德距离,如下scipy.spatial.distance.euclidean([1,0,0],[0,1,0])
我想确认此函数是否适用于二进制数据。事实上,对我来说,论文中引用的公式并不清楚,这是计算标准公式的一种更快的方法。有效性取决于它是什么类型的数据(根据领域知识,而不仅仅是它是否是二进制的),以及你在用它做什么。欧几里德距离与大多数其他有用的度量产生相同的拓扑结构,因此从某种意义上说,最糟糕的事情可能发生在你得到正确答案加上失真。这在某些领域很好,在其他领域则不然。至于速度,这一节的所有文章都注意到,对于二元向量v和w,| v-w |与(v XOR w)相同。如果您的数据是按位存储的,这可能非常快。请注意,speed comment不适用于,例如,恰好只有0或1的浮点列表。在Python中,这会带来作为对象的一切额外开销。在大多数语言(包括Python)中,它至少具有表示浮点所需的额外位。为了更好地帮助您,我们确实需要一个您所说的“二进制数据”的示例,以便能够建议使用哪些方法。