在进行影片相似度计算的时候,有的人对于影片的评分习惯偏低,有的人习惯偏高,皮尔逊方法可以修正“夸大分值”的情况。
如果某人总是倾向于给出比另一个人更高的分值,而二者的分值又始终保持一致,则他们也会存在很高的相关性。
# recommendations.py
# 返回p1和p2的相关系数
def sim_pearson(prefs,p1,p2):
# 得到双方都曾评价过的物品列表
si={}
for item in prefs[p1]:
if item in prefs[p2]:
si[item]=1
# 列表元素的个数
n=len(si)
# 如果两者没有共同之处,则返回1
if n==0:return 1
# 对所有的偏好求和
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
该函数将会返回一个介于-1和1之间的数值。