公司新闻

协同过滤推荐算法原理及实现

日期:2024-06-16

1.协同过滤算法的原理及实现

2. item-based协同过滤算法详解

1.协同过滤算法的原理及实现

协同过滤推荐算法是最早也是最著名的推荐算法,其主要功能是预测和推荐。该算法通过挖掘用户历史行为数据来发现用户偏好,根据不同的偏好将用户分成不同的群体,并推荐口味相近的商品。协同过滤推荐算法分为两类:基于用户的协同过滤算法和基于物品的协同过滤算法。简单来说,物以类聚,人以群分。下面我们分别讲解这两类推荐算法的原理和实现方法。

协同过滤算法推荐系统_协同过滤推荐算法_协同过滤算法推荐流程图

1.基于用户的协同过滤算法

基于用户的协同过滤算法通过用户的历史行为数据发现用户对商品或内容的偏好(如购买商品、收藏、评论或分享等),并对这些偏好进行衡量和打分。用户之间的关系是通过不同用户对同一商品或内容的态度和偏好来计算的。具有相同偏好的用户之间进行商品推荐。简单来说,如果用户A和B都购买了三本书x、y、z,并给出了5星评价,那么A和B就属于同一类用户,A看过的书w也可以推荐给用户B。

1.1 寻找具有相似偏好的用户

我们模拟了五个用户对两款商品的评分,来说明如何根据用户对不同商品的态度和偏好来找到相似用户。在这个例子中,五个用户对两款商品进行了评分。这里的评分可能代表真实的购买行为,也可能是用户对商品的不同行为的量化指标。例如,商品被浏览的次数、向朋友推荐商品、收藏、分享或评论商品。这些行为都可以代表用户对商品的态度和偏好。

协同过滤算法推荐流程图_协同过滤算法推荐系统_协同过滤推荐算法

从表格中直观的发现五个用户之间的联系比较困难,我们用散点图来表示五个用户对两款产品的评分之后,就很容易发现用户之间的关系了。散点图中,Y轴为产品1的评分,X轴为产品2的评分。从用户的分布可以发现,用户A、C、D的评分比较接近。用户A(3.3 6.5)和用户C(3.6 6.3)、用户D(3.4 5.8)对两款产品的评分比较接近。用户E和用户B组成了另一组。

散点图虽然直观,但是无法投入实际应用,无法精准衡量用户之间的关系,所以我们需要通过数字来精准衡量用户之间的关系,并根据这些关系进行产品推荐。

1.2 欧氏距离评估

欧氏距离评估是一种比较简单的用户关系评估方法,其原理是通过计算散点图中两个用户之间的距离来判断不同用户是否有相同的偏好,下面是欧氏距离评估的计算公式。

通过公式我们得到了五个用户之间的欧氏系数,也就是用户之间的距离。系数越小,两个用户之间的距离越近,他们的偏好也越接近。但是这里有一个问题,太小的数值可能无法准确反映不同用户之间的距离差异。所以我们对系数取倒数,使得用户之间的距离更接近。值越大,用户之间的距离越近。在下表中我们可以看到用户A&C,A&D和C&D之间的距离比较近。同时,用户B&E之间的距离也比较近。这和我们之前在散点图中看到的是一致的。

协同过滤推荐算法_协同过滤算法推荐流程图_协同过滤算法推荐系统

1.3 皮尔逊相关性评价

皮尔逊相关系数是计算用户之间关系的另一种方法。它比欧氏距离更复杂,但在评分数据不规范时可以给出更好的结果。以下是多个用户对多个产品进行评分的示例。这个例子比前面两个产品更复杂,但更接近真实情况。我们通过皮尔逊相关系数对用户进行分组并推荐产品。

协同过滤算法推荐流程图_协同过滤推荐算法_协同过滤算法推荐系统

1.4 皮尔逊相关系数

皮尔逊相关系数的计算公式如下,结果是-1到1之间的一个系数,这个系数用来说明两个用户之间的联系强度。

相关系数的分类

0.8-1.0 非常强的相关性 0.6-0.8 强相关性 0.4-0.6 中等相关性 0.2-0.4 弱相关性 0.0-0.2 非常弱的相关性或无相关性

通过计算5个用户对5个物品的评分,我们得到了用户之间的相似度数据。这里我们可以看到用户A&B、C&D、C&E和D&E的相似度较高。接下来我们就可以根据相似度给用户推荐物品了。

协同过滤算法推荐流程图_协同过滤推荐算法_协同过滤算法推荐系统

2. 为类似用户提供推荐商品

向用户C推荐商品

