文章目录

  • 1、概述
    • 1.1 基于用户的协同过滤与基于物品的协同过滤的比较
    • 1.2 用户行为数据
    • 1.3 数学符号约定
  • 2、基于用户的协同过滤
    • 2.1 基本原理
    • 2.2 数学描述
    • 2.3 回归与分类
  • 3、基于物品的协同过滤
    • 3.1 基本原理
    • 3.2 数学描述
    • 3.3 哈利波特问题
  • 4、基于邻域方法的要素
    • 4.1 评分标准化
      • 4.1.1 均值中心化
      • 4.1.2 Z-score标准化
    • 4.2 相似度的计算
      • 4.2.1 常用的相似度
      • 4.2.2 相似度效果比较
      • 4.2.3 关于权重的重要性
      • 4.2.4 评分的差异性
    • 4.3 邻域的选择
      • 4.3.1 过滤预选近邻数量
      • 4.3.2 用于预测的近邻

基于用户行为分析的推荐算法是个性化推荐系统的重要算法,学术界一般将这种类型的算法称为协同过滤算法。顾名思义,协同过滤就是指用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。

协同过滤使用的主要数据都是用户对物品的评价。协同过滤可以分为以下3类:
基于领域的方法:基于用户的推荐(User-based Recommendation)、基于物品的推荐(Item-based Recommendation);
基于模型的方法:SVD、LFM等;
基于图的方法;

本节主要介绍基于邻域的方法。

1、概述

1.1 基于用户的协同过滤与基于物品的协同过滤的比较

见《推荐系统:技术、评估及高效算法》P30

  • 合理性(可解释性)

基于物品的推荐系统更具可解释性。

  • 计算复杂度

Item CF 和 User CF 是基于协同过滤推荐的两个最基本的算法,User CF 是很早以前就提出来了,Item CF 是从 Amazon 的论文和专利发表之后(2001 年左右)开始流行,大家都觉得 Item CF 从性能和复杂度上比 User CF 更优,其中的一个主要原因就是对于一个在线网站,用户的数量往往大大超过物品的数量,同时物品的数据相对稳定,因此计算物品的相似度不但计算量较小,同时也不必频繁更新。但我们往往忽略了这种情况只适应于提供商品的电子商务网站,对于新闻,博客或者微内容的推荐系统,情况往往是相反的,物品的数量是海量的,同时也是更新频繁的,所以单从复杂度的角度,这两个算法在不同的系统中各有优势,推荐引擎的设计者需要根据自己应用的特点选择更加合适的算法。

  • 适用场景

在非社交网络的网站中,内容内在的联系是很重要的推荐原则,它比基于相似用户的推荐原则更加有效。比如在购书网站上,当你看一本书的时候,推荐引擎会给你推荐相关的书籍,这个推荐的重要性远远超过了网站首页对该用户的综合推荐。可以看到,在这种情况下,Item CF 的推荐成为了引导用户浏览的重要手段。同时 Item CF 便于为推荐做出解释,在一个非社交网络的网站中,给某个用户推荐一本书,同时给出的解释是某某和你有相似兴趣的人也看了这本书,这很难让用户信服,因为用户可能根本不认识那个人;但如果解释说是因为这本书和你以前看的某本书相似,用户可能就觉得合理而采纳了此推荐。
相反的,在现今很流行的社交网络站点中,User CF 是一个更不错的选择,User CF 加上社会网络信息,可以增加用户对推荐解释的信服程度。

  • 推荐多样性和精度
    研究推荐引擎的学者们在相同的数据集合上分别用 User CF 和 Item CF 计算推荐结果,发现推荐列表中,只有 50% 是一样的,还有 50% 完全不同。但是这两个算法确有相似的精度,所以可以说,这两个算法是很互补的。

关于推荐的多样性,有两种度量方法:
第一种度量方法是从单个用户的角度度量,就是说给定一个用户,查看系统给出的推荐列表是否多样,也就是要比较推荐列表中的物品之间两两的相似度,不难想到,对这种度量方法,Item CF 的多样性显然不如 User CF 的好,因为 Item CF 的推荐就是和以前看的东西最相似的。
第二种度量方法是考虑系统的多样性,也被称为覆盖率 (Coverage),它是指一个推荐系统是否能够提供给所有用户丰富的选择。在这种指标下,Item CF 的多样性要远远好于 User CF, 因为 User CF 总是倾向于推荐热门的,从另一个侧面看,也就是说,Item CF 的推荐有很好的新颖性,很擅长推荐长尾里的物品。所以,尽管大多数情况,Item CF 的精度略小于 User CF, 但如果考虑多样性,Item CF 却比 User CF 好很多。

