NeuMF推荐算法

背景

随着深度学习的飞速发展,深度学习已经渗透到推荐系统领域。深度学习相比于传统机器学习算法有自动发现特征,模型能力强等多种优势。深度学习往往需要大量的数据训练才能得到较好的结果,推荐系统正是一种基于大数据的应用,其往往有能满足深度学习的海量数据。

模型

NeuMF是一个典型的基于深度学习推荐算法。它结合了传统矩阵分解和多层感知机,可以同时抽取低维和高维的特征,具有不错的推荐效果。

NeuMF模型如上图所示。左半部分是矩阵分解,右半部分是多层感知机。接下来分别介绍这两个部分。

左边的矩阵分解部分名称叫GMF(Generalized Matrix Factorization),即通用矩阵分解。其输入是用户id和物品id,并经过一个嵌入层,将其转化成用户特征矢量和物品特征矢量。中间部分是一个矩阵分解公式,将用户特征矢量和物品特征矢量对位相乘,得到GMF层。

右边的深度神经网络部分叫MLP(Multi-Layer Perceptron),即多层感知机。其输入同样也是用户id和物品id经过嵌入后得到对应的特征矢量。中间部分是多个全连接层串联起来并对每层的输出加上一个激活函数(relu),这样可以学习非线性关系。最后一层是MPL层。

最后NeuMF模型将GMF层和MPL层进行连接(concat),并经过最后一个激活函数为sigmoid的全连接层,输出一个0到1之间的推荐值。

训练

在论文Neural Collaborative Filtering中,提出了一种预训练的方式。首先单独训练GMF模型和MLP模型,接下来直接用训练好的参数直接初始化NeuMF模型再进行一轮训练。这种预训练的方式在实验中已经被验证,可以得到比直接训练NeuMF模型的方式更好的推荐质量。

实现

tensroflow2代码实现:https://github.com/SSSxCCC/Recommender-System

### 文章推荐算法的实现与优化 #### 1. 推荐系统的概述 推荐系统是一种信息过滤系统,用于预测用户对物品的兴趣并提供个性化建议。常见的应用场景包括电子商务网站的商品推荐、视频平台的内容推荐以及社交网络中的好友推荐。 #### 2. 基于协同过滤的方法 基于用户的协同过滤通过分析相似用户的行为来做出推荐。如果两个用户在过去有相似的选择,则认为他们在未来也会有相似的选择。这种方法可以进一步分为两种主要形式:基于邻域模型和矩阵分解方法[^1]。 对于基于邻域模型而言,计算用户之间的相似度是一个核心环节。常用的相似度量指标包括余弦相似性和皮尔逊相关系数。一旦确定了最接近的目标用户群体之后,就可以根据他们的偏好来进行商品或者服务项目的推荐操作。 而矩阵分解则是试图找到潜在因素空间,在这个低维的空间里面表示原始数据矩阵,并利用这些因子重建评分表从而完成预测工作。SVD(奇异值分解)、NMF(非负矩阵因式分解)等技术被广泛应用于该领域之中。 #### 3. 基于内容的推荐 不同于上述依赖历史行为记录的方式,基于内容的推荐侧重于理解和匹配项目本身的特征属性。比如书籍分类标签、电影演员导演名单或是音乐流派风格等等都可以作为描述对象特性的元数据参与建模过程。当新加入一位顾客时,只需考察其已知喜好即可迅速定位到可能感兴趣的新品列表之上;反之亦然——针对某件特定作品寻找具有相同品味的人群也变得轻而易举起来。 #### 4. 深度学习驱动下的混合型架构 近年来随着神经网络研究取得突破进展,越来越多的研究者尝试将传统机器学习手段同现代AI框架相结合构建更加高效精准可靠的智能引擎。例如AutoRec自动编码器能够很好地捕捉隐含模式规律;NeuMF神经协同过滤则巧妙融合了广义线性回归和支持向量机的优点特性;还有DSSM双塔结构语义哈希映射机制更是开创了一条崭新的解决路径。 除了以上提到的技术之外,还可以考虑引入其他先进理念如强化学习控制策略调整权重参数更新频率以期达到最优解状态;或者是借鉴生物启发式寻优理论像粒子群优化(PSO)[^1], 灰狼优化(GWO)[^2] 来改进现有求解流程使之更加快捷稳定收敛良好。 ```python import numpy as np from sklearn.metrics.pairwise import cosine_similarity def user_based_recommendation(user_item_matrix, target_user_id, k=5): """简单的基于用户的协同过滤推荐""" similarities = cosine_similarity(user_item_matrix) similar_users = np.argsort(-similarities[target_user_id])[:k] recommended_items = [] for user in similar_users: rated_items = set(np.where(user_item_matrix[user]>0)[0]) not_rated_by_target = set(range(len(user_item_matrix.T))) - \ set(np.where(user_item_matrix[target_user_id]>0)[0]) potential_recs = list(rated_items.intersection(not_rated_by_target)) if len(potential_recs)>0: recommended_items.extend(potential_recs) return list(set(recommended_items)) # 示例调用 user_item_data = [[5, 3, 0, 1], [4, 0, 0, 1], [1, 1, 0, 5], [1, 0, 0, 4], [0, 1, 5, 4]] user_item_matrix = np.array(user_item_data) print(user_based_recommendation(user_item_matrix, 0)) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SSSxCCC

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值