当我们需要向用户C推荐商品时,我们首先查看之前的相似度列表,发现用户C与用户D、E的相似度较高,也就是说这三个用户是一个群体,并且有相同的偏好,因此,我们可以将D、E的商品推荐给用户C。但是这里有一个问题,我们不能直接推荐之前的商品1到商品5,因为用户C已经浏览过或者购买过这些商品,我们不能重复推荐,所以我们要推荐用户C还没有浏览过或者购买过的商品。

加权排序推荐

我们提取了用户D和用户E打过分的另外5个物品A~F,对不同物品的评分按照相似度进行加权,按照加权结果对这5个物品进行排序,推荐给用户C。这样,用户C就得到了用户D和用户E打过分的、与他的喜好相似的物品。在具体的推荐顺序和展示上,我们按照用户D和用户E与用户C的相似度对用户D和用户E进行排序。

上面是基于用户的协同过滤算法,这种算法依赖用户的历史行为数据来计算相关度,也就是说要有一定的数据积累(冷启动问题)。对于新网站或者数据量较少的网站,还有一种方法,就是基于物品的协同过滤算法。

基于项目的协同过滤算法

基于物品的协同过滤算法和基于用户的协同过滤算法很相似,都是将物品和用户互换。通过计算不同用户对不同物品的评分来得到物品之间的关系。根据物品之间的关系向用户推荐类似的物品。这里的评分代表了用户对物品的态度和偏好。简单来说,如果用户A同时购买了物品1和物品2,说明物品1和物品2相关性很高。当用户B也购买了物品1,就可以推断他也有购买物品2的需求。

1. 查找类似商品

该表格展示了两个用户对 5 个物品的评分。在这个表格中,我们将用户和物品的位置互换,通过两个用户的评分来获得 5 个物品之间的相似度。单从表格中还是很难找到其中的联系,所以我们选择通过散点图来展示。

协同过滤推荐算法_协同过滤算法推荐系统_协同过滤算法推荐流程图

散点图中,X 轴和 Y 轴分别为两个用户的评分。这五件商品按照评分大小分布在散点图中。我们可以发现,商品 1、3、4 在用户 A 和 B 中的评分相近,说明这三件商品具有较高的相关性。商品 5 和 2 则分在另一组。

欧氏距离评估

在基于物品的协同过滤算法中,我们仍然可以使用欧氏距离评估来计算不同物品之间的距离和关系,以下是计算公式。

通过欧氏系数我们可以发现,产品之间的距离和关系,和之前散点图中的表现是一致的,产品1、3、4距离比较近,产品2、5距离也比较近。

协同过滤推荐算法_协同过滤算法推荐系统_协同过滤算法推荐流程图

皮尔逊相关性评估

我们选择使用皮尔逊相关性评价来计算多个用户和多个产品之间的关系。下面是 5 个用户对 5 个产品的评分表。我们利用这些评分来计算产品之间的相关性。

协同过滤推荐算法_协同过滤算法推荐系统_协同过滤算法推荐流程图

皮尔逊相关系数计算公式

通过计算我们可以发现,产品1和产品2,产品3和产品4,产品3和产品5,产品4和产品5之间的相似度比较高,接下来我们就可以根据这些产品之间的相关度来向用户推荐产品了。

2. 根据类似商品向用户提供推荐

这里我们遇到了和基于用户的产品推荐同样的问题,当我们需要基于产品 3 向用户 C 推荐产品时,我们需要新产品和已有产品的相似度列表。在前面的相似度计算中,产品 3 与产品 4、产品 5 的相似度较高,因此我们计算并得到了产品 4、5 与其他产品的相似度列表。

协同过滤推荐算法_协同过滤算法推荐流程图_协同过滤算法推荐系统

以下是通过计算得出的新产品与现有产品的相似性数据。

加权排序推荐

这里是用户C已经购买过的商品4、5与新商品A、B、C的相似度,我们用用户C对商品4、5的评分作为权重,对商品A、B、C进行加权排序,用户C评分高、相似度高的商品优先推荐。

2. item-based协同过滤算法详解

最近参加KDD Cup 2012比赛,选择做微博推荐,找了一些推荐相关的论文进行研究。《Item-Based》是推荐领域的经典论文,很多流行的推荐算法都是在这篇论文提出的算法基础上进行改进的。

1.协同过滤算法描述

推荐系统利用数据分析技术,找出用户最有可能喜欢的东西,并向其推荐。现在很多电商网站都有这个应用。最常用、最成熟的推荐算法是协同过滤(CF)推荐算法。CF的基本思想是根据用户之前的偏好和其他有相似兴趣的用户的选择,向用户推荐物品。

