推荐系统之基于用户行为数据的协同过滤(Collaborative Filtering)

什么是用户行为数据?

用户行为数据在网站上最简单的存在形式就是日志,比如用户在电子商务网站中的网页浏览、购买、点击、评分和评论等活动。
用户行为在个性化推荐系统中一般分为两种——显性反馈行为(explicit feedback)和隐性反馈行为(implicit feedback)。显性反馈行为包括用户明确表示对物品喜好的行为。网站中收集显性反馈的主要方式就是评分和喜欢/不喜欢。隐性反馈行为指的是那些不能明确反应用户喜好 的行为。最具代表性的隐性反馈行为就是页面浏览行为。
按照反馈的明确性分,用户行为数据可以分为显性反馈和隐性反馈,但按照反馈的方向进行划分, 又可以分为正反馈和负反馈。正反馈指用户的行为倾向于用户喜欢该物品,而负反馈指用户的 行为倾向于用户不喜欢该物品。在显性反馈中,很容易区分一个用户行为是正反馈还是负反馈, 而在隐性反馈行为中,就相对比较难以确定。

1.基于用户的协同过滤算法(UserCF):

基本思想:在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似性趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。
主要步骤:
(1)找到和目标用户兴趣相似的用户集合
(2)找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户
这里,步骤1的关键是计算两个用户的兴趣相似度,协同过滤算法主要利用行为相似度计算兴趣相似度。

1.2相似度如何计算:

欧几里得距离(Euclidean Distance)

d ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 d(x,y)=\sqrt{\sum_{i=1}^n{(x_{i}-y_{i})^2}} d(x,y)=i=1n(xiyi)2
当用欧几里得距离表示相似度,一般采用以下公式进行转换:距离越小,相似度越大
s i m ( x , y ) = 1 1 + d ( x , y ) sim(x,y)=\frac{1}{1+d(x,y)} sim(x,y)=1+d(x,y)1

Cosine 相似度(Cosine Similarity)

Cosine 相似度被广泛用于计算文档相似度
C o s ( x , y ) = ∑ i = 1 n ( x i ∗ y i ) ∑ i = 1 n ( x i ) 2 ∑ i = 1 n ( y i ) 2 Cos(x,y)=\frac{\sum_{i=1}^n{(x_{i}*y_{i})}}{\sqrt{\sum_{i=1}^n{(x_{i})^2}}\sqrt{\sum_{i=1}^n{(y_{i})^2}}} Cos(x,y)=i=1n(xi)2 i=1n(yi)2 i=1n(xiyi)

皮尔逊相关系数(Pearson Correlation Coefficient)

P ( x , y ) = ∑ i = 1 n ( x i − x ˉ ) ∑ i = 1 n ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 P(x,y)=\frac{\sum_{i=1}^n{(x_{i}-\bar{x})}\sum_{i=1}^n{(y_{i}-\bar{y})}}{\sqrt{\sum_{i=1}^n{(x_{i}-\bar{x})^2}}\sqrt{\sum_{i=1}^n{(y_{i}-\bar{y})^2}}} P(x,y)=i=1n(xixˉ)2 i=1n(yiyˉ)2 i=1n(xixˉ)i=1n(yiyˉ)

Tanimoto 系数(Tanimoto Coefficient)

也称为Jaccard系数,是Cosine相似度的扩展,也多用于计算文档相似度
T ( x , y ) = ∑ i = 1 n ( x i ∗ y i ) ∑ i = 1 n ( x i ) 2 + ∑ i = 1 n ( y i ) 2 − ∑ i = 1 n ( x i ∗ y i ) T(x,y)=\frac{\sum_{i=1}^n{(x_{i}*y_{i})}}{\sqrt{\sum_{i=1}^n{(x_{i})^2}}+\sqrt{\sum_{i=1}^n{(y_{i})^2}}-\sum_{i=1}^n{(x_{i}*y_{i})}} T(x,y)=i=1n(xi)2 +i=1n(yi)2 i=1n(xiyi)i=1n(xiyi)

