基于标签的推荐系统学习(1)
2014-09-21 20:59
295 查看
最近看一些推荐系统的东西。比较感兴趣的是基于标签的推荐系统。也就是通过用户的标签行为建立起用户和目标物品的联系,从而挖掘用户的兴趣或者是尽兴定向的推荐。
一个用户的标签行为一般由一个三元组组成<用户,物品,标签>(<u,i,b>)即用户u给物品i打上了b标签。
一个简单的基于标签的推荐系统可以通过如下步骤实现:
1.统计每个用户最常用标签;
2.对于每个标签,统计被打过这个标签次数最多的物品;
3.对于一个用户,找到他常用的标签,从而找到具有这些标签的热门物品进行推荐。
从而可以得到用户u对于物品i的兴趣公式:
假设用records来表示来存储标签数据的三元组,即records[i]=[user, item, tag]
user_tags存储用户u打过标签b的次数,即user_tags[u][b]=n;
tag_items存储物品i被打过标签b的次数,即tag_item[b][i]=n;
user_items存储用户所打过标签的物品,即user_items[u][i]=n;
一个用户的标签行为一般由一个三元组组成<用户,物品,标签>(<u,i,b>)即用户u给物品i打上了b标签。
一个简单的基于标签的推荐系统可以通过如下步骤实现:
1.统计每个用户最常用标签;
2.对于每个标签,统计被打过这个标签次数最多的物品;
3.对于一个用户,找到他常用的标签,从而找到具有这些标签的热门物品进行推荐。
从而可以得到用户u对于物品i的兴趣公式:
假设用records来表示来存储标签数据的三元组,即records[i]=[user, item, tag]
user_tags存储用户u打过标签b的次数,即user_tags[u][b]=n;
tag_items存储物品i被打过标签b的次数,即tag_item[b][i]=n;
user_items存储用户所打过标签的物品,即user_items[u][i]=n;
#coding: UTF-8 import random #统计各类数量 def addValueToMat(theMat,key,value,incr): if key not in theMat: #如果key没出先在theMat中 theMat[key]=dict(); theMat[key][value]=incr; else: if value not in theMat[key]: theMat[key][value]=incr; else: theMat[key][value]+=incr;#若有值,则递增 user_tags = dict(); tag_items = dict(); user_items = dict(); user_items_test = dict();#测试集数据字典 #初始化,进行各种统计 def InitStat(): data_file = open('xxx.dat') line = data_file.readline(); while line: if random.random()>0.1:#将90%的数据作为训练集,剩下10%的数据作为测试集 terms = line.split("\t");#训练集的数据结构是[user, item, tag]形式 user=terms[0]; item=terms[1]; tag=terms[2]; addValueToMat(user_tags,user,tag,1) addValueToMat(tag_items,tag,item,1) addValueToMat(user_items,user,item,1) line = data_file.readline(); else: addValueToMat(user_items_test,user,item,1) data_file.close(); #推荐算法 def Recommend(usr): recommend_list = dict(); tagged_item = user_items[usr];#得到该用户所有推荐过的物品 for tag_,wut in user_tags[usr].items():#用户打过的标签及次数 for item_,wit in tag_items[tag_].items():#物品被打过的标签及被打过的次数 if item_ not in tagged_item:#已经推荐过的不再推荐 if item_ not in recommend_list: recommend_list[item_]=wut*wit;#根据公式 else: recommend_list[item_]+=wut*wit; return recommend_list
相关文章推荐
- 笔记:基于标签的推荐系统、基于图的推荐算法、PersonalRank
- 推荐系统学习(2)——基于TF-IDF的改进
- 《推荐系统》基于标签的用户推荐系统
- 基于购买与回收双向数据的推荐系统学习总结(1)
- 基于spark mlllib的推荐系统学习笔记
- 基于标签的推荐系统
- 基于购买与回收双向数据的推荐系统学习总结(2)
- 《推荐系统》基于标签的用户推荐系统
- 源码推荐(0710B):基于Block的系统PickerImageController的封装,简单的搜索标签
- mahout学习(二)--基于Mahout的电影推荐系统
- 推荐系统学习(2)——基于TF-IDF的改进
- 如何学习基于ARM平台的嵌入式系统(2)
- 浅析如何学习基于ARM平台的嵌入式系统
- 基于chunk的短语级标签自动抽取 推荐
- 房地产业务学习(06)-开发项目管理的难点分析&IT系统价值 推荐
- 基于lucene.net的网站标签系统设计
- 如何学习嵌入式系统(基于ARM平台)
- [学习笔记]UML小结以及基于领域模型的系统设计初步
- 基于mongodb的标签系统设计
- 房地产业务学习(07)-基于合约规划的动态成本过程控制 推荐