您的位置:首页 > 编程语言 > Python开发

Weighted Slope One (python实现)

2013-08-14 15:57 288 查看
chapter 3 (collabative filtering ) of 《guide to db》

slope one 算法比较简单:1.先构造 collection of deviation(average deviation)

                                                2.weighted slope one ,已经打分的项+该项的deviation

代码:

users2 = {"Amy": {"Dr. Dog": 4, "Lady Gaga": 3, "Phoenix": 4},
"Ben": {"Dr. Dog": 5, "Lady Gaga": 2},
"Clara": {"Lady Gaga": 3.5, "Phoenix": 4}}

def computeDeviations(users):
'''
compute the deviations and return
'''
deviations = {}
frequencies = {}
for user in users.values():
for key1 in user:
frequencies.setdefault(key1,{}) #new method~!
deviations.setdefault(key1,{})
for key2 in user:
if key1<>key2:
frequencies[key1].setdefault(key2,0)
deviations[key1].setdefault(key2,0)

deviations[key1][key2] += user[key1]-user[key2]
frequencies[key1][key2] += 1

for key1 in deviations:
for key2 in deviations[key1]:
deviations[key1][key2] /= frequencies[key1][key2]
return deviations,frequencies

def wS1(users, deviations,frequencies, user, item):
'''
make prediction :how user will rate the item?
'''
if users[user].get(item)<>None:
return users[user][item]
itemPrediction = 0
totalFrequency = 0
for key in users[user]:
if key<>item:
itemPrediction += (users[user][key]+deviations[item][key])*frequencies[item][key]
totalFrequency += frequencies[item][key]
itemPrediction /= totalFrequency
return itemPrediction
d,f = computeDeviations(users2)
print wS1(users2,d,f,'Ben','Phoenix')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: