📜  基于项目到项目的协同过滤

📅  最后修改于: 2022-05-13 01:58:08.881000             🧑  作者: Mango

基于项目到项目的协同过滤

协同过滤是一种技术或方法,可根据从具有相似品味或偏好的各种其他用户收集的信息来预测用户的品味并找到用户可能喜欢的项目。它考虑了一个基本事实,即如果人 X 和人 Y 对某些项目有一定的反应,那么他们可能对其他项目也有相同的看法。

两种最流行的协同过滤形式是:

  • 基于用户:在这里,我们寻找以相同方式对各种物品进行过评分的用户,然后在这些用户的帮助下找到缺失物品的评分。
  • 基于项目:在这里,我们探索这对项目之间的关系(购买了 Y 的用户,也购买了 Z)。我们在用户对其他项目的评分的帮助下找到缺失的评分。

让我们详细谈谈基于项目的协同过滤。它于 1998 年由亚马逊首次发明并使用。商品到商品协同过滤不是将用户与相似客户进行匹配,而是将用户购买和评分的每个商品与相似商品进行匹配,然后将这些相似商品组合成一个推荐列表。现在,让我们讨论它是如何工作的。

项目到项目的相似性:第一步是通过查找所有项目对之间的相似性来构建模型。可以通过不同方式找到项目对之间的相似性。最常用的方法之一是使用余弦相似度。

余弦相似度公式:

Similarity(\vec A, \vec B)=\frac{\vec A \cdot \vec B}{||\vec A||*||\vec B||}

预测计算:第二阶段涉及执行推荐系统。它使用与缺失项目最相似的项目(已由用户评分)来生成评分。因此,我们尝试根据类似产品的评级生成预测。我们使用一个公式来计算这个,该公式使用其他类似产品的评分的加权和来计算特定项目的评分。
rating(U, I_i)= \frac {\sum_{j}rating(U, I_j)*s_{ij}}{\sum_{j}s_{ij}}

例子:
让我们考虑一个例子。下面给出了一个集合表,其中包含一些项目和对这些项目进行评分的用户。评级是明确的,按 1 到 5 的等级划分。表中的每个条目表示第 i用户对j 个项目的评级。在大多数情况下,大多数单元格都是空的,因为用户仅对少数项目进行评分。在这里,我们选取了 4 个用户和 3 个项目。我们需要为相应用户找到缺失的评分。

User/ItemItem_1Item_2Item_3
User_123
User_252
User_3331
User_422

步骤 1:找到所有项目对的相似性。

形成项目对。例如,在此示例中,项目对是 (Item_1, Item_2)、(Item_1, Item_3) 和 (Item_2, Item_3)。选择每一项进行一对一配对。在此之后,我们找到对项目对中的两个项目都进行过评分的所有用户。为每个项目形成一个向量,并使用上述余弦公式计算两个项目之间的相似度。

Sim(Item1, Item2)
In the table, we can see only User_1 and User_2 have rated for both items 1 and 2. 
Thus, let I1 be vector for Item_1 and I2 be for Item_2. Then,
I1 = 5U2 +  3U3 and,
I2 = 2U2 +  3U3

Similarity(I1, I2) = \frac{(5*2) +  (3*3)}{\sqrt{5^2 +  3^2} \sqrt{2^2 +  3^2}} = 0.90
Sim(Item2, Item3)
In the table we can see only User_3 and User_4 have rated for both the items 1 and 2. 
Thus, let I2 be vector for Item_2 and I3 be for Item_3. Then,
I2 = 3U3 +  2U4 and,
I3 = 1U3 +  2U4


Similarity(I2, I3) = \frac{(3*1) +  (2*2)}{\sqrt{3^2 +  2^2} \sqrt{1^2 +  2^2}} = 0.869
Sim(Item1, Item3)
In the table we can see only User_1 and User_3 have rated for both the items 1 and 2. 
Thus, let I1 be vector for Item_1 and I3 be for Item_3. Then,
I1 = 2U1 +  3U3 and,
I3 = 3U1 +  1U3

Similarity(I1, I3) = \frac{(2*3) +  (3*1)}{\sqrt{2^2 +  3^2} \sqrt{3^2 +  1^2}} = 0.789

第 2 步:生成表中缺失的评分

现在,在这一步中,我们计算表中缺少的评分。

Rating of Item_2 for User_1

r(U_1, I_2)=\frac {r(U_1, I_1)*s_{I_1I_2} +  r(U_1, I_3)*s_{I_3I_2}}{s_{I_1I_2} +  s_{I_3I_2}}=\frac{(2*0.9) +  (3*0.869)}{(0.9 +  0.869)} = 2.49
Rating of Item_3 for User_2

r(U_2, I_3)=\frac {r(U_2, I_1)*s_{I_1I_3} +  r(U_2, I_2)*s_{I_2I_3}}{s_{I_1I_3} +  s_{I_2I_3}}=\frac{(5*0.789) +  (2*0.869)}{(0.789 +  0.869)} = 3.43
Rating of Item_1 for User_4

r(U_4, I_1)=\frac {r(U_4, I_2)*s_{I_1I_2} +  r(U_4, I_3)*s_{I_1I_3}}{s_{I_1I_2} +  s_{I_1I_3}}=\frac{(2*0.9) +  (2*0.789)}{(0.9 +  0.789)} = 2.0

因此,通过本文,我们试图借助一个小例子来了解 item-to-item 协同过滤的基本工作原理。

参考:

https://en.wikipedia.org/wiki/Collaborative_filtering

https://www.cs.umd.edu/~samir/498/Amazon-Recommendations.pdf