首页 > 编程语言 >社交媒体挖掘中基于项目的协同过滤推荐算法

社交媒体挖掘中基于项目的协同过滤推荐算法

时间:2024-07-04 17:02:36浏览次数:28  
标签:frac 项目 评分 用户 cdot 算法 过滤 社交 sim

前言

在我之前的专题文章《社交媒体挖掘中的协同过滤推荐算法》里,详细介绍了基于用户的协同过滤算法,这里我们将主要聚焦更加常用的基于项目(英文:Item)的协同过滤算法。

优势

基于项目的协同过滤算法(Item-Based Collaborative Filtering)相较于基于用户的协同过滤算法(User-Based Collaborative Filtering)在某些场景下更有用,主要有以下几个原因:

1.稀疏性问题

用户行为数据稀疏:用户的行为数据(如评分、点击等)通常比较稀疏,即大部分用户只对少量项目进行了评分。基于项目的协同过滤可以通过项目之间的相似性来弥补这种数据稀疏的问题。
项目数据更稳定:相比于用户,项目的数据(如评分、描述等)更为稳定,用户的兴趣可能会发生变化,但项目的属性一般不会发生太大变化。

  1. 计算效率:

相似度计算:项目数通常远少于用户数,因此计算项目之间的相似度矩阵会更快。而基于用户的协同过滤需要计算大量的用户相似度,计算量较大。
在线推荐效率:一旦计算出项目之间的相似度,在线推荐的计算量较小,只需找到与当前用户已评价项目相似的项目即可。

  1. 可解释性:

推荐理由明确:基于项目的协同过滤可以明确地指出推荐的项目是因为与用户已经喜欢的某些项目相似,这对于用户来说更容易理解和接受推荐结果。

  1. 冷启动问题:

新用户冷启动:对于新用户,没有足够的历史行为数据时,基于用户的协同过滤很难做出准确推荐。而基于项目的协同过滤可以通过现有项目之间的相似性,结合少量新用户的行为数据,快速给出推荐。

  1. 数据更新的敏感性:

对新评分的敏感度低:基于用户的协同过滤对用户新增加的评分变化敏感,而基于项目的协同过滤对这些变化较为稳定,减少了频繁更新模型的需求。

基本原理

基于项目的协同过滤推荐算法(Item-Based Collaborative Filtering)的基本原理是通过分析用户对不同项目的评分或行为数据,计算项目之间的相似性,然后根据用户过去喜欢的项目推荐与之相似的项目。以下是该算法的基本步骤:

  1. 数据收集
    收集用户对项目的评分或行为数据。数据通常表示为一个用户-项目矩阵,其中每个元素表示用户对某个项目的评分或行为(如点击、浏览等)。

  2. 计算项目相似度
    使用相似度度量方法计算项目之间的相似性。常用的相似度计算方法有余弦相似度、皮尔逊相关系数和调整余弦相似度。
    余弦相似度:计算两个项目的向量之间的余弦值,表示两个项目在多大程度上具有相似的评分模式。
    sim ( i , j ) = ∑ u ∈ U r u , i ⋅ r u , j ∑ u ∈ U r u , i 2 ⋅ ∑ u ∈ U r u , j 2 \text{sim}(i, j) = \frac{\sum_{u \in U} r_{u,i} \cdot r_{u,j}}{\sqrt{\sum_{u \in U} r_{u,i}^2} \cdot \sqrt{\sum_{u \in U} r_{u,j}^2}} sim(i,j)=∑u∈U​ru,i2​ ​⋅∑u∈U​ru,j2​ ​∑u∈U​ru,i​⋅ru,j​​
    其中, r u , i r_{u,i} ru,i​ 表示用户 u u u 对项目 i i i 的评分, U U U 是对项目 i i i 和 j j j 都有评分的用户集合。

  3. 选取最相似的K个项目
    根据相似度计算结果进行排名,然后根据邻域大小 K K K的值,来选择最相似的 K K K个项目。

  4. 计算项目评分平均值
    计算每个项目的用户评分的平均值。

  5. 生成预测评分
    这里我们使用基于物品的协同过滤(Item-based Collaborative Filtering)-加权平均预测公式来计算预测值:
    r u , i = r ‾ i + ∑ j ∈ N ( i ) s i m ( i , j ) ( r u , j − r ‾ j ) ∑ j ∈ N ( i ) s i m ( i , j ) r_{u,i} = \overline{r}_i + \frac{\sum_{j \in N(i)} sim(i,j) (r_{u,j} - \overline{r}_j)}{\sum_{j \in N(i)} sim(i,j)} ru,i​=ri​+∑j∈N(i)​sim(i,j)∑j∈N(i)​sim(i,j)(ru,j​−rj​)​

其中:

  • r u , i r_{u,i} ru,i​ 是用户 u u u 对物品 i i i 的预测评分。
  • r ‾ i \overline{r}_i ri​ 是物品 $ i $ 的平均评分。
  • N ( i ) N(i) N(i) 是与物品 i i i 相似的物品集合。
  • s i m ( i , j ) sim(i,j) sim(i,j) 是物品 i i i 和物品 j j j 之间的相似度。
  • r u , j r_{u,j} ru,j​ 是用户 u u u 对物品 j j j 的实际评分。
  • r ‾ j \overline{r}_j rj​ 是物品 j j j 的平均评分。

为了更便于理解这个过程,我们下面来看一个具体的例子。

实例分析

假设我们根据历史数据生成了以下 用户-项目 的评分矩阵:
项目 A 项目 B 项目 C 项目 D 用户 1 5 3 2 3 用户 2 4 3 3 2 用户 3 ? 预测 5 4 3 用户 4 3 4 6 5 用户 5 2 6 5 3 \begin{array}{cccc} & 项目A & 项目B & 项目C & 项目D \\ 用户1 & 5 & 3 & 2 & 3 \\ 用户2 & 4 & 3 & 3 & 2 \\ 用户3 & ?{预测} & 5 & 4 & 3 \\ 用户4 & 3 & 4 & 6 & 5 \\ 用户5 & 2 & 6 & 5 & 3 \\ \end{array} 用户1用户2用户3用户4用户5​项目A54?预测32​项目B33546​项目C23465​项目D32353​

我们需要根据基于项目的协同过滤算法来预测 用户3 对于 项目A 的评分,假设邻域 K = 2 K=2 K=2。

步骤1:计算项目相似度

在之前基于用户协同过滤算法中,我们计算的是目标用户对其他用户(观察用户)的评分的余弦相似度,而这里则不同,我们需要计算的是目标项目对其他项目的评分的余弦相似度,然后再根据相似度和其他用户的评分来预测 用户3项目A 的评分。

计算项目A和其他项目的余弦相似度

项目A和项目B的余弦相似度

根据评分矩阵,我们知道项目A的评分向量:[5, 4, -, 3, 2] , 项目B的评分向量:[3, 3, 5, 4, 6]

由于项目A中有位用户还没有评分(待预测),所以这里我们只考虑有共同评分用户的部分,计算相似性:

sim ( A , B ) = 5 ⋅ 3 + 4 ⋅ 3 + 3 ⋅ 4 + 2 ⋅ 6 5 2 + 4 2 + 3 2 + 2 2 ⋅ 3 2 + 3 2 + 5 2 + 4 2 + 6 2 = 15 + 12 + 12 + 12 25 + 16 + 9 + 4 ⋅ 9 + 9 + 25 + 16 + 36 = 51 54 ⋅ 95 ≈ 51 7.35 ⋅ 9.75 ≈ 51 71.66 ≈ 0.711 \text{sim}(A, B) = \frac{5 \cdot 3 + 4 \cdot 3 + 3 \cdot 4 + 2 \cdot 6}{\sqrt{5^2 + 4^2 + 3^2 + 2^2} \cdot \sqrt{3^2 + 3^2 + 5^2 + 4^2 + 6^2}}\newline = \frac{15 + 12 + 12 + 12}{\sqrt{25 + 16 + 9 + 4} \cdot \sqrt{9 + 9 + 25 + 16 + 36}}\newline= \frac{51}{\sqrt{54} \cdot \sqrt{95}} \newline \approx \frac{51}{7.35 \cdot 9.75} \newline \approx \frac{51}{71.66} \newline \approx 0.711 sim(A,B)=52+42+32+22 ​⋅32+32+52+42+62 ​5⋅3+4⋅3+3⋅4+2⋅6​=25+16+9+4 ​⋅9+9+25+16+36 ​15+12+12+12​=54 ​⋅95 ​51​≈7.35⋅9.7551​≈71.6651​≈0.711

