gpt4 book ai didi

python - 在 Python 中计算加权成对距离矩阵

转载 作者:太空狗 更新时间:2023-10-29 21:29:14 26 4
gpt4 key购买 nike

我试图找到在 Python 中执行以下成对距离计算的最快方法。我想使用这些距离根据它们的相似性对 list_of_objects 进行排名。

list_of_objects 中的每个项目都由四个测量值 a、b、c、d 表征,它们是在非常不同的尺度上进行的,例如:

object_1 = [0.2, 4.5, 198, 0.003]
object_2 = [0.3, 2.0, 999, 0.001]
object_3 = [0.1, 9.2, 321, 0.023]
list_of_objects = [object_1, object_2, object_3]

目的是获取list_of_objects 中对象的成对距离矩阵。但是,我希望能够通过权重向量在我的距离计算中指定每个测量的“相对重要性”,每次测量一个权重,例如:

weights = [1, 1, 1, 1]

表示所有测量值的权重相同。在这种情况下,无论测量比例如何,我都希望每次测量对物体之间的距离的贡献相等。或者:

weights = [1, 1, 1, 10]

表示我希望测量 d 对物体之间距离的贡献比其他测量多 10 倍。

我目前的算法是这样的:

  1. 为每次测量计算成对距离矩阵
  2. 标准化每个距离矩阵,使最大值为 1
  3. 将每个距离矩阵乘以 weights
  4. 中的适当权重
  5. 对距离矩阵求和以生成单个成对矩阵
  6. 使用 4 中的矩阵提供来自 list_of_objects
  7. 的对象对的排序列表

这很好用,并为我提供了物体之间城市街区距离的加权版本。

我有两个问题:

  1. 在不更改算法的情况下,SciPy、NumPy 或 SciKit-Learn 中执行初始距离矩阵计算的最快实现是什么。

  2. 是否有一种现有的多维距离方法可以为我完成所有这些工作?

对于问题 2,我已经看过,但找不到任何具有按照我想要的方式执行“相对重要性”的内置步骤。

欢迎提出其他建议。如果我遗漏了细节,很乐意澄清。

最佳答案

scipy.spatial.distance 是您想要查看的模块。它有很多不同的规范,可以很容易地应用。

我建议使用加权 M​​onkowski Metrik

Weighted Minkowski Metrik

您可以使用此包中的 pdist 方法进行成对距离计算。

例如

import numpy as np
from scipy.spatial.distance import pdist, wminkowski, squareform

object_1 = [0.2, 4.5, 198, 0.003]
object_2 = [0.3, 2.0, 999, 0.001]
object_3 = [0.1, 9.2, 321, 0.023]
list_of_objects = [object_1, object_2, object_3]

# make a 3x4 array from the list of objects
X = np.array(list_of_objects)

#calculate pairwise distances, using weighted Minkowski norm
distances = pdist(X,wminkowski,2, [1,1,1,10])

#make a square matrix from result
distances_as_2d_matrix = squareform(distances)

print distances
print distances_as_2d_matrix

这将打印

[ 801.00390786  123.0899671   678.0382942 ]
[[ 0. 801.00390786 123.0899671 ]
[ 801.00390786 0. 678.0382942 ]
[ 123.0899671 678.0382942 0. ]]

关于python - 在 Python 中计算加权成对距离矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20089007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com