如果你对推荐的多样性还心存疑惑,那么下面我们再举个实例看看 User CF 和 Item CF 的多样性到底有什么差别。首先,假设每个用户兴趣爱好都是广泛的,喜欢好几个领域的东西,不过每个用户肯定也有一个主要的领域,对这个领域会比其他领域更加关心。给定一个用户,假设他喜欢 3 个领域 A,B,C,A 是他喜欢的主要领域,这个时候我们来看 User CF 和 Item CF 倾向于做出什么推荐:如果用 User CF, 它会将 A,B,C 三个领域中比较热门的东西推荐给用户;而如果用 ItemCF,它会基本上只推荐 A 领域的东西给用户。所以我们看到因为 User CF 只推荐热门的,所以它在推荐长尾里项目方面的能力不足;而 Item CF 只推荐 A 领域给用户,这样他有限的推荐列表中就可能包含了一定数量的不热门的长尾物品,同时 Item CF 的推荐对这个用户而言,显然多样性不足。但是对整个系统而言,因为不同的用户的主要兴趣点不同,所以系统的覆盖率会比较好。

从上面的分析,可以很清晰的看到,这两种推荐都有其合理性,但都不是最好的选择,因此他们的精度也会有损失。其实对这类系统的最好选择是,如果系统给这个用户推荐 30 个物品,既不是每个领域挑选 10 个最热门的给他,也不是推荐 30 个 A 领域的给他,而是比如推荐 15 个 A 领域的给他,剩下的 15 个从 B,C 中选择。所以结合 User CF 和 Item CF 是最优的选择,结合的基本原则就是当采用 Item CF 导致系统对个人推荐的多样性不足时,我们通过加入 User CF 增加个人推荐的多样性,从而提高精度,而当因为采用 User CF 而使系统的整体多样性不足时,我们可以通过加入 Item CF 增加整体的多样性,同样同样可以提高推荐的精度。

  • 用户对推荐算法的适应度

前面我们大部分都是从推荐引擎的角度考虑哪个算法更优,但其实我们更多的应该考虑作为推荐引擎的最终使用者 – 应用用户对推荐算法的适应度。
对于 User CF,推荐的原则是假设用户会喜欢那些和他有相同喜好的用户喜欢的东西,但如果一个用户没有相同喜好的朋友,那 User CF 的算法的效果就会很差,所以一个用户对的 CF 算法的适应度是和他有多少共同喜好用户成正比的。

Item CF 算法也有一个基本假设,就是用户会喜欢和他以前喜欢的东西相似的东西,那么我们可以计算一个用户喜欢的物品的自相似度。一个用户喜欢物品的自相似度大,就说明他喜欢的东西都是比较相似的,也就是说他比较符合 Item CF 方法的基本假设,那么他对 Item CF 的适应度自然比较好;反之,如果自相似度小,就说明这个用户的喜好习惯并不满足 Item CF 方法的基本假设,那么对于这种用户,用 Item CF 方法做出好的推荐的可能性非常低。

1.2 用户行为数据

《推荐系统实践》
用户行为在个性化推荐系统中一般分两种——显性反馈行为(explicit feedback)和隐性反馈行为(implicit feedback)。在很多网站中,很多用户甚至只有隐性反馈数据,而没有显性反馈数据。

很多关于互联网数据的研究发现,互联网上的很多数据分布都满足一种称为Power Law①的分布,这个分布在互联网领域也称长尾分布。 ① 参见“浅谈网络世界的Power Law现象”,地址为http://mmdays.com/2008/11/22/power_law_1/。 长尾分布其实很早就被统计学家注意到了。1932年,哈佛大学的语言学家Zipf在研究英文单词的词频时发现,如果将单词出现的频率按照由高到低排列,则每个单词出现的频率和它在热门排行榜中排名的常数次幂成反比。

一般认为,新用户倾向于浏览热门的物品,因为他们对网站还不熟悉,只能点击首页的热门物品,而老用户会逐渐开始浏览冷门的物品。

1.3 数学符号约定

我们参考《推荐系统:技术、评估及高效算法》的数学符号:

我们定义用户集合为UUU,物品集合为TTT,系统评分集合为RRR,评分的可选集合为SSS,如S={1,2,3,4,5}S = \{1,2,3,4,5\}S={1,2,3,4,5}。

ruir_{ui}rui​表示用户u∈Uu \in Uu∈U对于特定物品i∈Ti \in Ti∈T的评分。

UiU_iUi​表示集合中已经对物品iii进行了评分的用户集合。

TuT_uTu​表示被用户UUU所评分的集合。

TuvT_{uv}Tuv​表示被用户uuu和vvv同时评论的物品集合。