1.3用户相似度的校正

如果简单的基于余弦相似度,显得过于粗糙,以图书为例,如果两个用户都曾经买过《新华字典》,这丝毫不能说明他们兴趣相似, 因为绝大多数中国人小时候都买过《新华字典》。但如果两个用户都买过《数据挖掘导论》,那可 以认为他们的兴趣比较相似,因为只有研究数据挖掘的人才会买这本书。换句话说,两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度。因此,我们可以基于物品的流行度对热门物品进行一定的惩罚:
w u v = ∑ i ∈ ( N ( u ) ⋂ N ( v ) ) 1 l o g 2 ( 1 + ∣ N ( i ) ∣ ) ∣ N ( u ) ∣ ∣ N ( v ) ∣ w_{uv}=\frac{\sum_{i\in{(N(u)\bigcap{}N(v))}}{\frac{1}{log_{2}(1+|N(i)|)}}}{\sqrt{|N(u)||N(v)|}} wuv=N(u)N(v) i(N(u)N(v))log2(1+N(i))1
参数说明:
w u v : 用 户 u 与 用 户 v 的 相 似 度 w_{uv}:用户u与用户v的相似度 wuvuv
N(u):用户u曾经购买的物品集合
N(v):用户v曾经购买的物品集合
N(i):对物品i有过行为的用户集合

1.4.如何选取K个相似的用户?

在这里插入图片描述

1.4.1固定数量的邻居:K-neighborhoods

不论邻居的“远近”,只取最近的 K 个,作为其邻居。如图 1 中的 A,假设要计算点 1 的 5- 邻居,那么根据点之间的距离,我们取最近的 5 个点,分别是点 2,点 3,点 4,点 7 和点 5。但很明显我们可以看出,这种方法对于孤立点的计算效果不好,因为要取固定个数的邻居,当它附近没有足够多比较相似的点,就被迫取一些不太相似的点作为邻居,这样就影响了邻居相似的程度,比如图 1 中,点 1 和点 5 其实并不是很相似。

1.4.2基于相似度门槛的邻居:Threshold-based neighborhoods

与计算固定数量的邻居的原则不同,基于相似度门槛的邻居计算是对邻居的远近进行最大值的限制,落在以当前点为中心,距离为 K 的区域中的所有点都作为当前点的邻居,这种方法计算得到的邻居个数不确定,但相似度不会出现较大的误差。如图 1 中的 B,从点 1 出发,计算相似度在 K 内的邻居,得到点 2,点 3,点 4 和点 7,这种方法计算出的邻居的相似度程度比前一种优,尤其是对孤立点的处理。

1.5.计算用户对物品的兴趣度

经过以上步骤,得到用户之间的兴趣相似度后,UserCF算法会给用户推荐和他兴趣最相似的K个用户喜欢的 物品。如下的公式度量了UserCF算法中用户u对物品i的感兴趣程度:
p ( u , i ) = ∑ v ∈ S ( u , K ) ⋂ N ( i ) w u v r v i p(u,i)=\sum_{v\in{S(u,K)\bigcap{}N(i)}}{w_{uv}r_{vi}} p(u,i)=vS(u,K)N(i)wuvrvi
参数说明:
w u v : 用 户 u 与 用 户 v 的 相 似 度 w_{uv}:用户u与用户v的相似度 wuvuv
r v i : 用 户 v 对 物 品 i 的 兴 趣 程 度 r_{vi}: 用户v对物品i的兴趣程度 rvi:vi

p(u,i):用户u对物品i感兴趣程度
S(u,K):包含和用户u兴趣最接近的K个用户
N(i):对物品i有过行为的用户集合

2基于物品的协同过滤算法(ItemCF)

