critics={'Lisa Rose':{'Lady in the Water':2.5, 'Snakes on a Plane' :3.5,
'Just My Luck':3.0, 'Superman returns':3.5, 'You,Me and Dupree':2.5,
'The Night Listener':3.0},
'Gene Seymour':{'Lady in the Water':3.0,'Snakes on a Plane':3.5,
'Just My Luck':1.5,'Superman Returns':5.0,'The Night Listener':3.0,
'You,,Me and Dupree':3.5},
'Michael Phillips':{'Lady in the Water':2.5, 'Snakes on a Plane':3.0,
'Superman Returns':3.5,'The Night Listener':4.0},
'Claudia Puig':{'Snakes on a Plane':3.5,'Just My Luck':3.0,
'The Night Listener':4.5,'Superman Returns':4.0,'You,Me and Dupree':2.5},
'Mich Lasalle':{'Lady in the Water':3.0,'Snakes on a Plane':4.0,
'Just My Luck':2.0,'Superman Returns':3.0,'The Night Listene ':3.0,
'You,Me and Dupree':2.0},
'Jack Mattews':{'Lady in the Water':3.0,'Snakes on a Plane':4.0,
'The Night Listene ':3.0,'Superman Returns':5.0,'You,Me and Dupree':3.5},
'Toby':{'Snakes on a Plane':4.5,'You,Me and Dupree':1.0,'Superman Returns':4.0}}
from math import sqrt
#返回一個(gè)有關(guān)person1與person2的基于距離的相似度評(píng)價(jià)
def sim_distance(prefs,person1,person2):
#得到shared_items的列表
si={}
for item in prefs[person1]:
if item in prefs[person2]:
si[item]=1
#如果兩者沒有共同之處剖张,則返回0
if len(si)==0:return 0
#計(jì)算所有差值的平方和
sum_of_squares=sum([pow(prefs[person1][item]-prefs[person2][item],2)
for item in prefs[person1] if item in prefs[person2]])
return 1/(1+sqrt(sum_of_squares))
#返回p1和p2的皮爾遜相關(guān)系數(shù)
def sim_pearson(prefs,p1,p2):
#得到雙方都曾評(píng)價(jià)過得物品列表
si={}
for item in prefs[p1]:
if item in prefs[p2]:si[item]=1
#得到列表元素的個(gè)數(shù)
n=len(si)
#如果兩者都沒有共同之處,則返回1
if n==0:return 1
#對(duì)所有偏好求和
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])
#計(jì)算皮爾遜評(píng)價(jià)值
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
運(yùn)行時(shí)總是出現(xiàn)invalid syntax錯(cuò)誤,錯(cuò)誤位置為最后 if den==0 : return 0中的冒號(hào)位置上蹦渣,怎么都找不出原因來,如果有會(huì)的大神求指教