Skip to content

Commit 7a9a8d4

Browse files
author
=
committed
add basedItem
1 parent 85b3e24 commit 7a9a8d4

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#!/usr/bin/env python
2+
#-*-coding:utf-8-*-
3+
'''
4+
Created on 2016-5-30
5+
6+
@author: thinkgamer
7+
'''
8+
import math
9+
10+
class ItemBasedCF:
11+
def __init__(self,train_file):
12+
self.train_file = train_file
13+
self.readData()
14+
def readData(self):
15+
#读取文件,并生成用户-物品的评分表和测试集
16+
self.train = dict() #用户-物品的评分表
17+
for line in open(self.train_file):
18+
# user,item,score = line.strip().split(",")
19+
user,score,item = line.strip().split(",")
20+
self.train.setdefault(user,{})
21+
self.train[user][item] = int(float(score))
22+
23+
def ItemSimilarity(self):
24+
#建立物品-物品的共现矩阵
25+
C = dict() #物品-物品的共现矩阵
26+
N = dict() #物品被多少个不同用户购买
27+
for user,items in self.train.items():
28+
for i in items.keys():
29+
N.setdefault(i,0)
30+
N[i] += 1
31+
C.setdefault(i,{})
32+
for j in items.keys():
33+
if i == j : continue
34+
C[i].setdefault(j,0)
35+
C[i][j] += 1
36+
#计算相似度矩阵
37+
self.W = dict()
38+
for i,related_items in C.items():
39+
self.W.setdefault(i,{})
40+
for j,cij in related_items.items():
41+
self.W[i][j] = cij / (math.sqrt(N[i] * N[j]))
42+
return self.W
43+
44+
#给用户user推荐,前K个相关用户
45+
def Recommend(self,user,K=3,N=10):
46+
rank = dict()
47+
action_item = self.train[user] #用户user产生过行为的item和评分
48+
for item,score in action_item.items():
49+
for j,wj in sorted(self.W[item].items(),key=lambda x:x[1],reverse=True)[0:K]:
50+
if j in action_item.keys():
51+
continue
52+
rank.setdefault(j,0)
53+
rank[j] += score * wj
54+
return dict(sorted(rank.items(),key=lambda x:x[1],reverse=True)[0:N])
55+
56+
#声明一个ItemBased推荐的对象
57+
Item = ItemBasedCF("uid_score_bid")
58+
Item.ItemSimilarity()
59+
recommedDic = Item.Recommend("xiyuweilan")
60+
for k,v in recommedDic.iteritems():
61+
print k,"\t",v

0 commit comments

Comments
 (0)