python基于深度学习神经网络协同过滤模型(NCF)的图书推荐系统个人文章

神经网络框架使用的是tensorflow,版本是1.14.0。

推荐系统的核心是根据用户的兴趣需求,给用户推荐喜欢的内容。常用的推荐算法有启发式推荐算法,可分为基于用户的协同过滤,基于物品的协同过滤。

主要考虑的是用户和用户之间的相似度,只要找出相似用户喜欢的物品,并预测目标用户对对应物品的评分,就可以找到评分最高的若干个物品推荐给用户。

举例:--------+--------+--------+--------+--------+|X|Y|Z|R|--------+--------+--------+--------+--------+a|5|4|1|5|--------+--------+--------+--------+--------+b|4|3|1||--------+--------+--------+--------+--------+c|2|2|5|1|--------+--------+--------+--------+--------+a用户给X物品打了5分,给Y打了4分,给Z打了1分b用户给X物品打了4分,给Y打了3分,给Z打了1分c用户给X物品打了2分,给Y打了2分,给Z打了5分那么很容易看到a用户和b用户非常相似,但是b用户没有看过R物品,那么我们就可以把和b用户很相似的a用户打分很高的R物品推荐给b用户,这就是基于用户的协同过滤。2、基于物品的协同过滤(ICF)主要考虑的是物品和物品之间的相似度,只有找到了目标用户对某些物品的评分,那么就可以对相似度高的类似物品进行预测,将评分最高的若干个相似物品推荐给用户。

举例:--------+--------+--------+--------+--------+|X|Y|Z|R|--------+--------+--------+--------+--------+a|5|5|1|5|--------+--------+--------+--------+--------+b|5|5|1|2|--------+--------+--------+--------+--------+c|5|5|5|1|--------+--------+--------+--------+--------+d|5||||--------+--------+--------+--------+--------+a用户给X物品打了5分,给Y打了5分,给Z打了1分,给R打了5分b用户给X物品打了5分,给Y打了5分,给Z打了1分,给R打了2分c用户给X物品打了5分,给Y打了5分,给Z打了5分,给R打了1分那么很容易看到a用户、b用户、c用户都喜欢图书X,Y,那么当用户d也喜欢图书X时,就会把图书Y推荐给用户d因为基于用户a、b、c的评分,系统会认为喜欢X书籍的人在很大程度上会喜欢Y书籍。这就是基于物品的协同过滤。3、启发式推荐算法优缺点优点:易于实现,并且推荐结果的可解释性强。

缺点:

难以处理冷启动问题:当一个用户或一个物品没有足够的评分数据时,启发式协同过滤算法无法对其进行有效的预测,因为它需要依赖于已有的评分数据。

对数据稀疏性敏感:如果数据集中存在大量的缺失值,启发式协同过滤算法的预测准确率会受到影响,因为它需要依赖于完整的评分数据来进行预测。

推荐类型单一化:推荐结果容易陷入一个小范围的困境,如果某个用户特别喜欢小说类的图书,那么这种系统就会不断地推荐小说类图书,实际上这个用户很有可能也喜欢历史、文学、传记类的图书,但是囿于冷启动问题,无法进行推荐。

为了解决启发式推荐算法的问题,基于神经网络的协同过滤算法诞生了,神经网络的协同过滤算法可以通过将用户和物品的特征向量作为输入,来预测用户对新物品的评分,从而解决冷启动问题。

对数据稀疏性的鲁棒性:神经网络的协同过滤算法可以自动学习用户和物品的特征向量,并能够通过这些向量来预测评分,因此对于数据稀疏的情况也能进行有效的预测。

更好的预测准确率:神经网络的协同过滤算法可以通过多层非线性变换来学习用户和物品之间的复杂关系,从而能够提高预测准确率。

可解释性和灵活性:神经网络的协同过滤算法可以通过调整网络结构和参数来优化预测准确率,并且可以通过可视化方法来解释预测结果。

所以基于神经网络协同过滤模型是目前推荐系统的主流形态。

安装库:

pipinstallnumpypipinstallpandaspipinstalltensorflow1、构造数据矩阵从用户评分表中加载所有用户的评分数据。

