Day11-协同过滤算法

协同过滤算法

搭建智能推荐系统的算法有很多,其中商业实战中用的较多的为协同过滤(collaborative filtering)。



一、协同过滤算法的原理

根据用户群体对产品偏好的数据,发现用户之间的相似性或者物品之间的相似性,并基于这些相似性为用户作推荐。

  • 基于用户的协同过滤算法(User-based Collaborative Filtering)

​ 其本质是:寻找相似的用户,进而对用户推荐相似用户关注的产品。

​ 如下表所示,用户1和用户2都给商品A,B,C打了高分,那么可以将用户1和用户2划分在同一个用户群体,此时若用户2还给商品D打了高分,那么就可以将商品D推荐给用户1。
在这里插入图片描述

  • 基于物品的协同过滤算法(Item-based Collaborative Filtering)

​ 其本质是:根据用户的历史偏好信息,将类似的物品推荐给用户

​ 如下表所示,图书A和图书B都被用户1,2,3购买过(1表示购买,0表示未购买),那么可以认为图书A和图书B具有较强的相似度,即可判断喜欢图书A的用户同样也会喜欢图书B。当用户4购买图书B时,根据图书A和图书B的相似性,可将图书A推荐给用户4。
在这里插入图片描述

在商业实战中,大多应用场景偏向于使用基于物品的协同过滤算法。主要有如下两个原因:

​ 原因一:通常用户的数量是非常庞大的(如淘宝数亿的用户群体),而物品的数量相对有限,因此计算不同物品之间的相似度往往比计算不同用户的相似度容易很多。

​ 原因二:用户的喜好较为多变,而物品属性较明确不随时间变化,过去用户对物品的评分长期有效,所以物品间的相似度比较固定,因此可以预先离线计算好物品间的相似度,把结果存在表中,向客户进行推荐时再使用。

二、相似度计算的常用方法

无论是基于用户还是基于物品的协同过滤算法,其本质都是寻找数据之间的相似度。本节介绍计算相似度的三种常见方法:

  • 欧式距离

∑ i = 1 n ( X i ( a ) − X i ( b ) ) 2 \Large \sqrt{\sum_{i=1}^n{(X_i^{(a)}-X_i^{(b)})}^2} i=1n(Xi(a)Xi(b))2

  • 余弦相似度

​ 使用两向量夹角θ的余弦值cosθ来表示两个向量的相似度,称为余弦相似度。余弦相似度的范围是:[-1,1],夹角越小,余弦值越接近于1,两个向量越靠近,两者越相似。两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。

在这里插入图片描述

余弦相似度公式为:
c o s θ = < a , b > ∣ ∣ a ∣ ∣ ∣ ∣ b ∣ ∣ \Large cos\theta = \frac{<a,b>}{|| a|||| b||} cosθ=∣∣a∣∣∣∣b∣∣<a,b>
​ 其中,<a,b>表示的是向量a和向量b的内积,||a||和||b||分别表示向量a和向量b的模(长度)。

例如,向量a=(X1,Y1),向量b=(X2,Y2),代入余弦相似度公式可以得到:
c o s θ = X 1 ∗ X 2 + Y 1 ∗ Y 2 X 1 2 + Y 1 2 ∗ X 2 2 + Y 2 2 cos\theta = \frac{X_1*X_2+Y_1*Y_2}{\sqrt{X_1^2+Y_1^2}*\sqrt{X_2^2+Y_2^2}} cosθ=X12+Y12 X

朱梦菲 gold44876 基于协同过滤算法实现电影推荐系统实验总用时:00:06:07 资源中心 数据集 nav 第2关:动手搭建电影推荐系统 500 学习内容 参考答案 记录 评论 任务描述 相关知识 电影评分数据 构造用户-电影评分矩阵 编程要求 测试说明 任务描述 本关任务:使用python搭建电影推荐系统。 相关知识 为了完成本关任务,你需要掌握:构造用户-电影评分矩阵。 电影评分数据 本次使用电影评分数据为379个用户对783部电影的评分记录,部分数据如下: userId movieRow rating title 1 718 1.5 San Andreas (2015) 200 28 3.5 Ferris Bueller's Day Off (1986) 128 77 5 Wizard of Oz, The (1939) 11 172 2 Lord of War (2005) 其中: userId:用户编号; movieRow:电影编号; rating:评分值; title:电影名。 如: 第一行数据表示用户1对电影718评分为1.5分; 第二行数据表示用户200对电影28评分为3.5分。 数据获取代码如下: import pandas as pd #用户评分表 data_df = pd.read_csv('./step2/data.csv') 构造用户-电影评分矩阵 大家已经知道,要使用基于矩阵分解的协同过滤算法,首先得有用户与电影评分的矩阵,而我们实际中的数据并不是以这样的形式保存,所以在使用算法前要先构造出用户-电影评分矩阵,python实现代码如下: import numpy as np #获取用户数与电影数 userNo = max(data_df['userId'])+1 movieNo = max(data_df['movieRow'])+1 #创建电影评分表 rating = np.zeros((userNo,movieNo)) for index,row
最新发布
04-28
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值