UijU_{ij}Uij​表示同时对物品iii和物品jjj做出评论的物品集合。

2、基于用户的协同过滤

2.1 基本原理

基于用户的协同过滤推荐的基本原理是,根据所有用户对物品或者信息的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,在一般的应用中是采用计算“K-邻居”的算法;然后,基于这 K 个邻居的历史偏好信息,为当前用户进行推荐。

上图示意出基于用户的协同过滤推荐机制的基本原理,假设用户 A 喜欢物品 A,物品 C,用户 B 喜欢物品 B,用户 C 喜欢物品 A ,物品 C 和物品 D;从这些用户的历史喜好信息中,我们可以发现用户 A 和用户 C 的口味和偏好是比较类似的,同时用户 C 还喜欢物品 D,那么我们可以推断用户 A 可能也喜欢物品 D,因此可以将物品 D 推荐给用户 A。

基于用户的协同过滤推荐机制和基于人口统计学的推荐机制都是计算用户的相似度,并基于“邻居”用户群计算推荐,但它们所不同的是如何计算用户的相似度,基于人口统计学的机制只考虑用户本身的特征,而基于用户的协同过滤机制可是在用户的历史偏好的数据上计算用户的相似度,它的基本假设是,喜欢类似物品的用户可能有相同或者相似的口味和偏好。

2.2 数学描述

见《推荐系统:技术、评估及高效算法》P28

基于用户的协同过滤计算用户uuu对iii的评分ruir_{ui}rui​的方法是:利用和用户uuu兴趣相同的用户对物品iii的评分预估用户uuu对iii的评分。

因此,2个核心的问题是:

  • 如何发现和用户uuu兴趣相同的用户,即其近邻。
  • 如何使用近邻的评分预估用户uuu对iii的评分。

我们用ωuv\omega_{uv}ωuv​表示用户uuu和vvv的相似程度;与用户最相似的kkk个用户表示为N(u)N(u)N(u),这些用户中对物品iii做了评分的用户表示为Ni(U)N_i(U)Ni​(U)。

我们预测ruir_{ui}rui​为这些用户对物品iii的评分的平均值:

rui^=1∣Ni(u)∣∑v∈Ni(u)rvi\hat{r_{ui}} = \frac{1}{|N_i(u)|}\sum_{v \in N_i(u)}{r_{vi}} rui​^​=∣Ni​(u)∣1​v∈Ni​(u)∑​rvi​

上述是最简单的计算ruir_{ui}rui​的方式,但我们还应该考虑到用户uuu与各个近邻间的相似程度其实是有差异的,他们对ruir_{ui}rui​的影响也应该不同,我们对各个近邻的评分进行加权平均得出ruir_{ui}rui​:

rui^=∑v∈Ni(u)ωuvrvi∑v∈Ni(u)∣ωuv∣\hat{r_{ui}} = \frac{\sum_{v \in N_i(u)}\omega_{uv}{r_{vi}}}{\sum_{v \in N_i(u)}|\omega_{uv}|} rui​^​=∑v∈Ni​(u)​∣ωuv​∣∑v∈Ni​(u)​ωuv​rvi​​
注意权重应该做标准化,以保证ruir_{ui}rui​不超出评分标准范围。

还有一个问题,上面的方法没有考虑用户会使用不同的评分尺度,比如一个用户对所有物品都评分较高,而另一个用户对所有物品都评分较低,这种情况下,他们为同一个物品评3分是完全不同含义的。解决这个问题的办法是将近邻的评分rvir_{vi}rvi​进行标准化转移h(rvi)h(r_{vi})h(rvi​),因此最终的ruir_{ui}rui​调整为:
rui^=h−1(∑v∈Ni(u)ωuvh(rvi)∑v∈Ni(u)∣ωuv∣)\hat{r_{ui}} = h^{-1}(\frac{\sum_{v \in N_i(u)}\omega_{uv}{h(r_{vi}})}{\sum_{v \in N_i(u)}|\omega_{uv}|}) rui​^​=h−1(∑v∈Ni​(u)​∣ωuv​∣∑v∈Ni​(u)​ωuv​h(rvi​)​)

常用的h()h()h()函数在下面的评分标准化介绍。

2.3 回归与分类

上述计算都是基于用户的评分预测的,也就是说计算用户的商品的具体评分。另一种情形是分类,找出用户对物品最有可能的评分。

选择回归还是分类很大程度取决于系统的评分刻度类型。如果一个评分刻度是连续的,那么回归更合适。如果评分是一些离散的值,比如喜欢、不喜欢,则分类更合适。

事实上,分类的方式都可以通过将类型转换成分数来变成回归问题,前提是这几个分类是可比较的,比如理解为喜欢是高分,不喜欢是低分。

