基于用户的协同过滤推荐算法实现原理及实现代码

基于用户的协同过滤推荐算法实现原理及实现代码

一、基于用户的协同过滤推荐算法实现原理

传统的基于用户(User-Based)的协同过滤推荐算法实现原理分四个步骤:
1.根据用户历史行为信息构建用户-项目评分矩阵,用户历史行为信息包括项目评分、浏览历史、收藏历史、喜好标签等,本文以单一的项目评分为例,后期介绍其他行为信息和混合行为信息,用户-项目评分矩阵如表1所示:

项目1项目2项目3
用户A105
用户B340
用户C032
注:用户A对项目1的评分是1分,用户A对项目2没有评分。
  1. 根据用户-项目评分矩阵计算用户之间的相似度。计算相似度常用的方法有余弦算法、修正余弦算法、皮尔森算法等等(后期我们会将相似度算法展开讲解,这里以余弦算法为例)。余弦算法公式如图1所示:
    在这里插入图片描述
    注:r_u表示用户u的评分集合(也就是矩阵中的一行评分数据),在这里插入图片描述表示用户v的评分集合,i表示项目,在这里插入图片描述 表示用户u对项目1的评分乘以用户v对项目1的评分加上用户u对项目2的评分乘以用户v对项目2的评分……先相加再相乘直到最后一个项目, 在这里插入图片描述表示用户u对项目1的评分的平方加上用户u对项目2的评分的平方加上……先平方再相加直到最后一个项目然后得到的值取平方根,平方根乘以用户v的平方根。
  2. 根据用户之间的相似度得到目标用户的最近邻居KNN。KNN的筛选常用的有两种方式,一种是设置相似度阀值(给定一个相似度的下限,大于下限的相似度为最近邻居),一种是根据与目标用户相似度的高低来选择前N个最近邻居(本次以前N个为例,后期会详细对比讲解两者)。相似度排序可用经典冒泡排序法。
  3. 预测项目评分并进行推荐。最常用的预测公式如图2所示:
    在这里插入图片描述
    注:该公式实际上是相似度和评分的加权平均数。 在这里插入图片描述表示用户u对项目i的预测评分,n是最近邻集合,v是任意一个最近邻居,在这里插入图片描述 表示最近邻v和目标用户u的相似度乘以最近邻v对项目i的评分。得到预测评分后按照评分高低进行降序推荐。
  4. 结论。以上步骤是最简单,最传统的基于用户的协同过滤推荐算法的实现原理,但是在实现过程中还是有很多注意细节。

二、基于用户的协同过滤推荐算法实现代码

本文我们介绍两种实现代码,都是java语言开发,单机版(本地测试),数据集使用movielens的ml-100k,943*1682,80000条数据。
第一种,自定义实现:
1、项目目录,如图3所示:
在这里插入图片描述
2、运行结果
在这里插入图片描述
第二种,使用mahout api接口实现:
mahout是一个算法包,实现了很多协同过滤推荐算法接口,传统的基于用户的协同过滤推荐算法调用步骤很固定,运行结果如下:
在这里插入图片描述
在这里插入图片描述

附件:基于用户的协同过滤推荐算法实现代码java语言开发

  • 24
    点赞
  • 230
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
数据结构学习资料分享 内容概览: 本次分享包涵了大学计算机相关专业必学的“数据结构”课程的一系列学习资料。主要包括: 算法代码:我们提供了多种数据结构的实现代码,包括数组、链表、栈、队列、树、图等。这些代码不仅能帮助你理解数据结构的基本概念,而且能让你明白如何在实际情况中应用这些数据结构。 笔记:详细且系统的笔记,涵盖了数据结构的各个方面,从基础概念到复杂的数据结构如堆、B树等。这些笔记有助于你系统地复习和学习数据结构。 相关书籍推荐:为了更深入地理解数据结构,我们推荐了几本经典的教材和参考书籍。这些书籍将帮助你建立完整的数据结构知识体系。 适用人群: 这份学习资料适用于所有大学计算机相关专业的学生,无论你是初学者还是已经有一定的数据结构基础。同时,对于对数据结构感兴趣的非专业人士,这份资料也是一个很好的起点。 使用建议: 结合理论和实践:在学习的过程中,请结合算法代码和理论知识。尝试自己编写代码实现数据结构,并在遇到问题时参考提供的代码。 由浅入深:建议先从基础的数据结构开始学习,如数组和链表,然后再学习更复杂的数据结构如树和图。 多做练习:数据结构是实践性很强的学科。通过多做练习,你可以更好地理解数据结构的基本概念和原理,并提高编程能力。
协同过滤算法是一种常用的推荐算法,主要分为基于用户和基于物品两类。在基于用户协同过滤算法中,我们通过对用户行为数据进行分析,找到相似的用户群体,然后将这些用户的行为习惯应用于目标用户,来进行推荐实现基于用户推荐模型主要包括以下几个步骤: 1. 数据预处理:将用户行为数据转化为评分矩阵,其中每一行代表一个用户,每一列代表一个物品,矩阵中的每个元素表示用户对该物品的评分(或者其他行为,如点击、收藏等)。 2. 相似度计算:根据评分矩阵,计算每个用户之间的相似度。常用的相似度计算方法有余弦相似度、皮尔逊相关系数等。 3. 寻找相似用户:对于目标用户,找到与其相似度最高的一些用户,可以通过设置阈值或者取前K个相似用户实现。 4. 物品推荐:将这些相似用户喜欢的但目标用户没有评分过的物品推荐给目标用户。 下面是一个基于Python的基于用户协同过滤推荐模型的示例代码: ```python import numpy as np # 构建评分矩阵 ratings = np.array([[5, 3, 0, 1], [4, 0, 4, 0], [1, 1, 0, 5], [0, 0, 4, 4]]) # 计算余弦相似度 def cosine_similarity(a, b): return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)) # 计算用户相似度矩阵 num_users = ratings.shape[0] user_similarities = np.zeros((num_users, num_users)) for i in range(num_users): for j in range(num_users): user_similarities[i][j] = cosine_similarity(ratings[i], ratings[j]) # 找到相似用户 target_user = 0 similar_users = [] for i in range(num_users): if i != target_user and user_similarities[target_user][i] > 0: similar_users.append(i) # 物品推荐 recommendations = [] for i in range(ratings.shape[1]): if ratings[target_user][i] == 0: rating_sum = 0 similarity_sum = 0 for j in similar_users: if ratings[j][i] > 0: rating_sum += ratings[j][i] * user_similarities[target_user][j] similarity_sum += user_similarities[target_user][j] if similarity_sum > 0: recommendations.append((i, rating_sum / similarity_sum)) # 按照推荐评分排序并输出 recommendations.sort(key=lambda x: x[1], reverse=True) print(recommendations) ``` 以上代码中,我们首先构建了一个评分矩阵,然后使用余弦相似度计算了用户之间的相似度,并通过设置阈值找到了与目标用户相似度较高的一些用户。最后,对于目标用户没有评分过的物品,我们计算了这些相似用户对这些物品的评分加权平均值,并按照推荐评分从高到低排序输出了推荐结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linge511873822

亲的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值