《推荐系统实战》——基于物品的协同过滤实现
来源:互联网 发布:公司职位划分 知乎 编辑:程序博客网 时间:2024/06/05 19:02
一:物品相似度计算&推荐源代码(算法参考项亮《推荐系统实战》P55):
其他代码模块参考我的另外一篇博客:
这里写链接内容
def ItemSimilarity(self, train=None): train = self.traindata or train #calculate co-rated users between items C = dict() N = dict() for u , items in train.items(): for i in items: N.setdefault(i,0) N[i] += 1 for j in items: if i == j: continue C.setdefault(i,{}) C[i].setdefault(j, 0) C[i][j] += 1 #calculate final similarity matrix W self.W=dict() for i, related_items in C.items(): for j ,cij in related_items.items(): if i==j: continue self.W.setdefault(i,{}) self.W[i].setdefault(j,0) self.W[i][j]=cij/math.sqrt(N[i]*N[j]*1.0) return self.W def recommend(self,user_id,train=None ,k=8,nitem=40): train = self.traindata or train rank=dict() ru = train[user_id] for i ,pi in ru.items(): for j ,wj in sorted(self.W[i].items(),key = lambda x : x[1],reverse=True)[0:k]: if j in ru: continue rank.setdefault(j,0) rank[j] += pi*wj return dict(sorted(rank.items(),key = lambda x :x[1],reverse = True)[0:nitem])
测试语句:
w=cf.ItemSimilarity()print w['242']['86']print "**************************"R=cf.recommend('196')print R.keys()
实验结果:
1,物品id=242 与物品id=86的相似度
w[‘242’][‘86’]
2,对user_id=196的推荐的物品
3,结果(K=8取最相似的8个物品的集合,nitem=10 取推荐的前10个物品,数据集:u1.base)
数据集:u.date
问题:不知道为啥,这个跑的过程相当慢O__O “…,比userbasedcf慢4倍左右
二:改进算法
def ItemSimilarity(self, train=None): train = self.traindata or train #calculate co-rated users between items C = dict() N = dict() self.W=dict() for u , items in train.items(): for i in items.keys(): N.setdefault(i,0) N[i] += 1 for j in items.keys(): if i == j: continue C.setdefault(i,{}) C[i].setdefault(j, 0) C[i][j] += 1/math.log( 1+ len(items)*1.0) #calculate final similarity matrix W for i, related_items in C.items(): for j ,cij in related_items.items(): if i==j: continue self.W.setdefault(i,dict()) self.W[i][j] = cij/math.sqrt(N[i]*N[j]*1.0)
运行结果:
0 0
- 《推荐系统实战》——基于物品的协同过滤实现
- 推荐算法——基于物品的协同过滤算法
- Spark—基于物品的协同过滤推荐算法
- mapreduce实现ItemCF——基于物品的协同过滤
- 用Hadoop流实现mapreduce版推荐系统基于物品的协同过滤算法
- 协同过滤--基于物品的推荐案例
- 基于物品的协同过滤推荐算法
- 基于物品的协同过滤推荐
- 基于物品的协同过滤-电影推荐
- 基于用户的协同过滤和基于物品的协同过滤推荐算法原理和实现
- 推荐系统简介——基于协同过滤的推荐
- 推荐系统简介——基于协同过滤的推荐
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms”
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms” .
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms”
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms” .
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms”
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms”
- 寻找最大的K个数
- windows下安装科学计算模块 numpy pandas等
- iOS中生成私有目录NSSearchPathForDirectoriesInDomains
- 【坑坑坑】数据结构 Contest
- 关于移动WebApp 的 meta 标签
- 《推荐系统实战》——基于物品的协同过滤实现
- SWT、Swing 或 AWT:哪个更适合您?
- 动态规划专题小结:最长上升子序列(LIS)问题
- linux目录处理命令
- codeforce543B
- [POI 2012]Cloakroom(DP)
- 多表关联
- Path Sum II
- 黑马程序员_05. 面向对像的三大特征(详解)