比较2种方法:当近邻数量增加时,在回归方法中,用户uuu对iii的评分趋向于平均分;在分类方法中,用户uuu对iii的评分等于物品iii出现最频繁的评分。

对于分类的应用可参考《推荐系统:技术、评估及高效算法》。

3、基于物品的协同过滤

3.1 基本原理

基于项目的协同过滤推荐的基本原理也是类似的,只是说它使用所有用户对物品或者信息的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户:

假设用户 A 喜欢物品 A 和物品 C,用户 B 喜欢物品 A,物品 B 和物品 C,用户 C 喜欢物品 A,从这些用户的历史喜好可以分析出物品 A 和物品 C 时比较类似的,喜欢物品 A 的人都喜欢物品 C,基于这个数据可以推断用户 C 很有可能也喜欢物品 C,所以系统会将物品 C 推荐给用户 C。

与上面讲的类似,基于项目的协同过滤推荐和基于内容的推荐其实都是基于物品相似度预测推荐,只是相似度计算的方法不一样,前者是从用户历史的偏好推断,而后者是基于物品本身的属性特征信息。

3.2 数学描述

见《推荐系统:技术、评估及高效算法》P29

基于物品的协同过滤计算用户uuu对iii的评分ruir_{ui}rui​的方法是:将与用户购买喜欢的物品相似的物品推荐给用户。

因此,2个核心的问题是:

  • 如何发现物品的相似物品,即其近邻。
  • 如何使用用户uuu对其它物品的评分预估用户uuu对iii的评分。

我们用ωij\omega_{ij}ωij​表示物品iii和jjj的相似程度;与物iii品最相似的kkk个物品表示为N(i)N(i)N(i),用户uuu做了评分的近邻物品表示为Nu(i)N_u(i)Nu​(i)。

同时我们考虑近邻的权重:

rui^=∑j∈Nu(i)ωijruj∑j∈Nu(i)∣ωij∣\hat{r_{ui}} = \frac{\sum_{j \in N_u(i)}\omega_{ij}{r_{uj}}}{\sum_{j \in N_u(i)}|\omega_{ij}|} rui​^​=∑j∈Nu​(i)​∣ωij​∣∑j∈Nu​(i)​ωij​ruj​​
注意权重应该做标准化,以保证ruir_{ui}rui​不超出评分标准范围。

同样,考虑到不同商品的评分分布不同,最终的ruir_{ui}rui​调整为:
rui^=h−1(∑j∈Nu(i)ωijh(ruj)∑j∈Nu(i)∣ωij∣)\hat{r_{ui}} = h^{-1}(\frac{\sum_{j \in N_u(i)}\omega_{ij}h(r_{uj})}{\sum_{j \in N_u(i)}|\omega_{ij}|}) rui​^​=h−1(∑j∈Nu​(i)​∣ωij​∣∑j∈Nu​(i)​ωij​h(ruj​)​)
常用的h()h()h()函数在下面的评分标准化介绍。

3.3 哈利波特问题

《推荐系统实践》
亚马逊网的研究人员在设计ItemCF算法之初发现ItemCF算法计算出的图书相关表存在一个问题,就是很多书都和《哈利波特》相关。③也就是说,购买任何一本书的人似乎都会购买《哈利波特》。后来他们研究发现,主要是因为《哈利波特》太热门了,确实是购买任何一本书的人几乎都会购买它。

4、基于邻域方法的要素

要实现协同过滤,需要一下几个步骤

•收集用户偏好

•找到相似的用户或物品

•计算推荐

在这个过程中,以下3个要素对推荐

4.1 评分标准化

当一个用户为某个物品评分时,每个人都有自己的评分准则,这会对推荐系统的准确性、效率等产生很大的影响,所以我们一般需要将用户的评分标准到更一般的整体评分标准。最常用的标准化方式有:

  • 均值中心化
  • Z-score

4.1.1 均值中心化

将用户评分标准化的一个最直观的方式就是将用户的评分减去他所有评分的平均值r‾u\overline{r}_uru​。同时,预测用户对某个物品的评分时,就是将预测分加上他自身评分的平均分,亦即对于基于用户的推荐方法来说:
h(rui)=rui−r‾ur^ui=r‾u+∑v∈Ni(u)ωuv(rvi−r‾v)∑v∈Ni(u)∣ωuv∣h(r_{ui}) = r_{ui} - \overline{r}_u \\ \hat{r}_{ui} = \overline{r}_u + \frac{\sum_{v \in N_i(u)}\omega_{uv}(r_{vi} - \overline{r}_v)}{\sum_{v \in N_i(u)}|\omega_{uv}|} h(rui​)=rui​−ru​r^ui​=ru​+∑v∈Ni​(u)​∣ωuv​∣∑v∈Ni​(u)​ωuv​(rvi​−rv​)​