项目A和项目C的余弦相似度

同理计算,项目A的评分向量:[5, 4, -, 3, 2] 项目C的评分向量:[2, 3, 4, 6, 5]

sim ( A , C ) = 5 ⋅ 2 + 4 ⋅ 3 + 3 ⋅ 6 + 2 ⋅ 5 5 2 + 4 2 + 3 2 + 2 2 ⋅ 2 2 + 3 2 + 4 2 + 6 2 + 5 2 \text{sim}(A, C) = \frac{5 \cdot 2 + 4 \cdot 3 + 3 \cdot 6 + 2 \cdot 5}{\sqrt{5^2 + 4^2 + 3^2 + 2^2} \cdot \sqrt{2^2 + 3^2 + 4^2 + 6^2 + 5^2}} sim(A,C)=52+42+32+22 ​⋅22+32+42+62+52 ​5⋅2+4⋅3+3⋅6+2⋅5​

= 10 + 12 + 18 + 10 54 ⋅ 54 = 50 54 ≈ 0.926 = \frac{10 + 12 + 18 + 10}{\sqrt{54} \cdot \sqrt{54}} = \frac{50}{54} \approx 0.926 =54 ​⋅54 ​10+12+18+10​=5450​≈0.926

项目A和项目D的余弦相似度

同理计算,项目A的评分向量:[5, 4, -, 3, 2] 项目D的评分向量:[3, 2, 3, 5, 3]

sim ( A , D ) = 5 ⋅ 3 + 4 ⋅ 2 + 3 ⋅ 5 + 2 ⋅ 3 5 2 + 4 2 + 3 2 + 2 2 ⋅ 3 2 + 2 2 + 3 2 + 5 2 + 3 2 \text{sim}(A, D) = \frac{5 \cdot 3 + 4 \cdot 2 + 3 \cdot 5 + 2 \cdot 3}{\sqrt{5^2 + 4^2 + 3^2 + 2^2} \cdot \sqrt{3^2 + 2^2 + 3^2 + 5^2 + 3^2}} sim(A,D)=52+42+32+22 ​⋅32+22+32+52+32 ​5⋅3+4⋅2+3⋅5+2⋅3​

= 15 + 8 + 15 + 6 54 ⋅ 52 ≈ 44 7.35 ⋅ 7.21 ≈ 44 53.00 ≈ 0.830 = \frac{15 + 8 + 15 + 6}{\sqrt{54} \cdot \sqrt{52}} \approx \frac{44}{7.35 \cdot 7.21} \approx \frac{44}{53.00} \approx 0.830 =54 ​⋅52 ​15+8+15+6​≈7.35⋅7.2144​≈53.0044​≈0.830

步骤2:选择最相似的K个项目

我们已经计算了项目之间的相似度:

sim ( A , B ) ≈ 0.711 \text{sim}(A, B) \approx 0.711 sim(A,B)≈0.711

sim ( A , C ) ≈ 0.926 \text{sim}(A, C) \approx 0.926 sim(A,C)≈0.926

sim ( A , D ) ≈ 0.830 \text{sim}(A, D) \approx 0.830 sim(A,D)≈0.830
由于邻域 K = 2 K=2 K=2,因此我们根据以上计算到的相似度排名,选择最相似(值越大越相似)的两个项目来进行后续计算:

  1. 项目C(相似度0.926)
  2. 项目D(相似度0.830)

