gpt4 book ai didi

python - 来自 “Programming Collective Intelligence” 的 PIL 逊算法有什么问题?

转载 作者:太空狗 更新时间:2023-10-30 00:28:52 25 4
gpt4 key购买 nike

该函数来自《Programming Collective Intelligence》一书,计算p1和p2的 PIL 逊相关系数,p1和p2应该是-1到1之间的数。

如果两个评论家对项目的评分非常相似,则该函数应返回 1,或接近 1。

对于真实的用户数据,我有时会得到奇怪的结果。在以下示例中,数据集 critics2 应返回 1,而不是返回 0。

有人发现错误吗?

(这不是 What is wrong with this python function from “Programming Collective Intelligence” 的副本)

from __future__ import division
from math import sqrt

def sim_pearson(prefs,p1,p2):
si={}
for item in prefs[p1]:
if item in prefs[p2]: si[item]=1
if len(si)==0: return 0
n=len(si)
sum1=sum([prefs[p1][it] for it in si])
sum2=sum([prefs[p2][it] for it in si])
sum1Sq=sum([pow(prefs[p1][it],2) for it in si])
sum2Sq=sum([pow(prefs[p2][it],2) for it in si])
pSum=sum([prefs[p1][it]*prefs[p2][it] for it in si])
num=pSum-(sum1*sum2/n)
den=sqrt((sum1Sq-pow(sum1,2)/n)*(sum2Sq-pow(sum2,2)/n))
if den==0: return 0
r=num/den
return r

critics = {
'user1':{
'item1': 3,
'item2': 5,
'item3': 5,
},
'user2':{
'item1': 4,
'item2': 5,
'item3': 5,
}
}
critics2 = {
'user1':{
'item1': 5,
'item2': 5,
'item3': 5,
},
'user2':{
'item1': 5,
'item2': 5,
'item3': 5,
}
}
critics3 = {
'user1':{
'item1': 1,
'item2': 3,
'item3': 5,
},
'user2':{
'item1': 5,
'item2': 3,
'item3': 1,
}
}

print sim_pearson(critics, 'user1', 'user2', )
result: 1.0 (expected)
print sim_pearson(critics2, 'user1', 'user2', )
result: 0 (unexpected)
print sim_pearson(critics3, 'user1', 'user2', )
result: -1 (expected)

最佳答案

您的结果没有任何问题。您正在尝试通过 3 个点绘制一条线。在第二种情况下,所有三个点都具有相同的坐标,即实际上是一个点。你不能说这些点是相关还是反相关,因为你可以通过一个点绘制无限多条线(代码中的 den 等于零)。

关于python - 来自 “Programming Collective Intelligence” 的 PIL 逊算法有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1778411/

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