对于基于物品的推荐方法来说:

h(rui)=rui−r‾ir^ui=r‾i+∑j∈Nu(i)ωij(ruj−r‾j)∑j∈Nu(i)∣ωij∣h(r_{ui}) = r_{ui} - \overline{r}_i \\ \hat{r}_{ui} = \overline{r}_i + \frac{\sum_{j \in N_u(i)}\omega_{ij}(r_{uj} - \overline{r}_j)}{\sum_{j \in N_u(i)}|\omega_{ij}|} h(rui​)=rui​−ri​r^ui​=ri​+∑j∈Nu​(i)​∣ωij​∣∑j∈Nu​(i)​ωij​(ruj​−rj​)​

4.1.2 Z-score标准化

均值中心化方法移除了针对平均评分的不同感受而导致的偏差,而Z-score标准化还考虑到了个人评分范围不同带来的差异性。

考虑这种情况,A用户为5个商品的评分是{1,2,3,4,5},而B用户为这5个用户的评分是{3,3,3,3,3}。他们的 r‾u=3\overline{r}_u = 3ru​=3,假如现在他们为同一个商品T评分4分,他们的含义是不同的。

因此,在基于用户的推荐方法中,标准化评分 ruir_{ui}rui​等于用户均值中心化评分除以用户评分标准差:
h(rui)=rui−r‾uσuh(r_{ui}) = \frac{r_{ui} -\overline{r}_u} {\sigma_u} h(rui​)=σu​rui​−ru​​
对于上面的例子而言,由于B用户的方差小于A,所以对于商品T,B用户的评分大于A。

于是,基于用户的推荐方法预测评分 ruir_{ui}rui​可以表达为:

r^ui=r‾u+∑v∈Ni(u)ωuv(rvi−r‾v)/σv∑v∈Ni(u)∣ωuv∣\hat{r}_{ui} = \overline{r}_u + \frac{\sum_{v \in N_i(u)}\omega_{uv}(r_{vi} - \overline{r}_v)/\sigma_v}{\sum_{v \in N_i(u)}|\omega_{uv}|} r^ui​=ru​+∑v∈Ni​(u)​∣ωuv​∣∑v∈Ni​(u)​ωuv​(rvi​−rv​)/σv​​

同理,基于物品的推荐方法为:

$$
h(r_{ui}) = \frac{r_{ui} - \overline{r}_i}{\sigma_j}

\hat{r}{ui} = \overline{r}i + \frac{\sum{j \in N_u(i)}\omega{ij}(r_{uj} - \overline{r}j)/\sigma_j}{\sum{j \in N_u(i)}|\omega_{ij}|}
$$

4.2 相似度的计算

推荐系统中的一个重要问题是:如何计算2个商品或者物品的相似度?

4.2.1 常用的相似度

目前,常用的计算方式有:

(1)欧几里得相似度:均方差相似度(MSD)

最初用于计算欧几里德空间中两个点的距离,用于计算相似度时:

11+∑i∈Tuvrui2−rvi2\frac{1}{1+\sum_{i \in T_{uv}}\sqrt{r_{ui}^2-r_{vi}^2}} 1+∑i∈Tuv​​rui2​−rvi2​​1​

其中$ T_{uv}表示用户表示用户表示用户u和用户和用户和用户v$都有评分的物品。基于物品的推荐与此类似。

而均方差相似度使用2个用户对相同物品评分差的平方总和和均值的倒数表示2个用户的相似度:

MSD(u,v)=∣Tuv∣∑i∈Tuvrui2−rvi2MSD(u,v) = \frac{|T_{uv}|}{\sum_{i \in T_{uv}}\sqrt{r_{ui}^2-r_{vi}^2}} MSD(u,v)=∑i∈Tuv​​rui2​−rvi2​​∣Tuv​∣​
这种方法无法表示负关联。
(2)余弦相似度

CV(u,v)=∑i∈Tuvruirvi∑i∈Turui2∑i∈Tvrvi2CV(u,v) = \frac{\sum_{i \in T_{uv}}r_{ui}r_{vi}}{\sqrt {\sum_{i \in T_u}r_{ui}^2 \sum_{i \in T_v}r_{vi}^2 } } CV(u,v)=∑i∈Tu​​rui2​∑i∈Tv​​rvi2​​∑i∈Tuv​​rui​rvi​​
关于余弦相似度的解释请参考:??

(3)皮尔逊相关度(Pearson Correlation)

余弦相似度并没有考虑评分均值及方差的影响,皮尔逊相关度做了调整:

