Weighted Slope One (python实现)
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')
版权声明:本文为博主原创文章,未经博主允许不得转载。