2、基于物品协同过滤推荐算法
2.1、基于⽤户的协同过滤算法(UserCF)
该算法利⽤⽤户之间的相似性来推荐⽤户感兴趣的信息,个⼈通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的⽬的进⽽帮助别⼈筛选信息,回应不⼀定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要。
但两个问题,⼀个是稀疏性,即在系统使⽤初期由于系统资源还未获得⾜够多的评价,很难利⽤这些评价来发现相似的⽤户。
另⼀个是可扩展性,随着系统⽤户和资源的增多,系统的性能会越来越差。
2.2、基于物品的协同过滤算法(ItemCF)
内容过滤根据信息资源与⽤户兴趣的相似性来推荐商品,通过计算⽤户兴趣模型和商品特征向量之间的向量相似性,主动将相似度⾼的商品发送给该模型的客户。
由于每个客户都独⽴操作,拥有独⽴的特征向量,不需要考虑别的⽤户的兴趣,不存在评价级别多少的问题,能推荐新的项⽬或者是冷门的项⽬。
这些优点使得基于内容过滤的推荐系统不受冷启动和稀疏问题的影响。
2.3、算法核心
通过分析用户行为记录(评分、购买、点击、浏览等行为)来计算两个物品的相似度,同时喜欢物品A和物品B的用户数越多,就认为物品A和物品B越相似。
2.4、流程
1.构建⽤户–>物品的对应表
2.构建物品与物品的关系矩阵(同现矩阵)
3.通过求余弦向量夹角计算物品之间的相似度,即计算相似矩阵
4.根据⽤户的历史记录,给⽤户推荐物品
2.5、构建用户与物品的对应关系表
如下表,⾏表⽰⽤户,列表⽰物品(电影),数字表⽰⽤户喜欢该物品的程度(评分)
用户\电影 | 唐伯虎点秋香 | 逃学威龙1 | 追龙 | 他人笑我太疯癫 | 喜欢你 | 暗战 |
A | 5 | 1 | 2 | |||
B | 4 | 2 | 3.5 | |||
C | 2 | 4 | ||||
D | 4 | 3 | ||||
E | 4 | 3 |
2.6、构建物品与物品的关系矩阵(共现矩阵)
共现矩阵C表⽰同时喜欢两个物品的⽤户数,是根据⽤户物品对应关系表计算出来的。
如根据上⾯的⽤户物品关系表可以计算出如下的共现矩阵C:
电影\电影 | 唐伯虎点秋香 | 逃学威龙1 | 追龙 | 他人笑我太疯癫 | 喜欢你 | 暗战 |
唐伯虎点秋香 | 1 | 1 | 1 | 1 | ||
逃学威龙1 | 1 | 1 | 2 | |||
追龙 | 1 | 1 | ||||
他人笑我太疯癫 | 2 | |||||
喜欢你 | 1 | 2 | ||||
暗战 | 1 | 2 |
2.7、计算相似矩阵
两个物品之间的相似度如何计算?
设|N(i)|表⽰喜欢物品i的⽤户数,|N(i)⋂N(j)|表⽰同时喜欢物品i,j的⽤户数,则物品i与物品j的相似度为:
利用公式计算物品之间的余弦相似矩阵如下:
电影\电影 | 唐伯虎点秋香 | 逃学威龙1 | 追龙 | 他人笑我太疯癫 | 喜欢你 | 暗战 |
唐伯虎点秋香 | 0.41 | 0.7 | 0.5 | 0.5 | ||
逃学威龙1 | 0.41 | 0.58 | 0.82 | |||
追龙 | 0.71 | 0.58 | ||||
他人笑我太疯癫 | 0.82 | |||||
喜欢你 | 0.5 | 1.0 | ||||
暗战 | 0.5 | 1.0 |
2.8、给用户推荐物品
根据⽤户的历史记录,给⽤户推荐物品。
最终推荐的是什么物品,是由预测兴趣度决定的。
物品j预测兴趣度=⽤户喜欢的物品i的兴趣度×物品i和物品j的相似度
例如:A⽤户喜欢唐伯虎点秋香,逃学威龙1,追龙 ,兴趣度分别为5,1,2
在用户A的评分电影列表中只有唐伯虎点秋香与喜欢你有相似度,推荐喜欢你的预测兴趣度=5 x 0.5 = 2.5
在用户A的评分电影列表中只有唐伯虎点秋香与暗战有相似度,推荐暗战的预测兴趣度=5 x 0.5 = 2.5
在用户A的评分电影列表中只有逃学威龙1与他人笑我太疯癫有相似度,推荐他人笑我太疯癫的预测兴趣度=1 x 0.82 =0.82
3、基于机器学习K-means聚类推荐算法
原理:
从数据库中
1、首先获取书籍类别
2、获取用户注册时勾选喜欢的类别,勾选的为1,否则为0,得到一个样本数据
例:[1,0,1,0,0,...],[1,1,1,0,1,...],[0,0,1,0,0,...],
3、使用k-mean算法把用户分成6类【用户模型】
4、获取6类的【用户模型】的质心,比如[1,0,1,0,0,...]
把为1的类别找出来,然后获取该类别排行前3的书籍,组成一个推荐列表推荐给用户
5、类别书籍排行按收藏量来排序
6、用户购买书籍行为会动态更新样本数据
六、程序文件说明
book是子应用名称,migrations是数据迁移文件,把数据模型映射到数据库中,templatetags是定义界面模板语法,__init__.py是导包文件,adminx.py存放的是后台管理代码,apps.py是子应用说明,forms.py是登录注册表单定义,models.py是数据模型,test.py是测试文件,urls.py是路由表,views.py是控制层调度器。
book_manager是项目应用管理起始文件夹,settings.py是项目数据库,静态文件等配置,urls.py是总路由表。
media保存的是媒体文件。
static保存的是界面的静态文件:css,html,js,图片等。
template保存的是前端界面模板代码。
book-k-mean.dat是k-means聚类后的模型。
manage.py是项目启动管理器。
recommend_books.py是推荐算法代码。
requirements.txt保存的是第三方库文件。
spider_get_data.py是爬虫代码。
七、数据库表说明
数据库表如下:
auth_group、auth_group_permissions、auth_permissions是后台管理的组、权限表。
auth_user、auth_user_group、auth_user_groups、auth_user_user_permissions是后台管理用户数据表。
book是图书表。
book_tags是图书标签表。
borrow_list是图书借阅表。
collect_book是图书收藏表。
comment_book是图书评论表。
django_admin_log是原始后台管理日志表。
django_content_type是django应用内容表。
django_migrations是数据迁移文件表。
django_session是django缓存表。
like_book是图书点赞表。
like_recommend_book是图书推荐反馈表。
purchase_list是购物车表
rate_book是评分表。
tags是图书标签表。
user是用户表。
user_select_types是用户注册时选择喜欢的图书类型表。
user_select_types_category是一个多对多表,存放的是图书标签id与user_select_types表id的对应关系。
xadmin_bookmark是是后台管理的标签表。
xadmin_log是后台管理操作日志表。
xadmin_usersettings是后台管理用户设置表。
xadmin_userwidget是后台管理小组件表。