PV(u,v)=∑i∈Tuv(rui−ru‾)(rvi−rv‾)∑i∈Tuv(rui−ru‾)2∑i∈Tuv(rvi−rv‾)2PV(u,v) = \frac{\sum_{i \in T_{uv}}(r_{ui} - \overline{r_u})(r_{vi}- \overline{r_v})}{\sqrt {\sum_{i \in T_{uv}}(r_{ui}- \overline{r_u})^2 \sum_{i \in T_{uv}}(r_{vi}-\overline{r_v})^2 } } PV(u,v)=∑i∈Tuv​​(rui​−ru​​)2∑i∈Tuv​​(rvi​−rv​​)2​∑i∈Tuv​​(rui​−ru​​)(rvi​−rv​​)​
注意,这和先进行Z-score标准化评分,然后计算余弦相似度是不同的,皮尔逊相关度仅考虑了用户评分交集的标准差,而不是全部。

不是指考虑了均值吗?有标准差?

基于物品的推荐为:
PV(i,j)=∑u∈Uij(rui−ri‾)(rvi−rj‾)∑u∈Uij(rui−ru‾)2∑u∈Uij(rvi−rj‾)2PV(i,j) = \frac{\sum_{u \in U_{ij}}(r_{ui} - \overline{r_i})(r_{vi}- \overline{r_j})}{\sqrt {\sum_{u \in U_{ij}}(r_{ui}- \overline{r_u})^2 \sum_{u \in U_{ij}}(r_{vi}-\overline{r_j})^2 } } PV(i,j)=∑u∈Uij​​(rui​−ru​​)2∑u∈Uij​​(rvi​−rj​​)2​∑u∈Uij​​(rui​−ri​​)(rvi​−rj​​)​

(4)调整的余弦相似度(Adjusted Cosine)
一般而言,用户间的方差要明显大于物品间的评分,因此计算物品间相似度时,相比于用物品均值中心化,用户均值话更加合适:
AV(i,j)=∑u∈Uij(rui−ru‾)(rvi−ru‾)∑u∈Uij(rui−ru‾)2∑u∈Uij(rvi−ru‾)2AV(i,j) = \frac{\sum_{u \in U_{ij}}(r_{ui} - \overline{r_u})(r_{vi}- \overline{r_u})}{\sqrt {\sum_{u \in U_{ij}}(r_{ui}- \overline{r_u})^2 \sum_{u \in U_{ij}}(r_{vi}-\overline{r_u})^2 } } AV(i,j)=∑u∈Uij​​(rui​−ru​​)2∑u∈Uij​​(rvi​−ru​​)2​∑u∈Uij​​(rui​−ru​​)(rvi​−ru​​)​

在一些基于物品的推荐例子中,用调整的余弦相似度要好于皮尔逊相似度。

(5)斯皮尔曼等级关联(Spearman Rank Correlation, SRC)
和皮尔逊相关度直接使用评分不同,斯皮尔曼等级关联运用这些评分的排名。

SRC(u,v)=∑i∈Tuv(kui−ku‾)(kvi−kv‾)∑i∈Tuv(kui−ku‾)2∑i∈Tuv(kvi−kv‾)2SRC(u,v) = \frac{\sum_{i \in T_{uv}}(k_{ui} - \overline{k_u})(k_{vi}- \overline{k_v})}{\sqrt {\sum_{i \in T_{uv}}(k_{ui}- \overline{k_u})^2 \sum_{i \in T_{uv}}(k_{vi}-\overline{k_v})^2 } } SRC(u,v)=∑i∈Tuv​​(kui​−ku​​)2∑i∈Tuv​​(kvi​−kv​​)2​∑i∈Tuv​​(kui​−ku​​)(kvi​−kv​​)​
其中kuik_{ui}kui​为物品iii在用户uuu所评分物品中的排位,k‾u\overline k_uku​是用户所评价物品的平均排名。

SRC的主要优势在于排名可以绕开标准化评分的问题,但当用户评分只有少量可选项时,这种方法不是最好的,因为会产生大量的并列排序。而且由于要计算排序,消耗较大。

4.2.2 相似度效果比较

参考《推荐系统:技术、评估及高效算法》P35。

推荐精度方面:PC > SRC > MSD

可能由于MSD没有考虑负关联,它的准确度最低;而PC比SRC略高。

尽管一般认为PC是最优的相似度计算方法,但最近的一些研究表明,这些算法效果很大程度依赖于数据。因此最好的方式是对各种方法都做一个验证。

4.2.3 关于权重的重要性