如图1所示,在CF中,用一个m×n的矩阵来表示用户对某个物品的喜好程度,一般用一个分数来表示用户对某个物品的喜好程度,分数越高表示用户越喜欢该物品,0表示该物品从未购买过。图中一行表示一个用户,一列表示一个物品,Uij表示用户i对物品j的评分。CF分为两个过程,一个是预测过程,一个是推荐过程。预测过程是预测用户对于未购买过的物品可能的评分值,而推荐过程是根据预测阶段的结果,推荐用户最有可能喜欢的一个或者top-N个物品。

2. User-based 算法与 Item-based 算法的比较

CF算法分为两大类,一类是基于(-based),一类是基于模型(Model-based)。User-based和Item-based算法都属于-based类型。具体细分可以参考说明。

user-based 的基本思想是,如果用户 A 喜欢物品 a,用户 B 喜欢物品 a、b 和 c,用户 C 喜欢 a 和 c,那么认为用户 A 与用户 B 和 C 相似,因为他们都喜欢物品 a,并且喜欢物品 a 的用户也喜欢物品 c,因此将物品 c 推荐给用户 A。该算法使用最近邻(-)算法来找到一个用户的邻居集,该邻居集的用户与用户有相似的偏好,算法根据邻居的偏好来预测用户。

基于用户的算法主要存在两个问题:

1. 数据稀疏性。大型电商推荐系统通常有大量的商品,而用户购买的商品可能不到其中的 1%。不同用户购买的商品重叠度较低,这使得算法无法找到用户的邻居,即具有相似偏好的用户。

2.算法的可扩展性。最近邻算法的计算复杂度随着用户和项目数量的增加而增加,不适合在数据量很大的场合使用。

Iterm-based 的基本思想是事先根据所有用户的历史偏好数据计算物品之间的相似度,然后向用户推荐与用户喜欢的物品相似的物品。 拿前面的例子来说,我们可以知道物品 a 和 c 很相似,因为喜欢 a 的用户也喜欢 c,而用户 A 又喜欢 a,所以就把 c 推荐给用户 A。

因为物品的直接相似度是相对固定的,因此可以预先离线计算不同物品之间的相似度,将结果存成表,在做推荐的时候查表计算用户可能的评分值,可以同时解决以上两个问题。

3. Item-based算法详细流程

(1)相似度计算

基于物品的算法首先计算物品之间的相似度。计算相似度的方法有以下几种:

1、基于余弦的相似度计算,通过计算两个向量之间夹角的余弦值来计算物品之间的相似度,公式如下:

分子是两个向量的内积,也就是两个向量同一位置上的数的乘积。

2.基于关联度的相似度计算,计算两个向量之间的-r关联度,公式如下:

表示用户 u 对项目 i 给出的评分,

表示第i个项目的平均分数。

3. 调整余弦()相似度计算。由于基于余弦的相似度计算没有考虑不同用户的评分,可能有些用户倾向于打高分,而有些用户则倾向于打低分。此方法通过减去用户评分的平均值来消除不同用户评分习惯的影响。公式如下:

表示用户u的平均得分。

(2)预测值计算

根据之前计算出来的商品相似度,我们对用户还未评分的商品进行预测。预测方法有两种:

1.加权和。

将用户u对各个项目的评分进行加权求和,权重为各个项目与项目i的相似度,然后对所有项目的相似度求和,计算用户u对项目i的评分,公式如下:

是项目 i 和项目 N 之间的相似度,

是用户u对项目N给出的评分。

2. 返回。

与上面的加权和方法类似,回归方法不直接使用相似项目N的得分。

因为在使用余弦法或者相关法计算相似度时,存在一个误解,即两个打分向量可能相距很远(欧氏距离),但相似度却可能很高。因为不同的用户打分习惯不同,有的倾向于打高分,有的倾向于打低分。如果两个用户喜欢同一个item,由于他们的打分习惯不同,他们的欧氏距离可能很远,但相似度应该很高。这种情况下,再计算用户原有的相似item评分,将会导致预测结果很差。通过重新估计一个新的

值,使用与上述相同的方法进行预测。重新计算

方法如下:

其中商品 N 是与商品 i 类似的商品,

它是通过对项目N和i的得分向量进行线性回归计算得到的。

是回归模型的误差。本文没有解释如何进行线性回归,因此您需要参考其他相关文献。

四、结论

作者从实验对比结果得出以下结论:1. Item-based算法的预测结果略高于User-based算法。2. 由于Item-based算法可以预先计算物品的相似度,因此其在线预测性能高于User-based算法。3. 使用一小部分物品也可以得到高质量的预测结果。


Copyright 江苏艾力昇医疗科技有限公司 版权所有 苏ICP备123456789号-1