众所周知的是,我们生活在一个充满“大数据”的社会生活当中,比如豆瓣图书,电影推荐等等。
在豆瓣,我们可以看到我们想要观看的影视作品的豆瓣评分
图上方是与新三国相类似的影视作品,下方是观看者对新三国的评价等等
针对于传统推荐,即基于内容,基于用户,以及基于商品的推荐,一种现有推荐算法,既融合协同过滤推荐,又包含用户,或者商品的推荐算法。
现在简单介绍基于基于用户的协同过滤推荐算法:
如图1所示,在推荐系统中,用m×n的打分矩阵表示用户对物品的喜好情况,一般用打分来表示用户对商品的喜好程度,分数越高表示该用户对这个商品越感兴趣,而数值为空表示不了解或是没有买过这个商品。
用于个性化推荐系统的打分矩阵
如图2所示,基于用户的协同过滤推荐算法是指找到与待推荐商品的用户u兴趣爱好最为相似的K个用户,根据他们的兴趣爱好将他们喜欢的商品视为用户u可能会感兴趣的商品对用户u进行推荐。
基于用户的协同过滤算法
从以上介绍可以看出,基于用户的协同过滤推荐算法主要分为两步,第一步是求出用户之间的相似度,第二步是根据用户之间的相似度找出与待推荐的用户最为相似的几个用户并根据他们的兴趣爱好向待推荐用户推荐其可能会感兴趣的商品。
用户之间的相似度的计算主要可以通过Jaccard公式和余弦相似度公式得到。
若有读者对上述内容感兴趣可以点击下方链接:
- https://blog.csdn.net/u014473918/article/details/79771558
- https://blog.csdn.net/Bryan_QAQ/article/details/90549338?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159774873719195239759926%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=159774873719195239759926&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~pc_rank_v2-1-90549338.first_rank_ecpm_v3_pc_rank_v2&utm_term=%E6%9D%B0%E5%8D%A1%E5%BE%B7%E7%B3%BB%E6%95%B0&spm=1018.2118.3001.4187
- https://blog.csdn.net/zz_dd_yy/article/details/51926305?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159774876319724839260877%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=159774876319724839260877&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~pc_rank_v2-1-51926305.first_rank_ecpm_v3_pc_rank_v2&utm_term=%E4%BD%99%E5%BC%A6%E7%9B%B8%E4%BC%BC%E5%BA%A6%E8%AE%A1%E7%AE%97%E5%85%AC%E5%BC%8F&spm=1018.2118.3001.4187
- 现贴代码如下:首先,我们要特别说明的是,我们要将手头的数据进行预处理。按照用户id,以及电影id升序或者降序排序,形成两张表格,方便我们的处理,
- 我们的数据集是GroupLens_MovieLens数据集,该数据集囊括了10几年的电影评分数据,该数据集包含2000年起,6040个用户对大概3900部电影的1000209条评分数据。该数据集项目1992年开始就被使用在研究协同过滤和改进的协同过滤上。
通过上述两步,我们可以得到用户相似度矩阵,如图:
之后,我们再计算某用户对未给评分的电影预测分数,
之所以乘5,是因为评分最高分为5,在数据标准化之后,乘以最大额度就是预测分数
打开用户评分矩阵,即可得出完整的评分矩阵