假如2个用户只有少量几件共同评价的商品,需要降低相似度重要性的权重,例如当2人共同评分的的物品数量小于给定的参数γ\gammaγ时,它们的相似度会受到惩罚:
ωuv′=min{∣Tuv∣,γ}γ∗ωuv\omega'_{uv} = \frac{min\{|T_{uv}|,\gamma\}}{\gamma} * \omega_{uv} ωuv′​=γmin{∣Tuv​∣,γ}​∗ωuv​
基于物品的推荐也类似:
ωij′=min{∣U=ij∣,γ}γ∗ωij\omega'_{ij} = \frac{min\{|U_{=ij}|,\gamma\}}{\gamma} * \omega_{ij} ωij′​=γmin{∣U=ij​∣,γ}​∗ωij​
研究发现γ>=25\gamma>=25γ>=25时,可以显著提高评分预测的准确性,其中γ=50\gamma=50γ=50时取的最好效果。不过同样,对于不同的数据,交叉验证时最好的调参方法。

有一种修正的方法见:参考《推荐系统:技术、评估及高效算法》P36。

4.2.4 评分的差异性

2个用户对物品给出一致的喜欢或者不喜欢的评分,可能会不如他们给出差异较大的评分时提供更多的信息。

比如一个物品是大部分人都喜欢或者不喜欢,那2个用户有相同的评分是很正常的。推荐系统解决这类的办法是反用户频率IUF,类似于信息检索的IDF:每个物品都会有一个全中,对应评论了物品的用户比例的logloglog值:

λi=log⁡∣U∣∣Ui∣\lambda_i = \log \frac{|U|}{|U_i|} λi​=log∣Ui​∣∣U∣​
因此,评分修正为:
PV(u,v)=∑i∈Tuvλi(rui−ru‾)(rvi−rv‾)∑i∈Tuvλi(rui−ru‾)2∑i∈Tuvλi(rvi−rv‾)2PV(u,v) = \frac{\sum_{i \in T_{uv}} \lambda_i(r_{ui} - \overline{r_u})(r_{vi}- \overline{r_v})}{\sqrt {\sum_{i \in T_{uv}}\lambda_i(r_{ui}- \overline{r_u})^2 \sum_{i \in T_{uv}}\lambda_i(r_{vi}-\overline{r_v})^2 } } PV(u,v)=∑i∈Tuv​​λi​(rui​−ru​​)2∑i∈Tuv​​λi​(rvi​−rv​​)2​∑i∈Tuv​​λi​(rui​−ru​​)(rvi​−rv​​)​
基于物品的推荐类似。

4.3 邻域的选择

计算了用户或者物品的相似度后,如何去合适的近邻用于推荐呢?一般而言通常分为2个步骤:

  • 全局过滤保持最有可能得近邻。
  • 在预测的时候选择最合适的近邻做预测。

4.3.1 过滤预选近邻数量

在大型系统中,用户、商品的数量数以亿计,我们无法将他们的相似度矩阵全部保存在内存中,我们希望筛选出合适的数量保存在内存中,以下是常见的方法:

(1)top-N过滤:对一个用户或者一个商品,我们只保存最相似的N个近邻的相似度。但N的选择要兼顾效率和准确度。N过大则浪费内存,过小则会牺牲推荐的准确性。

(2)阈值过滤:保留相似度大于某个阈值的近邻,这种方法更灵活,但合理的阈值选择很困难。

(3)负值过滤:根据具体推荐需要,确定是否保留负相关度的近邻。

4.3.2 用于预测的近邻

对于一个新的评分预测可以通过kkk个近邻方法得到,如何选择kkk的数值呢?经验证,预测的偏差随着kkk的增加通常呈现一个凹的函数。

当近邻数目限制在一个很小的数量的时候(如着k&lt;20k&lt;20k<20),预测精度通常会很低;当着kkk增加时,越来越多的近邻参与到预测中,那些用单独近邻所造成的偏差就会被平均掉,精度得到提升;随着着kkk的继续增大着(如k&gt;50k&gt;50k>50),由于一些重要的关联被不重要的关联所削弱,精度会逐步下降。

一般而言,近邻数目在20~50间比较合适,但最有的着kkk值依然建议通过交叉验证来选择。

最后还需注意,基于少量非常相似的用户可能得到更加新颖的推荐结果,但代价时降低准确度。