基本思想:主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品 B。
主要步骤
(1) 计算物品之间的相似度。
(2) 根据物品的相似度和用户的历史行为给用户生成推荐列表。
我们定性的用下式计算物品i和物品j的相似度:
w i j = ∣ N ( i ) ⋂ N ( j ) ∣ ∣ N ( i ) ∣ ∣ N ( j ) ∣ w_{ij}=\frac{|N(i)\bigcap{N(j)}|}{\sqrt{|N(i)||N(j)|}} wij=N(i)N(j) N(i)N(j)
参数说明:
w i j : 物 品 i 与 物 品 j 的 相 似 度 w_{ij}:物品i与物品j的相似度 wijij
N(i):对物品i有过行为的用户集合
N(j):对物品j有过行为的用户集合

2.1物品相似度的校正

假设有这么一个用户,他是开书店的,并且买了当当网上80%的书准备用来自己卖。那么, 他的购物车里包含当当网80%的书。假设当当网有100万本书,也就是说他买了80万本。从前面 对ItemCF的讨论可以看到,这意味着因为存在这么一个用户,有80万本书两两之间就产生了相似度。这个用户虽然活跃,但是买这些书并非都是出于自身的兴趣,而且这些书覆 盖了当当网图书的很多领域,所以这个用户对于他所购买书的两两相似度的贡献应该远远小于一个只买了十几本自己喜欢的书的文学青年。因此,我们要对这样的用户进行一定的惩罚,John S. Breese在论文1中提出了一个称为IUF(Inverse User Frequence),即用户活跃度对数的 倒数的参数,他也认为活跃用户对物品相似度的贡献应该小于不活跃的用户,他提出应该增加IUF参数来修正物品相似度的计算公式:
w i j = ∑ u ∈ ( N ( i ) ⋂ N ( j ) ) 1 l o g 2 ( 1 + ∣ N ( u ) ∣ ) ∣ N ( i ) ∣ ∣ N ( j ) ∣ w_{ij}=\frac{\sum_{u\in{(N(i)\bigcap{N(j)})}}{\frac{1}{log_{2}(1+|N(u)|)}}}{\sqrt{|N(i)||N(j)|}} wij=N(i)N(j) u(N(i)N(j))log2(1+N(u))1
参数说明:
w i j : 物 品 i 与 物 品 j 的 相 似 度 w_{ij}:物品i与物品j的相似度 wijij
N(i):对物品i有过行为的用户集合
N(j):对物品j有过行为的用户集合
N(u):用户u有过行为的物品集合

2.2计算用户对物品的兴趣度

经过以上步骤,得到物品之间的兴趣相似度后,ItemCF算法会给用户推荐和他有过行为的物品中最相似的物品。如下的公式度量了ItemCF算法中用户u对物品i的感兴趣程度:
p ( u , j ) = ∑ i ∈ N ( u ) ⋂ S ( j , K ) w i j r u i p(u,j)=\sum_{i\in{N(u)\bigcap{S(j,K)}}}{w_{ij}r_{ui}} p(u,j)=iN(u)S(j,K)wijrui
参数说明:
w i j : 物 品 i 与 物 品 j 的 相 似 度 w_{ij}:物品i与物品j的相似度 wijij
r u i : 用 户 u 对 物 品 i 的 兴 趣 程 度 r_{ui}: 用户u对物品i的兴趣程度 rui:ui

p(u,j):用户u对物品j感兴趣程度
S(j,K):和物品j最相似的K个物品的集合
N(u):用户u有过行为的物品集合

3 UserCF和ItemCF的比较

