皮爾遜相關(guān)度評價算法

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

#返回一個有關(guān)person1與person2的基于距離的相似度評價

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

#計算所有差值的平方和

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):

#得到雙方都曾評價過得物品列表

si={}

for item in prefs[p1]:

if item in prefs[p2]:si[item]=1

#得到列表元素的個數(shù)

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


運行時總是出現(xiàn)invalid syntax錯誤,錯誤位置為最后 if den==0 : return 0中的冒號位置上,怎么都找不出原因來,如果有會的大神求指教

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 撒謊分三種: (1)撒謊是為了逃避懲罰而撒謊,稱防御性撒謊。 (2)撒謊是為了獲得利益,快樂,甚至某種特權(quán),稱獲益...
    善默勤容閱讀 335評論 0 0
  • 俗話說,攝影是用光的藝術(shù)。但是這句話的調(diào)太高了,需要很深的攝影道行才能理解才能展現(xiàn)“光”的藝術(shù)。不過我也嘗試用手機...
    不許瞎搞閱讀 1,027評論 4 7
  • 蟬聲鳴鳴 烈夏炎炎 雨后洼洼 花果蔥蔥 行人慌慌 爭相鏘鏘 不知何何 笑臉盈盈
    千步夢尋閱讀 531評論 2 3
  • 健身小知識2017/3/15 今晚練什么,胸? “今晚練什么”應(yīng)該是健身房打照面問的最多的一句了,因為大部分人使用...
    wuli哥哥閱讀 174評論 0 1

友情鏈接更多精彩內(nèi)容