User125710...1610913710468105461054810550013.0NaNNaNNaNNaN...NaNNaN3.05.0NaNNaN125.05.0NaNNaNNaN...5.0NaNNaN3.0NaNNaN235.0NaNNaNNaNNaN...NaN4.05.04.0NaNNaN34NaNNaN2.04.05.0...NaNNaNNaNNaN5.03.0467NaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaN59NaNNaNNaNNaNNaN...NaNNaN4.05.0NaNNaN[6rowsx25columns]有数据的列代表用户评分过,1-5代表评分高低,如果没评过分就是NAN,现在我们的目的就是“猜”出来这些没评分过的图书评分是多少?从而根据评分数据完成图书推荐系统。

使用神经网络计算,必须将数据进行向量化操作。

defget_data_vector(data):'''对矩阵进行向量化,便于神经网络学习'''user_index=data[data.columns[0]]data=data.reset_index(drop=True)data[data.columns[0]]=data.index.astype('int')scaler=5#评分最高为5,把用户的评分归一化到0-1df_vector=pd.melt(data,id_vars=[data.columns[0]],ignore_index=True,var_name='book_id',value_name='rate').dropna()df_vector.columns=['user_id','book_id','rating']df_vector['rating']=df_vector['rating']/scalerdf_vector['user_id']=df_vector['user_id'].apply(lambdax:user_index[x])print(df_vector)returndf_vector输出:

user_idbook_idrating0110.61211.02311.07221.015450.421470.8274101.0301150.6...3、数据进行训练具体流程为:

1、对数据进行打标签操作2、定义64个维度针对向量进行处理(神经网络是非线性多维度)3、创建NCF模型4、合并embeddings向量5、添加全连接层6、编译模型7、模型评估8、模型保存代码:

全部用户预测结果book_1book_2book_5...book_10546book_10548book_10550user_13.1104374.3246922.444845...4.4622384.3998631.958362user_24.5816444.8192674.083292...4.8273014.8413833.094142user_34.7287464.8845804.376239...4.8922474.8998433.552579user_44.5259984.8032954.025316...4.8198804.8325023.011951user_54.7805894.9103664.502923...4.9165624.9228593.671103user_94.5512424.8203214.107899...4.8335544.8457063.052876[6rowsx24columns]模型评估:

神经网络协同推荐(NCF):准确率是0.778,精准度是0.611,召回率是0.778,F1值是0.683可以看到,机器通过神经网络的“学习”,直接“猜出来”所有用户给未评分的书籍可能会评的分数。那么,我们只需要给这些用户推荐他未评分的,但是机器“猜”他评分高的图书即可。

代码:

defget_ncf_recommend(user_id,n=10):'''#获取推荐user_id:用户idn:只取前十个推荐结果'''scaler=5#特征标准化:最高分为5,需要归一化到0~1model=load_model('ncf.dat')#加载模型#加载标签user_encoder=joblib.load('user_encoder.pkl')book_encoder=joblib.load('book_encoder.pkl')result_df={}book_rates=RateBook.objects.all().values('book_id').distinct()forbookinbook_rates:book_id=book['book_id']user=f'user_{user_id}'book=f"book_{book_id}"pred_user_id=user_encoder.transform([user])pred_book_id=book_encoder.transform([book])result=model.predict(x=[pred_user_id,pred_book_id],verbose=0)ifnotRateBook.objects.filter(user_id=user_id,book_id=book_id):#过滤掉用户已评分过的result_df[book_id]=result[0][0]*scalerresult_df_sort=sorted(result_df.items(),key=lambdax:x[1],reverse=True)#推荐结果按照评分降序排列print('预测结果',result_df_sort)recommend_ids=[]forrdsinresult_df_sort[:n]:recommend_ids.append(rds[0])print(f'前{n}个推荐结果',recommend_ids)returnrecommend_ids输出:

预测结果[(10,4.443216919898987),(10548,4.3998634815216064),(1610,4.373263120651245),(2,4.324692189693451),(9137,2.871088683605194),(5,2.4448448419570923),(7,2.353670746088028),(683,2.274640202522278),(51,2.2518157958984375),(24,2.241026908159256),(86,2.1394330263137817),(10550,1.9583618640899658)]前10个推荐结果[10,10548,1610,2,9137,5,7,683,51,24]5、总结我们可以看到,整个流程,深度学习框架Tensorflow帮我们做了大部分的工作,我们其实只是简单的提供了基础数据而已。

首先定义一个embedding(多维空间)用来理解需要学习的原始数据:

一个用户对象(含一个属性userId)

一个图书对象(含三个属性:bookId,userId,rating(用户评分))

这里需要进行学习的具体就是让机器理解那个“评分:rating”的含义)这里定义的embedding维度为64,本质就是让机器把评分rating的值当作成一个64维度的空间来进行理解(其实就是从这个rating值当中提取出64个特征来重新定义这个rating)