协同过滤——基于邻域的算法相关推荐

  1. 协同过滤——基于模型的算法

    文章目录 1 概述 1.1 基于分解的方法 1.1.1 分解相似度矩阵:特征值分解 1.1.2 分解评分矩阵:奇异值分解(SVD) 1.1.3 SVD.SVD++.时间敏感模型 1.2 基于邻域的学习 ...

  2. Python推荐系统学习笔记(3)基于协同过滤的个性化推荐算法实战---ItemCF算法(下)

    本文在 Python推荐系统学习笔记(2)基于协同过滤的个性化推荐算法实战---ItemCF算法 一文的基础上,对其基本的ItemCF算法做出改进. 一.相关概念 1.ItemCF中,基于行为(喜好) ...

  3. Python推荐系统学习笔记(5)基于协同过滤的个性化推荐算法实战---UserCF算法(下)

    本文在 Python推荐系统学习笔记(4)基于协同过滤的个性化推荐算法实战---UserCF算法(上) 一文的基础上,对其基本的UserCF算法做出改进. 一.相关概念 1.UserCF中,基于行为( ...

  4. 推荐系统之基于邻域的算法-------协同过滤算法

    基于邻域的协同过滤主要分为两类,基于用户的协同过滤和基于物品的协同过滤.前者给用户推荐和他兴趣相似的其他用户喜欢的物品,后者则是推荐和他之前喜欢过的物品相似的物品. 基于用户的协同过滤算法 这里介绍基 ...

  5. python实现 基于邻域的算法之协同过滤(电影推荐实战)

    1 介绍 1.1 用户行为数据 用户行为数据通常把包括:网页浏览.购买点击.评分和评论等. 用户行为在个性化推荐系统中一般分为两种: 显性反馈行为(explicit feedback) 包括:用户明确 ...

  6. Python推荐系统学习笔记(1)基于协同过滤的个性化推荐算法实战---隐语义模型

    一.相关概念: 1.隐语义模型(LFM) 通过矩阵分解建立用户和隐类之间的关系,物品和隐类之间的关系,最终得到用户对物品的偏好关系. 假设我们想要发现 F 个隐类, 我们的任务就是找到两个矩阵 U 和 ...

  7. 协同过滤—基于图的方法

    文章目录 1.概述 1.1 基于路径的相似度 1.2 基于随机游走的相似度 1.概述 在基于图的推荐方式中,数据可以用图的形式表示.左边的数据点表示用户的集合,右边的数据表表示物品的集合,这些点通过线 ...

  8. 最基础的协同过滤介绍

    文章目录 1.到底什么是协同过滤 2.协同过滤的一般步骤 3.基于用户的CF (User-CF) 3.1 基本介绍 3.2 用户相似度 3.2.1 用户相似度基本介绍 3.2.2 用户相似度改进:IC ...

  9. 推荐系统实践(一)----基于用户的协同过滤算法(UserCF)

      随着信息技术和互联网的发展,人们逐渐从信息匮乏的时代走入了信息过载的时代.在这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:如何从大量信息中找到自己感兴趣的信息是一件非常困难的事情,这 ...

最新文章

  1. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos
  2. JS 新浪下拉菜单+jQuery
  3. 定义ComboBox(下拉列表)组件垂直滚动条的样式。
  4. Surf算法学习心得(一)——算法原理
  5. NODE_PATH的疑难杂症(转)
  6. 安装mavlink遇到的问题(future找不到)
  7. 用Fiddler在Android上抓HTTPS包
  8. 能用python做信号处理吗_Python中的信号处理
  9. 阿里云助力江苏省财政厅力推统一公共支付平台
  10. android butterknife 自定义view,ButterKnife用法详解.md
  11. 特征工程之归一化及标准化
  12. elas算法源码赏析(一):PGM格式图片的读取和保存
  13. Status Register ST1 状态寄存器 (28335)
  14. 线性代数 【23】 概念的深入01 - Points坐标点和Vectors向量
  15. echarts pie饼图既显示内部又显示外部指示线
  16. 火车头采集细节(二)
  17. 行测——逻辑推理——1三段论
  18. 数据库设计报告——用教材管理系统来举例
  19. 用Java为视频添加图片水印(类似直播)
  20. 8大网页设计新趋势(转载)

热门文章

  1. 剑指 Offer 44. 数字序列中某一位的数字
  2. 【三万字!】Dubbo、Zookeeper学习笔记!秒杀面试官!——双非上岸阿里巴巴系列
  3. 大根堆的删除c语言,小根堆大根堆的动态创建与堆顶元素删除
  4. 快准牌电脑发软件_电脑如何下载软件
  5. JavaWeb中的乱码解决方法总结
  6. anaconda 更改路径_Anaconda更改Jupyter 默认启动路径
  7. linux中断响应时间太慢_linux+arm系统学习与基础学习
  8. Arrays 的copyOf() - JDK 6 和操作符 instanceof
  9. 深入解析JNA—模拟C语言结构体
  10. 数据流程图顶层一层二层_只需三个公式,三阶魔方超简单入门图文教程5:完全复原第二层...