grouplens上的movielens数据集_ItemCF算法的Python实现,数据基于MovieLens
数据从
MovieLens数据下载地址
https://grouplens.org/datasets/movielens/
下载。
我选的是1MB版本,大约10W+评分,9K+电影,600+用户。
使用ratings.csv,格式为userId,movieId,评分,时间戳。
步骤:
1、解析CSV文件,构建训练集。
2、计算物品相似度矩阵,并归一化。
3、给指定用户推荐TopN。
#!/usr/bin/python3import mathimport csvimport datetimeimport heapqdef BuildTarin(startTime): """ 处理数据集,格式: 用户ID:{物品ID,评分} """ train = dict() with open('/Users/liupeng/Downloads/ml-latest-small/ratings3.csv') as f: f_csv = csv.reader(f) for row in f_csv: userId=row[0] itemId=row[1] score=row[2] train.setdefault(int(userId),{}) train[int(userId)][int(itemId)] = float(score) endTime=datetime.datetime.now() print('处理数据集耗时:{0}秒'.format((endTime-startTime).seconds)) return traindef ItemSimilarity(train): """ 计算物品-物品相似度矩阵 物品相似度 w(i,j)=(N(i)∩N(j))/sqrt(N(i)*N(j)) """ startTime = datetime.datetime.now() #物品-物品矩阵 格式:物品ID1:{物品ID2:同时给两件物品评分的人数} C=dict() #物品-用户矩阵 格式:物品ID:给物品评分的人数 N=dict() for userId,items in train.items(): for itemId,source in items.items(): N.setdefault(itemId,0) #给物品打分的人数+1 N[itemId] += 1 C.setdefault(itemId,{}) for i in items.keys(): if(i==itemId): continue C[itemId].setdefault(i,0) #同时给两个物品打分的人数 C[itemId][i] += 1 #如果要对活跃用户惩罚 #C[itemId][i]+=1/math.log(1+len(items)*1.0) endTime=datetime.datetime.now() print('处理矩阵耗时:{0}秒'.format((endTime-startTime).seconds)) ############################################################### startTime = datetime.datetime.now() #计算物品相似度矩阵 W=dict() for itemId,relatedItems in C.items(): W.setdefault(itemId, []) for relatedItemId,count in relatedItems.items(): W[itemId].append([relatedItemId,count/math.sqrt(N[itemId]*N[relatedItemId])]) #归一化 wmax = max(item[1] for item in W[itemId]) for item in W[itemId]: item[1] /= wmax endTime=datetime.datetime.now() print('计算物品相似度耗时:{0}秒'.format((endTime-startTime).seconds)) return W def Recommendation(train,userId,W,K,N): """给用户推荐物品列表 Args: train:训练集 userId:用户ID W:物品相似度矩阵 K:取和物品j最相似的K个物品 N:推荐N个物品 Return: 推荐列表 """ startTime = datetime.datetime.now() rank=dict() items=train[userId] #遍历用户评分的物品列表 for itemId,score in items.items(): #取出与物品itemId最相似的K个物品 for j,wij in sorted(W[itemId],key=lambda x: x[1],reverse=True)[0:K]: #如果这个物品j已经被用户评分了,舍弃 if j in items.keys(): continue #对物品ItemID的评分*物品itemId与j的相似度 之和 #rank.setdefault(j,0) #rank[j] += score*wij rank.setdefault(j,{}) rank[j].setdefault("weight",0.0) rank[j].setdefault("reason",{}) rank[j]["weight"] += score*wij rank[j]["reason"][itemId]=score*wij endTime=datetime.datetime.now() print('推荐耗时:{0}秒'.format((endTime-startTime).seconds)) #堆排序,推荐权重前N的物品 return heapq.nlargest(N, rank.items(), key=lambda x: x[1]['weight']) if __name__ == "__main__": startTime = datetime.datetime.now() #构建训练集 train=BuildTarin(startTime) #计算物品相似度矩阵 W=ItemSimilarity(train) #给用户推荐TopN topN=Recommendation(train,1,W,10,5) endTime = datetime.datetime.now() print ('总耗时:{0}秒'.format((endTime - startTime).seconds)) print(topN)
结果:
grouplens上的movielens数据集_ItemCF算法的Python实现,数据基于MovieLens相关推荐
- movielens数据集导入mysql_我来做数据--如何对数据进行处理以满足机器学习技术(一):MovieLens数据...
标签(空格分隔): 数据分析 python 数据挖掘 MovieLens 1M数据集 一组从20世纪90年末到21世纪初由MovieLens用户提供的电影评分数据.这些数据中包括电影评分.电影元数据( ...
- 基于颜色布局描述符(CLD)图像特征提取算法使用Python实现简单的人脸检测功能并使用PyQt5构建简单的功能界面(数字图像处理课程实验)
文章目录 一.环境准备 二.数据集准备 三.项目结构 四.完整参考代码 imgCode/testUI3.py imgCode/test2.py 五.运行结果 测试一: 测试二 六.参考链接 一.环境准 ...
- python亲和性分析法推荐电影论文_数据挖掘-MovieLens数据集_电影推荐_亲和性分析_Aprioro算法...
#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Tue Feb 7 14:38:33 201 ...
- ML之KG:基于MovieLens电影评分数据集利用基于知识图谱的推荐算法(networkx+基于路径相似度的方法)实现对用户进行Top电影推荐案例
ML之KG:基于MovieLens电影评分数据集利用基于知识图谱的推荐算法(networkx+基于路径相似度的方法)实现对用户进行Top电影推荐案例 目录 基于MovieLens电影评分数据集利用基于 ...
- ML之RL:基于MovieLens电影评分数据集利用强化学习算法(多臂老虎机+EpsilonGreedy策略)实现对用户进行Top电影推荐案例
ML之RL:基于MovieLens电影评分数据集利用强化学习算法(多臂老虎机+EpsilonGreedy策略)实现对用户进行Top电影推荐案例 目录 基于MovieLens电影评分数据集利用强化学习算 ...
- 【推荐系统】基于MovieLens数据集实现的协同过滤算法
利用用户行为数据 如何了解一个人呢? 通过用户留下的文字和行为了解用户兴趣和需求. 实现个性化推荐的最理想情况是用户在注册的时候主动告知其喜欢什么. 3个缺点: 现在的自然语言理解技术很难理解用户用来 ...
- 史上最全推荐系统传统算法合集
©作者 | YBH 学校 | 上海交通大学 研究方向 | 推荐系统 我花了半个多月将推荐系统传统算法分别进行了总结归纳,应该时目前全网最全的版本了.希望对大家了解推荐系统传统算法有所帮助. 推荐系统的 ...
- 【资源】史上最全数据集汇总
无论是数据挖掘还是目前大热的深度学习,都离不开"大数据".大公司们一般会有自己的数据,但对于创业公司或是高校老师.学生来说,"Where can I get large ...
- 【收藏】史上最全推荐系统传统算法合集
猜你喜欢 0.[免费下载]2021年12月热门报告盘点1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.全民K歌推荐系统算法.架构及后台实现4.微博推荐算法实践与机器学习平台演进5 ...
最新文章
- 设计模式之C#实现--FactoryMethod
- 我与我的专业计算机作文500字,我的好朋友——电脑
- Velocity语法大全
- jQuary的相关动画效果
- java 接口 print_Java-接口练习
- 解决Mac没有任何来源问题
- 红橙Darren视频笔记 view的invalidate调用draw方法的流程(源码分析基于api 29)
- 监控管理平台 OpenNMS
- java生成json字符串,真香
- jsp页面之间传中文参数显示乱码问题的解决
- assert()理解
- Synergy两台电脑使用同一个鼠标和键盘
- 【Python案例】一键自动抠图生成证件照
- 自己写歌怎么编曲?4款超好用编曲软件推荐
- 摄像头云台的设计,组装与使用方法
- 用md5值识别相似图片 python
- 台式计算机 cpu型号大全,电脑cpu的型号有哪些?
- 解决使用 Bluetooth Audio Receiver 蓝牙传音卡顿问题
- 数据结构之二叉树 一
- 假设检验中的P 值 (P value)
热门文章
- 统计并输出某给定字符在给定字符串中出现的次数_查找常用字符
- Qt for Android 开发环境配置
- Android Glide 加载圆形图片(绝对实用)
- python爬虫贴吧_Python爬虫简单实现,贴吧图片一键下
- Unable to load script from assets ‘index.android.bundle‘.
- openrowset excel 科学计数_txt的数据导入excel中身份证或银行卡显示成科学计数如何解决...
- Android Studio开发版(debug)和发布版(release)获取SHA1和MD5和SHA256的最原始方法
- 英语阅读计算机病毒是指,2016年职称计算机考试真题及答案
- kali换源无法保存_Kali Linux 2.0更新源无法正常使用(解决)
- React Native发布重构路线图