推荐系统-协同过滤

1 篇文章 0 订阅
1 篇文章 0 订阅

推荐系统-协同过滤

这是我学习推荐系统的笔记,主要参考的是51cto的一系列文章和人们邮电出版的《推荐系统实践》。

首先说一下什么是协同过滤。假如某宝要向你推荐一些商品,当然这些商品不是随随便便推荐的,推给你了就是引诱你去买,咱能赚到钱。那么什么样的商品你有可能去买呢?系统或算法怎么找到这些商品呢?

协同过滤就是干这个的。协同过滤的思想是:利用已有的用户的历史的行为或意见,预测当前用户最可能喜欢哪些东西。

纯粹的协同方法的数据是给定的user-item评分矩阵,输出(1)用户对某物品的喜欢程度评分预测值,或(2)TopN推荐物品list。

来看例子:

基于用户的最近邻推荐

主要思想:首先,给定一个评分数据集和当前(活跃)用户的ID作为输入,找出与当前用户过去有相似偏好的其他用户,这些用户有时也被称为对等用户或最近邻;然后,对当前用户没有见过的每个产品p,利用其近邻对p的评分计算预测值。这种方法的潜在假设是:(1) 如果用户过去有相似的偏好,那么他们未来也会有相似的偏好;(2) 用户偏好不会随时间而变化。

现有评分数据如下:

\Item 1Item 2Item 3Item 4Item5
Alice5344
User 131233
User 243435
User 333154
User 415521

现在来预测Alice对Item5的评分。
1.计算用户间的相似度,使用Pearson相关系数。
一般来说,最基础的相似度大多用的是类似余弦计算的。Pearson相关系数,只是把各用户的评分习惯考虑进去了–有人习惯给高分,有人习惯给低分。Pearson通过减去各人的平均均值降低了用户的评分习惯差异。
Pearson
Pearson相关系数取值从+1(强正相关)到 1(强负相关)。Alice和其他用户,即用户2用户3和用户4的相似度分别为0.70、0.00和-0.79。
2.计算预测评分
从用户相似度可以看出,User1和User2的偏好与Alice相近(KNN,K=2),所以我们用这两个用户对Item5的评分预测Alice对Item5的评分。
pred
这个公式也很巧妙,首先是可考虑了用户自身的评分习惯;然后对最近林用户的评分既有加权处理,又有归一化处理!
这样得来Alice对Item5的评分:
Score

这里的算法很基本,不可避免的存在一些问题,最重要的就是相似度计算时的问题。用User-Item评分直接计算用户相似度,简化和忽略了一些情况,比如:用户对热门物品的评分一般都比较高,然而这并不能代表用户间具有较高相似性;再有K的选择问题,例子中比较简单,因为Alice与其它三个用户的相似度很低甚至是负,直接没有考虑,这是比较特殊的情况,在实际中K的选择也是值得研究的。

基于物品的最近邻推荐

相比User-based,Item-based推荐更受电商网站喜欢。User-based在一些有着数以百万计用户和物品的大型电子商务网站上还是会存在很多严峻挑战。尤其是当需要扫描大量潜在近邻时,这种方法很难做到实时计算预测值。与User-based对应,Iter-based推荐计算物品间的相似度。这种推荐非常适合做线下预处理 ,因此在评分矩阵非常大的情况下也能做到实时计算推荐。
还用上表的数据,预测Alice对Item5的评分。
1.计算Item相似度,用余弦相似度公式
cos
Item5与Item1的相似度:
cos51
这里没有考虑各用户对物品的评分均值,参考Pearson的处理,改进余弦相似度计算:
cosx
改进后Item5和Item1的相似度:
cons51x
2.预测User-Item评分
确定物品间的相似度之后,我们可以通过计算Alice对所有与物品5相似物品的加权评分总和来预测Alice对物品5的评分。
pred

这里同样有一些问题:首先,热门物品会与所有物品有较高的相似度;最近邻K的选择。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对这个问题,我可以为你提供一些关于Python电影推荐系统协同过滤算法的基本知识和实现方法。 首先,电影推荐系统是一种常见的个性化推荐系统,在电影网站和应用程序中广泛应用。它可以根据用户的历史观看记录、评分、喜好等信息,为用户推荐他们可能会喜欢的电影。 协同过滤算法是电影推荐系统中常用的算法之一。它基于用户对电影的历史打分记录,寻找与当前用户兴趣相似的其他用户或电影,然后根据这些相似用户或电影的评分来预测当前用户对其他电影的评分。协同过滤算法主要分为基于用户的协同过滤和基于物品的协同过滤两种。 Python中有很多电影推荐系统的实现库和工具,如Surprise、LightFM、TensorFlow等。其中Surprise是一个基于Python的推荐系统开发框架,支持多种推荐算法,包括协同过滤算法的SVD和NMF。 以下是一些Python实现协同过滤算法的示例代码: 使用Surprise库实现基于SVD的协同过滤算法: ```python from surprise import SVD from surprise import Dataset from surprise import accuracy from surprise.model_selection import train_test_split # 加载数据集 data = Dataset.load_builtin('ml-100k') # 切分数据集 trainset, testset = train_test_split(data, test_size=.25) # 构建模型 algo = SVD() # 训练模型 algo.fit(trainset) # 预测评分 predictions = algo.test(testset) # 计算RMSE误差 accuracy.rmse(predictions) ``` 使用Surprise库实现基于NMF的协同过滤算法: ```python from surprise import NMF from surprise import Dataset from surprise import accuracy from surprise.model_selection import train_test_split # 加载数据集 data = Dataset.load_builtin('ml-100k') # 切分数据集 trainset, testset = train_test_split(data, test_size=.25) # 构建模型 algo = NMF() # 训练模型 algo.fit(trainset) # 预测评分 predictions = algo.test(testset) # 计算RMSE误差 accuracy.rmse(predictions) ``` 以上是一些关于Python电影推荐系统协同过滤算法的基本知识和实现方法。如果你有其他问题或需要更详细的解答,请随时提出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值