步骤3:计算项目的平均评分

r ˉ A = 5 + 4 + 3 + 2 4 = 14 4 = 3.5 \bar{r}_A = \frac{5 + 4 + 3 + 2}{4} = \frac{14}{4} = 3.5 rˉA​=45+4+3+2​=414​=3.5

r ˉ B = 3 + 3 + 5 + 4 + 6 5 = 21 5 = 4.2 \bar{r}_B = \frac{3 + 3 + 5 + 4 + 6}{5} = \frac{21}{5} = 4.2 rˉB​=53+3+5+4+6​=521​=4.2

r ˉ C = 2 + 3 + 4 + 6 + 5 5 = 20 5 = 4.0 \bar{r}_C = \frac{2 + 3 + 4 + 6 + 5}{5} = \frac{20}{5} = 4.0 rˉC​=52+3+4+6+5​=520​=4.0

r ˉ D = 3 + 2 + 3 + 5 + 3 5 = 16 5 = 3.2 \bar{r}_D = \frac{3 + 2 + 3 + 5 + 3}{5} = \frac{16}{5} = 3.2 rˉD​=53+2+3+5+3​=516​=3.2

步骤4:生成预测评分

r 3 , A = r ˉ A + ∑ j ∈ N ( A ) s i m ( A , j ) ( r 3 , j − r ˉ j ) ∑ j ∈ N ( A ) s i m ( A , j ) r_{3,A} = \bar{r}_A + \frac{\sum_{j \in N(A)} sim(A, j) (r_{3,j} - \bar{r}_j)}{\sum_{j \in N(A)} sim(A, j)} r3,A​=rˉA​+∑j∈N(A)​sim(A,j)∑j∈N(A)​sim(A,j)(r3,j​−rˉj​)​

r 3 , A = 3.5 + s i m ( A , C ) × ( r 3 , C − r ˉ C ) + s i m ( A , D ) × ( r 3 , D − r ˉ D ) s i m ( A , C ) + s i m ( A , D ) r_{3,A} = 3.5 + \frac{sim(A, C) \times (r_{3,C} - \bar{r}_C) + sim(A, D) \times (r_{3,D} - \bar{r}_D)}{sim(A, C) + sim(A, D)} r3,A​=3.5+sim(A,C)+sim(A,D)sim(A,C)×(r3,C​−rˉC​)+sim(A,D)×(r3,D​−rˉD​)​

r 3 , A = 3.5 + 0.926 × ( 4 − 4.0 ) + 0.830 × ( 3 − 3.2 ) 0.926 + 0.830 r_{3,A} = 3.5 + \frac{0.926 \times (4 - 4.0) + 0.830 \times (3 - 3.2)}{0.926 + 0.830} r3,A​=3.5+0.926+0.8300.926×(4−4.0)+0.830×(3−3.2)​

r 3 , A = 3.5 + 0.926 × 0 + 0.830 × ( − 0.2 ) 0.926 + 0.830 r_{3,A} = 3.5 + \frac{0.926 \times 0 + 0.830 \times (-0.2)}{0.926 + 0.830} r3,A​=3.5+0.926+0.8300.926×0+0.830×(−0.2)​

r 3 , A = 3.5 + 0 − 0.166 1.756 r_{3,A} = 3.5 + \frac{0 - 0.166}{1.756} r3,A​=3.5+1.7560−0.166​

r 3 , A = 3.5 − 0.094 ≈ 3.41 r_{3,A} = 3.5 - 0.094 \approx 3.41 r3,A​=3.5−0.094≈3.41

根据计算,我们得出 用户3项目A 的预测评分约为:3.41 分。

标签:frac,项目,评分,用户,cdot,算法,过滤,社交,sim
From: https://blog.csdn.net/oLawrencedon/article/details/140132867

相关文章