對(duì)具體的某一用戶(hù),根據(jù)其他用戶(hù)的評(píng)價(jià)結(jié)果,計(jì)算出他與每一個(gè)用戶(hù)的相似程度,找出相似程度最高的前N位。
在函數(shù)中,通過(guò)similarity指定使用的相關(guān)性算法。
"""
為評(píng)論者打分
"""
#書(shū)中算法
def topMatches(prefs,person,n = 5,similarity = sim_pearson):
score = [(similarity(prefs,person,other),other)
for other in prefs if other != person]
score.sort() #從小到大
score.reverse() #反過(guò)來(lái)排
return score[0:n]
#自己編寫(xiě)
def topMatches2(prefs,person,n = 5,similarity = sim_pearson):
score = {}
for item in prefs:
if item != person:
score[item] = similarity(prefs,person,item)
score_sort = sorted(zip(score.values(),score.keys()))
score_sort.reverse()
score_sort = score_sort[0:n]
return score_sort
幾個(gè)小筆記:
1、列表排序,從小排到大
score.sort()
注意,這個(gè)score由元組組成 [(相似度,人名),……],它會(huì)根據(jù)元組第一個(gè)值進(jìn)行排序。
2、把列表元素順序調(diào)轉(zhuǎn)
score.reverse()
3、字典如何排序:
(1)zip(score.values(),score.keys()),把字典中每個(gè)值組成(value,key)的元組,通過(guò)zip把這些元組構(gòu)成列表。
(2)score_sort = sorted(zip(score.values(),score.keys())),通過(guò)sorted函數(shù),與scort.sort()等價(jià)。
4、取列表前N個(gè):
score[0:n]