首先我们提出一个问题,为什么新闻网站一般使用UserCF,而图书、电商网站一般使用ItemCF呢?
首先回顾一下UserCF算法和ItemCF算法的推荐原理。UserCF给用户推荐那些和他有共同兴 趣爱好的用户喜欢的物品,而ItemCF给用户推荐那些和他之前喜欢的物品类似的物品。从这个算 法的原理可以看到,UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点,而ItemCF 的推荐结果着重于维系用户的历史兴趣。换句话说,UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。
在新闻网站中,用户的兴趣不是特别细化,绝大多数用户都喜欢看热门的新闻。个性化新闻推荐更加强调抓住 新闻热点,热门程度和时效性是个性化新闻推荐的重点,而个性化相对于这两点略显次要。因 此,UserCF可以给用户推荐和他有相似爱好的一群其他用户今天都在看的新闻,这样在抓住热 点和时效性的同时,保证了一定程度的个性化。同时,在新闻网站中,物品的更新速度远远快于新用户的加入速度,而且 对于新用户,完全可以给他推荐最热门的新闻,因此UserCF显然是利大于弊。
但是,在图书、电子商务和电影网站,比如亚马逊、豆瓣、Netflix中,ItemCF则能极大地发 挥优势。首先,在这些网站中,用户的兴趣是比较固定和持久的。一个技术人员可能都是在购买 技术方面的书,而且他们对书的热门程度并不是那么敏感,事实上越是资深的技术人员,他们看 的书就越可能不热门。此外,这些系统中的用户大都不太需要流行度来辅助他们判断一个物品的 好坏,而是可以通过自己熟悉领域的知识自己判断物品的质量。因此,这些网站中个性化推荐的 任务是帮助用户发现和他研究领域相关的物品。因此,ItemCF算法成为了这些网站的首选算法。 此外,这些网站的物品更新速度不会特别快,一天一次更新物品相似度矩阵对它们来说不会造成 太大的损失,是可以接受的。同时,从技术上考虑,UserCF需要维护一个用户相似度的矩阵,而ItemCF需要维护一个物品 相似度矩阵。从存储的角度说,如果用户很多,那么维护用户兴趣相似度矩阵需要很大的空间, 同理,如果物品很多,那么维护物品相似度矩阵代价较大。
下表是对二者的一个全面的比较:
在这里插入图片描述

参考

1.https://www.jianshu.com/p/8d90824d52c5
2.https://blog.csdn.net/xiaokang123456kao/article/details/74735992
3.https://blog.csdn.net/qq_24831889/article/details/85982986

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mahout 是一个由 Apache 开发的开源项目,通过 Mahout 可以快速地进行大数据处理。Mahout 中最常用的是协同过滤推荐算法,而协同过滤推荐算法的应用最为广泛的是电影推荐系统。 电影推荐系统是一种基于用户兴趣的推荐系统,核心思想是根据用户的历史行为记录,如电影的评分等,通过算法分析出用户的喜好特征,结合电影的相关信息进行推荐。电影推荐系统不仅可以提高用户的使用体验,也可以带来商业价值。 基于 Mahout 实现协同过滤推荐算法的电影推荐系统,主要包括以下步骤: 1. 数据收集和预处理:系统需要收集用户对电影的行为数据,如观看历史、评分、评论等,同时还需要获取电影的相关信息,如电影类型、导演、演员等。收集到的数据需要进行清洗、筛选和预处理,以便后续分析和建模。 2. 特征提取和分析:基于收集到的数据,通过 Mahout 的特征提取和分析工具,可以对用户和电影进行特征提取和分析,分析用户的喜好特征和电影的相关特征,为推荐算法提供依据。 3. 推荐算法的选取和实现:根据数据特征和推荐需求,选择适合的推荐算法,并基于 Mahout 实现推荐算法。常用的推荐算法包括基于协同过滤的 CF(Collaborative Filtering)算法、基于内容过滤的 CB(Content-Based Filtering)算法、基于混合模型的混合过滤算法等。 4. 推荐结果的评估和优化:通过评估推荐结果,分析推荐算法的效果和准确率,并进行优化,以提高系统的推荐效果和用户满意度。 基于 Mahout 实现协同过滤推荐算法的电影推荐系统,可以有效地提高电影推荐的准确性和精度,并通过不断优化,为用户带来更好的使用体验和商业价值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值