版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于协同过滤算法的餐厅推荐系统的设计与实现摘要本项目以餐厅推荐系统为研究背景,使用Python开发语言和Django框架进行设计。基于协同过滤算法的餐厅推荐系统是比较常见的设计方式,协同过滤通过整合用户意见,筛选出用户可能感兴趣的信息。该系统主要根据用户选择的标签喜好,运用协同过滤算法进行筛选,把评价度高的餐厅优先推荐给用户,为用户提供个性化的餐厅推荐,餐厅推荐系统可便捷快速帮助用户发掘新美食体验。关键词餐厅推荐系统设计;协同过滤算法;Django框架
AbstractThisprojecttakestherestaurantrecommendationsystemastheresearchbackground,anddesignsitusingPythondevelopmentlanguageandDjangoframework.Arestaurantrecommendationsystembasedoncollaborativefilteringalgorithmisacommondesignapproach.Collaborativefilteringintegratesuseropinionsandfiltersoutinformationthatusersmaybeinterestedin.Thesystemmainlyusescollaborativefilteringalgorithmstofilterbasedonuserselectedtagpreferences,andprioritizeshighlyratedrestaurantstousers,providingpersonalizedrestaurantrecommendations.Therestaurantrecommendationsystemcanhelpusersdiscovernewfoodexperiencesmoreeasilyandquickly.KeywordsRestaurantrecommendationsystemdesign;Collaborativefilteringalgorithm;Djangoframework
目录TOC\o"1-3"\h\u1绪论 [10]。数据库设计应充分反映真实事物之间的关系,并满足不同程序员的数据处理要求。同时,设计应该易于理解,使其快速启动。此外,概念模型需要随着不断变化的应用而灵活调整。因此,数据库设计应易于修改和修改适应各种变化和需求的功能。通过合理的数据层设计,餐厅推荐系统能够提供准确、个性化的推荐服务,使用户能够轻松发现新的美食体验。同时,良好的数据库设计能够确保系统的稳定性和可维护性,为系统的长期运行提供保障。关于我们E-R如图所示:图4.3.1关于我们E-R图用户信息E-R如图所示:图4.3.2用户信息E-R图美食资讯E-R如图所示:图4.3.3美食资讯E-R图餐厅信息E-R如图所示:图4.3.4餐厅信息E-R图菜品信息E-R如图所示:图4.3.5菜品信息E-R图表4.3.1美食资讯评论表字段名称类型长度字段说明主键默认值idbigint主键主键addtimetimestamp创建时间CURRENT_TIMESTAMPrefidbigint关联表iduseridbigint用户idavatarurllongtext4294967295头像nicknamevarchar200用户名contentlongtext4294967295评论内容replylongtext4294967295回复内容表4.3.2美食评论表字段名称类型长度字段说明主键默认值idbigint主键主键addtimetimestamp创建时间CURRENT_TIMESTAMPrefidbigint关联表iduseridbigint用户idavatarurllongtext4294967295头像nicknamevarchar200用户名contentlongtext4294967295评论内容replylongtext4294967295回复内容表4.3.3菜品信息评论表字段名称类型长度字段说明主键默认值idbigint主键主键addtimetimestamp创建时间CURRENT_TIMESTAMPrefidbigint关联表iduseridbigint用户idavatarurllongtext4294967295头像nicknamevarchar200用户名contentlongtext4294967295评论内容replylongtext4294967295回复内容表4.3.4配置文件字段名称类型长度字段说明主键默认值idbigint主键主键namevarchar100配置参数名称valuevarchar100配置参数值urlvarchar500url表4.3.5菜系类型字段名称类型长度字段说明主键默认值idbigint主键主键addtimetimestamp创建时间CURRENT_TIMESTAMPcaixileixingvarchar200菜系类型imagelongtext4294967295图片表4.3.6用户表字段名称类型长度字段说明主键默认值idbigint主键主键usernamevarchar100用户名passwordvarchar100密码imagevarchar200头像rolevarchar100角色管理员addtimetimestamp新增时间CURRENT_TIMESTAMP表4.3.7菜品信息字段名称类型长度字段说明主键默认值idbigint主键主键addtimetimestamp创建时间CURRENT_TIMESTAMPcantingmingchengvarchar200餐厅名称caipinmingchengvarchar200菜品名称caixileixingvarchar200菜系类型zhuliaovarchar200主料peiliaovarchar200配料pingfendouble评分tesevarchar200特色caipinjieshaolongtext4294967295菜品介绍caipintupianlongtext4294967295菜品图片thumbsupnumint赞0续表4.3.7菜品信息字段名称类型长度字段说明主键默认值crazilynumint踩0clicktimedatetime最近点击时间discussnumint评论数0storeupnumint收藏数0表4.3.8关于我们字段名称类型长度字段说明主键默认值idbigint主键主键addtimetimestamp创建时间CURRENT_TIMESTAMPtitlevarchar200标题subtitlevarchar200副标题contentlongtext4294967295内容picture1longtext4294967295图片1picture2longtext4294967295图片2picture3longtext4294967295图片3表4.3.9收藏表字段名称类型长度字段说明主键默认值idbigint主键主键addtimetimestamp创建时间CURRENT_TIMESTAMPuseridbigint用户idrefidbigint商品idtablenamevarchar200表名续表4.3.9收藏表字段名称类型长度字段说明主键默认值namevarchar200名称picturelongtext4294967295图片typevarchar200类型(1:收藏,21:赞,22:踩,31:竞拍参与,41:关注)1inteltypevarchar200推荐类型remarkvarchar200备注表4.3.10美食资讯表字段名称类型长度字段说明主键默认值idbigint主键主键addtimetimestamp创建时间CURRENT_TIMESTAMPbiaotivarchar200标题biaoqianvarchar200标签jianjielongtext4294967295简介neironglongtext4294967295内容fabushijiandatetime发布时间tupianlongtext4294967295图片discussnumint评论数0storeupnumint收藏数0表4.3.11用户信息表字段名称类型长度字段说明主键默认值idbigint主键主键addtimetimestamp创建时间CURRENT_TIMESTAMPzhanghaovarchar200账号mimavarchar200密码xingmingvarchar200姓名xingbievarchar200性别dianhuavarchar200电话touxianglongtext4294967295头像表4.3.12餐厅信息表字段名称类型长度字段说明主键默认值idbigint主键主键addtimetimestamp创建时间CURRENT_TIMESTAMPbiaotivarchar200标题dizhivarchar200地址fengmianlongtext4294967295封面pingfendouble评分taocanlongtext4294967295套餐taocanjiadouble套餐价junjiadouble均价pinglunshuint评论数thumbsupnumint赞0续表4.3.12餐厅信息表字段名称类型长度字段说明主键默认值crazilynumint踩0discussnumint评论数05系统设计与实现5.1协同过滤算法推荐系统的实现1.收集数据:收集用户对系统相关的一些数据。2.在计算用户相似度时,我们选用皮尔逊相似系数作为衡量指标,用以评估用户之间的相似程度。这一方法有助于准确反映用户间的相似性。3.生成推荐列表:为了生成个性化推荐,我们会根据计算出的用户相似度来预测评分,这一预测基于用户之间的相似性,在为用户提供与其兴趣和偏好相匹配的推荐。通过上述步骤,我们能够为用户生成个性化的推荐列表,从而满足他们的需求并提供相关推荐。这样的推荐系统不仅考虑了用户的历史行为,还通过计算用户间的相似度来提高推荐的准确性。计算用户之间的皮尔逊相关系数,避免出现当用户没有收藏列表等信息的情况下,自身和自身的相似度为0的情况因为当用户收藏为0的情况下,其one_hot编码后的特征列表为[0,0,0,0...],此时计算余弦相似度的时候数值为0,就导致自己和自己的相似度为0的情况,影响推荐结果。
similarity_matrix=np.zeros((matrix.shape[0],matrix.shape[0]))
foriinrange(matrix.shape[0]):
forjinrange(i,matrix.shape[0]):
ifi==j:
similarity_matrix[i,j]=1.0
else:
non_zero_indices=np.where((matrix[i]!=0)&(matrix[j]!=0))[0]
ifnon_zero_indices.size>0:
sim,_=pearsonr(matrix[i,non_zero_indices],matrix[j,non_zero_indices])
similarity_matrix[i,j]=sim
similarity_matrix[j,i]=sim
returnsimilarity_matrix5.2系统设计导入Django框架。#!/usr/bin/envpythonimportosimportsysif__name__==“__main__”:os.environ.setdefault(“DJANGO_SETTINGS_MODULE”,“dj2.settings”)try:fromdjango.core.managementimportexecute_from_command_lineexceptImportErrorasexc:raiseImportError(“Couldn’timportDjango.Areyousureit’sinstalledand““availableonyourPYTHONPATHenvironmentvariable?Didyou““forgettoactivateavirtualenvironment?”)fromexcexecute_from_command_line(sys.argv)修改首页推荐算法,协同过滤算法(使用交叉推荐计算),首页推荐只需要六个商品,首先根据当前登录用户的id获取对应的检索信息,得到其收藏的信息,当前用户的索引是第0行。defcaipinxinxi_autoSort2(request):
ifrequest.methodin["POST","GET"]:
req_dict=request.session.get("req_dict")
cursor=connection.cursor()
login_user_id=request.session.get("params").get("id")
type_food=[]
#食物类型列表
citi_list=[]
#相似矩阵
leixing=set()
try:
cursor.execute("SELECTcaixileixingfromcaixileixing")
#查询菜系类型,获得对应的菜系类别,用于构建one_hot编码列表
rows=cursor.fetchall()
forrowinrows:
ifrow[0]isnotNone:
type_food.append(row[0])#首先根据用户id获取对应的商品信息,得到对应的收藏的基本信息表,用于构建相似矩阵
cursor.execute("SELECTinteltype,userid,refidFROM`storeup`whereuserid=%d"%(login_user_id))
rows=cursor.fetchall()
#生成权重矩阵根据用户收藏的对应菜系进行one_hot编码
one_hot_type=[0]*len(type_food)
forrowinrows:
one_hot_type[type_food.index(row[0])]=1
#表明当前用户收藏过此类商品
citi_list.append(one_hot_type)
print("用户喜好特征列表",citi_list)再次检索数据库,得到第二组用户信息的收藏列表根据收藏构建其他用户的相似矩阵,计算相应数据的相似度,得到对应的商品信息。
#继续访问数据库,获取其他用户的收藏列表
user_dict={}
cursor.execute("SELECTinteltype,useridFROM`storeup`whereuserid!=%d"%login_user_id)
rows=cursor.fetchall()
#获取其他用户one_hot编码后的特征列表
forrowinrows:
ifrow[0]isnotNone:
ifrow[1]notinuser_dict.keys():
#当前用户id没有被检索到
one_hot_type=[0]*len(type_food)
one_hot_type[type_food.index(row[0])]=1
user_dict[row[1]]=one_hot_type
else:
#已经有当前id情况下,执行更新
user_dict[row[1]][type_food.index(row[0])]=1
foriinuser_dict.values():
citi_list.append(i)
print("特征矩阵",citi_list)
#生成相似度矩阵其中索引0为当前登录用户
citi_list=np.array(citi_list)
#计算皮尔逊相关系数,得到相似矩阵
user_similarity_matrix=pearson_similarity(citi_list)
print("相似度矩阵",user_similarity_matrix)
#对角线填充为0避免用户推荐自身
np.fill_diagonal(user_similarity_matrix,0)
target_user_index=0
#进行相似度排序获得最大相似度的用户
similar_users=np.argsort(user_similarity_matrix[target_user_index])[::-1]
recommended_user=similar_users[0]
#获取相似用户的商品类别
nonzero_indices=np.nonzero(citi_list[recommended_user])[0]
#构建推荐的商品类型矩阵
foriinnonzero_indices:
leixing.add(type_food[i])
exceptExceptionase:
leixing=set()
L=[]最后,检索对应的商品详细信息,返回对应的数据。
cursor.execute("select*fromcaipinxinxiwherecaixileixingin('%s"%("','").join(
leixing)+"')unionallselect*fromcaipinxinxiwherecaixileixingnotin('%s"%("','").join(
leixing)+"')")
desc=cursor.description
data_dict=[dict(zip([col[0]forcolindesc],row))forrowincursor.fetchall()]
foronline_dictindata_dict:
forkeyinonline_dict:
if'datetime.datetime'instr(type(online_dict[key])):
online_dict[key]=online_dict[key].strftime(
"%Y-%m-%d%H:%M:%S")
else:
pass
L.append(online_dict)
returnJsonResponse({"code":0,"msg":'',"data":{"currPage":1,"totalPage":1,"total":1,"pageSize":5,
"list":L[0:int(req_dict["limit"])]}})5.3前台用户功能的实现5.3.1系统首页界面用户在进入系统后,首先看到的就是系统的首页界面,为用户提供了清晰的信息导航,上面列出了几个关键的选项,如“首页”、“餐厅信息”、“菜品信息”和“美食资讯”等,方便用户快速找到他们感兴趣的内容。图5.3.1首页界面5.3.2系统注册登录界面当用户进入系统时需要进行注册、登录,进入用户注册、用户登录界面。图5.3.2用户登录页面图5.3.3用户注册页面5.3.3系统查询搜索页面用户点击菜品信息,在搜索栏中输入餐厅或菜品信息进行查询。查询结果将展示餐厅名字、菜品信息、具体菜系及评分等详细信息,用户还可以选择收藏等操作。图5.3.4菜品信息页面当用户点击有关美食的信息时,可以在查询页面的搜索栏中输入标题。查询结果将显示地址、标签、简介、内容和发布时间等信息。图5.3.5美食资讯页面5.3.4个人中心页面当用户点击个人中心页面时,个人信息可以随时修改,以确保个人数据的准确性。图5.3.6个人中心页面5.4后台管理员功能的实现管理员登录页面登录界面中需要管理员输入用户名和密码,进入后台。图5.4.1管理员登录页面5.4.2管理员功能界面管理员登录餐厅推荐系统后,可查看并操作首页、用户管理、餐厅信息、菜品信息、菜系类型、美食资讯、系统管理及个人信息等功能。图5.4.2管理员功能界面图管理员可以点击用户,在用户页面中,管理员可以输入相关信息进行搜索,找到特定用户后,查看其个人信息并对其进行增加或删除等操作,从而保证用户数据准确性。图5.4.3用户界面图管理员点击餐厅信息,在餐厅信息页面输入标题、地址,进行搜索,然后查看标题、地址、封面、评分、评论数,还可以点击增加或删除等操作。图5.4.5餐厅信息界面图管理员点击菜系类型,在菜系类型页面输入菜系类型,进行搜索,然后查看菜系类型,还可以点击增加或删除等操作。图5.4.6菜系类型界面图管理员点击美食资讯,输入标题、标签,进行搜索,然后查看标题、标签、简介、发布时间、图片、评论数、收藏数,还可以点击增加或删除等操作。图5.4.7美食资讯界面图5.4.3管理员系统管理界面管理员点击进入系统管理,其中包含关于我们、系统简介、轮播图管理,可以进行增加或删除等操作。图5.4.8系统管理界面6系统测试6.1系统测试目的系统测试的核心目的在于识别并修复潜在的系统缺陷,进而提升整体性能。经验显示,一旦某个功能模块暴露出缺陷,该模块很可能还隐藏着其他未被察觉的问题。因此,通过系统测试,我们能够提前揭露并修复这些缺陷,从而有效降低软件开发成本。同时,我们还将对基于协同过滤算法的餐厅推荐系统进行深入的性能和准确性评估,通过模拟用户行为以及利用实际数据进行全面测试,确保其在实际应用中具备高度的可靠性和有效性。6.2系统测试方法准备测试数据:将收集到的餐厅数据集和用户行为数据导进测试的数据库。模拟用户行为:通过模拟用户的行为,比如浏览餐厅、评论等,从而记录用户的偏好和行为。生成推荐列表:通过用户行为数据和协同过滤算法,就可以生成个性化推荐列表。对比及评估:实际用户偏好和推荐列表进行对比,评估最后推荐结果覆盖率6.3系统测试用例注册表6.3.1注册用例表序号关注点测试点测试方法测试结果1用户注册用户是否能够成功注册在注册界面中用户输入不完整的注册信息注册失败,系统提示用户需要输入完整的用户信息2用户注册用户是否能够成功注册在注册界面中用户输入系统已经存在的用户信息注册失败,系统提示用户信息已经存在登录表6.3.2登录用例表序号关注点测试点测试方法测试结果1用户登录用户是否能够成功登录在登录界面中用户在输入框中不输入用户名登录失败,系统提示用户需要输入用户名2用户登录用户是否能够成功登录在登录界面中用户在输入框中不输入密码登录失败,系统提示用户需要输入密码3用户登录用户是否能够成功登录在登录界面中用户输入的信息跟数据库记录匹配不上登录失败,系统提示用户需要重新输入用户名和密码用户管理表6.3.3用户管理表序号关注点测试点测试方法测试结果1用户管理管理员是否能够正常管理用户的信息进入到用户管理页面后,单击添加用户信息如果输入的信息合法则能够添加成功2用户管理管理员是否能够正常管理用户的信息进入到用户管理页面后,单击修改用户信息如果修改的时候输入的信息合法则能够正常地修改续表6.3.3用户管理表序号关注点测试点测试方法测试结果3用户管理管理员是否能够正常管理用户的信息进入到用户管理页面后,单击搜索用户信息若输入的用户名称与数据库中的记录相匹配,则可成功检索到相关信息。4用户管理管理员是否能够正常管理用户的信息进入到用户管理页面后,单击删除用户信息如果需要删除的用户信息和其它表还有关联则不能删除7结论本次毕业设计是基于协同过滤算法的餐厅推荐系统,对于该系统的研究和开发耗费了大量的时间去了解该系统所设计到的专业知识以及所需要用到的软件框架,通过此次的毕业设计,锻炼了自己的专业应用能力。经过研究和分析,并收集了大量相关信息后,开始着手设计和实施餐厅推荐系统。系统主要使用Python语言开发,并利用Django框架进行构建。整个系统分为前端和后端两部分,同时面向用户和管
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年人力资源管理师(四级)考试真题及答案详解
- 埋地管道安装施工要点、施工方法
- 2026年保险公估师综合能力专项训练试卷(附答案)
- 2025年儿科护理学题库及答案
- 2026年保险分级考试中级题库及答案
- 止水帷幕质量控制要点
- 关于产房大出血的应急预案演练脚本
- 2025年安徽省合肥市医疗三严三基理论考试模拟试题及答案
- 护理核心制度考核试题含答案
- 变配电所安装专项施工方案
- 分段诊断性刮宫课件
- 2025年大型国企人力资源部门招聘面试指南及模拟题集
- 2025广西南宁职业技术大学招聘教职人员控制数44人考试备考试题及答案解析
- 注塑工厂月度汇报
- 2024-2025学年广东省广州市白云区七年级(下)期末语文试卷
- 湖北省合格考数学试卷
- 疏导摊点管理办法
- 广东省珠海市香洲区2024-2025学年八年级下学期期末语文试题(含答案)
- 养老护理员培训课件下载
- 北京市海淀区2023-2024学年五年级下学期英语期末试卷(含答案)
- JG/T 372-2012建筑变形缝装置
评论
0/150
提交评论