Skip to content

Commit b31e494

Browse files
author
=
committed
基于标签的推荐
1 parent 203f43e commit b31e494

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

Recommend/test.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#!/usr/bin/env python
2+
#-*-coding:utf-8-*-
3+
import random
4+
#统计各类数量
5+
def addValueToMat(theMat,key,value,incr):
6+
if key not in theMat: #如果key没出先在theMat中
7+
theMat[key]=dict();
8+
theMat[key][value]=incr;
9+
else:
10+
if value not in theMat[key]:
11+
theMat[key][value]=incr;
12+
else:
13+
theMat[key][value]+=incr;#若有值,则递增
14+
15+
user_tags = dict();
16+
tag_items = dict();
17+
user_items = dict();
18+
user_items_test = dict();#测试集数据字典
19+
20+
#初始化,进行各种统计
21+
def InitStat():
22+
data_file = open('delicious.dat')
23+
line = data_file.readline();
24+
while line:
25+
if random.random()>0.1:#将90%的数据作为训练集,剩下10%的数据作为测试集
26+
terms = line.split("\t");#训练集的数据结构是[user, item, tag]形式
27+
user=terms[0];
28+
item=terms[1];
29+
tag=terms[2];
30+
addValueToMat(user_tags,user,tag,1)
31+
addValueToMat(tag_items,tag,item,1)
32+
addValueToMat(user_items,user,item,1)
33+
line = data_file.readline();
34+
else:
35+
addValueToMat(user_items_test,user,item,1)
36+
data_file.close();
37+
38+
#推荐算法
39+
def Recommend(usr):
40+
recommend_list = dict();
41+
tagged_item = user_items[usr];#得到该用户所有推荐过的物品
42+
for tag_,wut in user_tags[usr].items():#用户打过的标签及次数
43+
for item_,wit in tag_items[tag_].items():#物品被打过的标签及被打过的次数
44+
if item_ not in tagged_item:#已经推荐过的不再推荐
45+
if item_ not in recommend_list:
46+
recommend_list[item_]=wut*wit;#根据公式
47+
else:
48+
recommend_list[item_]+=wut*wit;
49+
return sorted(recommend_list.iteritems(), key=lambda a:a[1],reverse=True)
50+
51+
InitStat()
52+
recommend_list = Recommend("48411")
53+
# print recommend_list
54+
for recommend in recommend_list[:10]: #兴趣度最高的十个itemid
55+
print recommend

0 commit comments

Comments
 (0)