gpt4 book ai didi

python - Pearson Similarity Score,我该如何进一步优化它?

转载 作者:行者123 更新时间:2023-11-28 20:00:12 25 4
gpt4 key购买 nike

我实现了 Pearson 的相似度评分来比较两个值字典。此方法花费的时间比其他任何地方都多(可能有数百万次调用),因此这显然是需要优化的关键方法。

即使是最细微的优化也会对我的代码产生重大影响,因此我热衷于探索哪怕是最小的改进。

这是我目前所拥有的:

def simple_pearson(v1,v2):

si = [val for val in v1 if val in v2]

n = len(si)

if n==0: return 0.0

sum1 = 0.0
sum2 = 0.0
sum1_sq = 0.0
sum2_sq = 0.0
p_sum = 0.0

for v in si:
val_1 = v1[v]
val_2 = v2[v]
sum1+=val_1
sum2+=val_2
sum1_sq+=pow(val_1,2)
sum2_sq+=pow(val_2,2)
p_sum+=val_1*val_2

# Calculate Pearson score
num = p_sum-(sum1*sum2/n)
temp = (sum1_sq-pow(sum1,2)/n) * (sum2_sq-pow(sum2,2)/n)
if temp < 0.0:
temp = -temp
den = sqrt(temp)
if den==0: return 1.0

r = num/den

return r

最佳答案

移动到 numpy 或 scipy 将获得真正的速度提升。除此之外,还有微优化:例如x*xpow(x,2) 快;您可以通过执行以下操作同时提取值和键,而不是:

si = [val for val in v1 if val in v2]

有点像

vs = [ (v1[val],v2[val]) for val in v1 if val in v2]

然后

sum1 = sum(x for x, y in vs)

等等;这些是否都带来时间优势需要微基准测试。根据您使用这些系数的方式,返回平方会为您节省一个 sqrt(这类似于在几何中使用点之间距离的平方而不是距离本身,并且出于同样的原因 - 为您节省一个 sqrt ; 这是有道理的,因为系数是一个距离,有点...;-)。

关于python - Pearson Similarity Score,我该如何进一步优化它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1307016/

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