随后对embedding进行降维处理:

具体的操作与使用的降维函数曲线有关,这里采用的是先降为32维再降为1维的两道操作方式,原来的代表rating的embedding空间从64维降低到了1维。而此时的输出output对象就是机器对rating完播向量所做出来的“自己的理解”。

最后通过对学习完的输出项output进行mask(遮罩)测试,通过变换不同的mask(遮罩)来测试结果是否与原始数据相近,或一致,从而来证实机器学习的效果,也就是上文提到的反向传播方式的逆运算。

THE END
1.部署)基于springboot的在线图书推荐系统开发在数字化时代,图书馆、在线书店等阅读平台拥有庞大的图书馆藏,读者面临的问题不再是书籍的不足,而是如何从海量的图书中找到符合个人兴趣和需求的内容。传统的图书推荐方式难以满足每位读者的独特需求,因此,研究与开发一种高效的图书个性化推荐系统具有重要意义。 https://blog.csdn.net/m0_62070793/article/details/135899721
2.图书推荐系统源代码python基于python的图书推荐系统简单在线图书推荐网 使用Python语言+Django框架+Mysql数据库 基于用户、物品的协同过滤推荐算法 开发在线图书推荐系统 图书网站推荐系统 个性化推荐算法开发 人工智能、机器学习、分布式大数据开发 SimpleBookRecommendWebPython 一、项目简介 1、开发工具和使用技术 https://blog.51cto.com/u_16213717/7822128
3.ssh(Spring+Struts+Hibernate)开发框架实现图书在线推荐系统newssh(Spring+Struts+Hibernate)开发框架实现图书在线推荐系统newbookscfrs 一、项目简介 1、首页:http://localhost:8080/newbookscfrs/ 2、项目采用ssh框架(spring3.0,struts2.1,hibernate3.3),并使用html5、javascript、qjuery、layer、webuploader、bootstrapt等技术 https://www.jianshu.com/p/b3f817930be0
4.囤书app新功能解析:智能推荐系统上线囤书App是一款广受欢迎的在线书籍购买平台,以方便快捷的购书方式、丰富的书籍资源深受广大书友喜爱。近日,囤书App再次迎来新功能——智能推荐系统。这一新功能旨在为用户提供更精准、个性化的购书体验,本文将对这一新功能进行深入解析。 二、智能推荐系统解析 https://www.sousou.com/bk/523224.html
5.Python全栈工程师MOOC中国项目六:书城图书推荐系统 项目亮点:根据网站后台数据开发图书推荐模型;针对不同用户推荐不同的图书;掌握算法 毕业项目:在线影院推荐系统 项目亮点:综合实战,要求高;全面检阅全栈应用能力 预备知识 课程无需任何基础,只要会用电脑就可以啦。老师会从0开始教起,只要你保证有一颗向上进步的心,和坚持的努力,就可以开始学习https://www.mooc.cn/course/14712.html
6.图书推荐系统(仿黑马头条推荐系统)仿黑马头条做的图书推荐系统,全部代码都已跑通验证过,本站技术人员独立实现,如在全网其它地方购买本资源,如知乎、CSDN、B站等,出现软件运行问题本站概不负责!!!本资源包含完整前后端和推荐系统源码,有单机和集群版,可根据自己的实际需求做需改,导入虚拟机即可完美运行,适合想学习推荐系统的小白,在校大学生毕业设计参https://zhikuba.com/post/12556194444544
7.大数据实训案例——电影推荐系统(Scala版)电子书发布时间:2022-8-09|云展网画册制作公司宣传册其他大数据实训案例——电影推荐系统(Scala版) 关注 人邮教育 粉丝: 0 人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”的出版宗旨,不断发展壮大,成为集图书、https://www.yunzhan365.com/basic/29509929.html
8.干货一文教你构建图书推荐系统(附代码)【导读】推荐系统在电子商务网站中广泛被使用,如何向用户推荐最适合其品味的产品是研究的重点。本文在Book Crossing数据集的基础上进行图书推荐系统的研究,详细讲解了构建推荐系统的步骤:加载数据集(图书、用户、评分表)、检查各个数据集等,并实现了基于流行度的简单推荐系统和基于协同过滤的推荐系统(基于用户和基于itemhttps://www.cloud.tencent.com/developer/article/1143329
9.《深度学习推荐系统》(王喆)简介书评在线阅读当当网图书频道在线销售正版《深度学习推荐系统》,作者:王喆,出版社:电子工业出版社。最新《深度学习推荐系统》简介、书评、试读、价格、图片等相关信息,尽在DangDang.com,网购《深度学习推荐系统》,就上当当网。http://product.dangdang.com/28522361.html
10.基于数据挖掘的图书馆推荐系统的设计与实现本文依据数据挖掘和信息可视化理论,结合图书馆现有图书检索系统,进行高校图书馆推荐系统的设计。本文以某高校信息管理系统的图书借阅历史记录为数据源,结合协同过滤技术等算法进行图书馆推荐系统的设计,所设计系统采用Django框架,利用jieba分词、amCharts图表以及D3.js可视化库赋予系统图书推荐排行、个性化推荐以及流通数据同步https://cdmd.cnki.com.cn/Article/CDMD-10422-1018002216.htm
11.一种基于大数据分析的图书个性化推荐系统.pdf免费在线预览全文 本发明公开了一种基于大数据分析的图书个性化推荐系统,本发明涉及图书个性化推荐技术领域,包括打卡单元、阅读爱好分析单元、阅读推荐单元、周边推荐单元、书籍购买单元、关键词监测单元、访问浏览监测单元和数据上传单元。本发明所述的一种基于大数据分析的图书个性化推荐系统,通过打卡阅读的方式将读者、图书https://max.book118.com/html/2024/0302/8031024120006041.shtm
12.推荐系统2024pdfepubmobi电子书本书全面阐述了开发最先进推荐系统的方法,其中呈现了许多经典算法,并讨论了如何衡量推荐系统的有效性。书中内容分为基本概念和最新进展两部分:前者涉及协同推荐、基于内容的推荐、基于知识的推荐、混合推荐方法,推荐系统的解释、评估推荐系统和实例分析;后者包括针对推荐系统的攻击、在线消费决策、推荐系统和下一代互联网https://onlinetoolsland.com/books/24746415
13.基于人工智能的公共图书馆智慧服务探索3.3 智慧阅读推荐系统 读者来到公共图书馆最主要的目的大都是寻找阅读资源,当然我们也会听到“实体图书馆正逐渐成为人们的自习室”[10]这样一个观点,那么自习者没有阅读需求吗?答案当然是否定的,通过走访调研得知公共图书馆自习座位使用率,通常会因每年的考试季和假期而上升,而考试内容和课程学习资料正是他们所关注的https://www.fx361.com/page/2023/0116/16749880.shtml
14.《深度学习推荐系统(全彩)(博文视点出品)(ChatGPT背后核心技术京东JD.COM图书频道为您提供《深度学习推荐系统(全彩)(博文视点出品)(ChatGPT背后核心技术)》在线选购,本书作者:,出版社:电子工业出版社。买图书,到京东。网购图书,享受最低优惠折扣!https://item.jd.com/12630209.html
15.这就是推荐系统:核心技术原理与企业应用最新章节胡澜涛著本书以一个多年在工业界从事推荐系统研发工作的算法工程师的视角详细介绍了推荐体系中的各个重要组成部分,在标签体系、用户画像、多模态内容理解的特点、优化效果的实践技巧等方面,以及其他介绍推荐系统的图书中容易略过的地方,都做了很细致的阐述,并结合具体的实战场景做了清晰的讲解。该如何评估推荐系统的好坏是一个https://m.zhangyue.com/readbook/12898518/3
16.在线书城系统三、个性化的推荐服务:在线书城系统通常会根据用户的浏览、购买记录等数据,为用户提供个性化的图书推荐服务。这种推荐系统可以根据用户的兴趣爱好、阅读习惯等给出相应的推荐,帮助用户发现更多感兴趣的图书,提高用户的阅读体验。 四、更多的购书优惠:在线书城系统常常推出各种购书优惠活动,如满减、折扣、赠品等。这些优惠活https://www.360doc.cn/article/75092861_1103274043.html
17.线上线下整合营销传播方式有哪些- 豆瓣图书与线下书店合作,通过线上线下的整合提供更全面的图书购买和阅读体验。 - 通过共享会员体系和书籍推荐系统,提高了豆瓣图书和线下书店的用户黏性和销售额。 3.2 Nike线上线下整合的创新营销策略 - Nike通过线上线下整合的创新营销策略,成功提升了品牌的影响力和销售额。 http://www.a-yes.cn/zhyx/26905.html