协同过滤算法_协同过滤算法笔记

协同过滤(Collaborative Filtering, CF)是推荐系统中的核心算法之一。本文通过电影推荐为例,详细介绍了协同过滤的基本原理,包括已知电影特征和用户喜好的情况,并给出了相应的Python代码实现。算法主要涉及用户喜好和电影特征的优化,通过梯度下降法更新特征,最终预测缺失评分并推荐高分电影。" 112413639,10296385,数位板压感科普:8192级压感的秘密,"['数位板开发', '图形输入设备', '绘画技术', '硬件技术', '交互设计']
摘要由CSDN通过智能技术生成

前言:

本文基本取自于jingyi130705008 的博客,博客原文如下, 可跳转直接看原文。

https://blog.csdn.net/jingyi130705008/article/details/79012721​blog.csdn.net

背景:

协同过滤(Collaboration Filtering,CF)算法是推荐系统中最常用的一种算法,这里以电影推荐为例,简要论述基本原理,最终给出实现的python代码。

1. 问题定义

假设现有一个二维表,记录着每个用户对所看电影的评分情况,如下图所示:

e8e60c51d4c8d1881465953a2af850d3.png

从图中可知,二维表记录着4个用户关于5部电影的评分情况,其中部分数据缺失,那么能否根据表格已有信息来对缺失值进行填充,实际意义就是能否根据用户喜好和电影特征来评估该用户对该电影的评分情况。因此,该问题需要解决两个小问题。一是用户喜好如何来衡量?二是电影特征如何确定?下面,我们将分别从这两个角度进行解释,一个角度是已知电影特征,优化用户喜好;另一个角度是已知用户喜好,优化电影特征。

2. 已知电影特征

假设已知每部电影具有两个特征x1、x2,其中x1表示该电影浪漫的程度,x2表示该电影搞笑的程度。如果一部电影的特征表示为(1,0),那么就认为该电影是一部爱情浪漫片;如果特征表示为(0,1),那么就认为该电影是一部喜剧片;如果表示为(0.6,0.5),那么就认为该电影是一部爱情浪漫喜剧片。

如果现在已经通过手工标记,计算出所有电影的特征数据,那么我们就可以利用这些数据来学习每个用户的喜好了。由于电影特征x是二维的,用户喜好θ也应该是二维的。如果学习到Alice的用户喜好θ为(4.5,1),而《cute puppies of love》这部电影的特征为(0.9,0),那么就可以评估Alice对《cute puppies of love》的评分为4.05。该评分在现实中是合理的,Alice的用户喜好特征表明她喜欢爱情片,《cute puppies of love》的特征表明它是一部爱情片,因此评分也就较高。下面将给出数学化描述。

对于每一个用户而言,其优化目标为:

81982799927523cd9026a685bb6b0149.png

其中θj表示第j个用户的爱好特征,xi表示第i部电影的特征,y(i,j)表示第j个用户对第i部电影的评分,i:r(i,j)=1表示第j个用户对第i部电影是评了分的(不是缺失值),mj表示第j个用户评分电影的数目。右侧那一项为正则项,是防止过拟合的(之前算法经常见到,这里不再赘述)。由于左右两项具有mj,因此上式还可以写成:

68a40f6a9804c8de2ccd5e09bf7ab172.png

接着,利用梯度下降更新θj

ab2ce46fd74366887279dc4bf579f25a.png

最终所求θj即为第j个用户的喜好特征。

3. 已知用户喜好

如果是已知用户喜好θ,那么我们就可以学习电影的特征x了。对于每一部电影,其优化函数为

7c6687c4d3ecde47b0bb3c8f5143fd2f.png

接着,利用梯度下降更新xi

637d9c010449f6f3336021c192428bdb.png

最终所求xi即为第i部电影的特征。

4. 两者结合

如果现在电影特征和用户喜好特征都未知,我们可以把上面两个目标函数结合起来进行优化。如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值