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')
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')
相关文章推荐
- 一趟聚类(One-pass Cluster)及python实现
- Mahout SlopeOne实现(一)
- 文本聚类算法之一趟聚类(One-pass Cluster)算法的python实现
- 推荐算法之Slope One Java 及 PHP实现
- Python实现Pat 1049. Counting Ones (30)
- 多线程算法学习一LockOne和LockTwo(python实现)
- 【python|ML】k-fold/leave-one-out 方法在对率回归实现(西瓜书习题3.4,数据UCI-iris)
- python Slope one
- 飘逸的python - 实现控制台进度条效果
- C语言代码格式自动化(python实现)
- Python实现插入排序
- 基本排序算法:Python实现
- 冒泡排序的Python实现
- leetcode 【 Trapping Rain Water 】python 实现
- Python实现三位数字的所有回文数
- Python 实现决策树 ID3 C4.5 悲观剪枝
- Python实现调用另一个路径下py文件中的函数方法总结
- python实现监控linux性能及进程消耗性能的方法
- Python使用numpy实现BP神经网络
- PYTHON实现HTTP摘要认证(DIGEST AUTHENTICATION)