使用皮尔逊相关系数实现推荐系统

使用皮尔逊相关系数实现推荐系统

1. 什么是皮尔逊相关系数?

皮尔逊相关系数(Pearson Correlation Coefficient)是一种常用的统计量,用来衡量两个变量之间的线性相关性。它的取值范围是从 -1 到 1:

  • 1 表示完全正相关:两个变量同时增大或同时减小。
  • -1 表示完全负相关:一个变量增大,另一个变量减小。
  • 0 表示不相关:两个变量之间没有明显的线性关系。

在推荐系统中,皮尔逊相关系数通常用于物品-物品协同过滤(item-based collaborative filtering),用于衡量两个物品的相似度。通过对用户评分数据的分析,可以根据用户对相似物品的评分来推荐他们可能感兴趣的其他物品。

2. 皮尔逊相关系数公式

对于两个变量 X X X Y Y Y,皮尔逊相关系数的计算公式如下:

r = ∑ ( X − X ˉ ) ( Y − Y ˉ ) ∑ ( X − X ˉ ) 2 ∑ ( Y − Y ˉ ) 2 r = \frac{\sum (X - \bar{X})(Y - \bar{Y})}{\sqrt{\sum (X - \bar{X})^2} \sqrt{\sum (Y - \bar{Y})^2}} r=(XXˉ)2 (YYˉ)2 (XXˉ)(YYˉ)
其中:

  • X X X Y Y Y 是两个变量(在推荐系统中,通常是两个物品的用户评分)。
  • X ˉ \bar{X} Xˉ Y ˉ \bar{Y} Yˉ X X X Y Y Y 的均值。

通过计算物品之间的相关性,我们可以找到与某个物品最相似的其他物品,从而为用户进行推荐。

3. 皮尔逊相关系数在推荐系统中的应用

在基于物品的协同过滤推荐系统中,皮尔逊相关系数常用于衡量两个物品的相似度。假设有一个用户-物品评分矩阵,如下所示:

用户ID电影A电影B电影C
用户1532
用户2423
用户3315
用户4423
用户5531

如果我们想要为某个用户推荐与电影A相似的电影,可以通过计算电影A与其他电影的皮尔逊相关系数,找到最相似的电影。

4. 计算皮尔逊相关系数的步骤

我们以计算电影A和电影B之间的相似度为例,来介绍如何计算皮尔逊相关系数:

1. 提取电影A和电影B的评分:
用户ID电影A电影B
用户153
用户242
用户331
用户442
用户553
2. 计算电影A和电影B的均值:
  • 电影A的平均评分: ( 5 + 4 + 3 + 4 + 5 ) / 5 = 4.2 (5 + 4 + 3 + 4 + 5) / 5 = 4.2 (5+4+3+4+5)/5=4.2
  • 电影B的平均评分: ( 3 + 2 + 1 + 2 + 3 ) / 5 = 2.2 (3 + 2 + 1 + 2 + 3) / 5 = 2.2 (3+2+1+2+3)/5=2.2
3. 计算偏离均值后的评分:
用户ID电影A的偏离值( X − X ˉ X - \bar{X} XXˉ电影B的偏离值( Y − Y ˉ Y - \bar{Y} YYˉ
用户1 5 − 4.2 = 0.8 5 - 4.2 = 0.8 54.2=0.8 3 − 2.2 = 0.8 3 - 2.2 = 0.8 32.2=0.8
用户2 4 − 4.2 = − 0.2 4 - 4.2 = -0.2 44.2=0.2 2 − 2.2 = − 0.2 2 - 2.2 = -0.2 22.2=0.2
用户3 3 − 4.2 = − 1.2 3 - 4.2 = -1.2 34.2=1.2 1 − 2.2 = − 1.2 1 - 2.2 = -1.2 12.2=1.2
用户4 4 − 4.2 = − 0.2 4 - 4.2 = -0.2 44.2=0.2 2 − 2.2 = − 0.2 2 - 2.2 = -0.2 22.2=0.2
用户5 5 − 4.2 = 0.8 5 - 4.2 = 0.8 54.2=0.8 3 − 2.2 = 0.8 3 - 2.2 = 0.8 32.2=0.8
4. 计算皮尔逊相关系数:
  1. 计算分子:
    ( 0.8 × 0.8 ) + ( − 0.2 × − 0.2 ) + ( − 1.2 × − 1.2 ) + ( − 0.2 × − 0.2 ) + ( 0.8 × 0.8 ) = 2.8 (0.8 \times 0.8) + (-0.2 \times -0.2) + (-1.2 \times -1.2) + (-0.2 \times -0.2) + (0.8 \times 0.8) = 2.8 (0.8×0.8)+(0.2×0.2)+(1.2×1.2)+(0.2×0.2)+(0.8×0.8)=2.8

  2. 计算电影A和电影B的偏离平方和的平方根:
    0. 8 2 + ( − 0.2 ) 2 + ( − 1.2 ) 2 + ( − 0.2 ) 2 + 0. 8 2 = 2.8 ≈ 1.673 \sqrt{0.8^2 + (-0.2)^2 + (-1.2)^2 + (-0.2)^2 + 0.8^2} = \sqrt{2.8} \approx 1.673 0.82+(0.2)2+(1.2)2+(0.2)2+0.82 =2.8 1.673

  3. 皮尔逊相关系数为:
    r = 2.8 1.673 × 1.673 = 2.8 2.8 = 1.0 r = \frac{2.8}{1.673 \times 1.673} = \frac{2.8}{2.8} = 1.0 r=1.673×1.6732.8=2.82.8=1.0

这表示电影A和电影B之间的评分完全正相关,相关系数为1.0,因此用户对这两部电影的评分模式非常相似。

5. 计算电影A和电影C的皮尔逊相关系数

接下来,我们继续计算电影A和电影C之间的皮尔逊相关系数。

1. 提取电影A和电影C的评分:
用户ID电影A电影C
用户152
用户243
用户335
用户443
用户551
2. 计算电影A和电影C的均值:
  • 电影A的平均评分: ( 5 + 4 + 3 + 4 + 5 ) / 5 = 4.2 (5 + 4 + 3 + 4 + 5) / 5 = 4.2 (5+4+3+4+5)/5=4.2
  • 电影C的平均评分: ( 2 + 3 + 5 + 3 + 1 ) / 5 = 2.8 (2 + 3 + 5 + 3 + 1) / 5 = 2.8 (2+3+5+3+1)/5=2.8
3. 计算偏离均值后的评分:
用户ID电影A的偏离值( X − X ˉ X - \bar{X} XXˉ电影C的偏离值( Y − Y ˉ Y - \bar{Y} YYˉ
用户1 5 − 4.2 = 0.8 5 - 4.2 = 0.8 54.2=0.8 2 − 2.8 = − 0.8 2 - 2.8 = -0.8 22.8=0.8
用户2 4 − 4.2 = − 0.2 4 - 4.2 = -0.2 44.2=0.2 3 − 2.8 = 0.2 3 - 2.8 = 0.2 32.8=0.2
用户3 3 − 4.2 = − 1.2 3 - 4.2 = -1.2 34.2=1.2 5 − 2.8 = 2.2 5 - 2.8 = 2.2 52.8=2.2
用户4 4 − 4.2 = − 0.2 4 - 4.2 = -0.2 44.2=0.2 3 − 2.8 = 0.2 3 - 2.8 = 0.2 32.8=0.2
用户5 5 − 4.2 = 0.8 5 - 4.2 = 0.8 54.2=0.8 1 − 2.8 = − 1.8 1 - 2.8 = -1.8 12.8=1.8
4. 计算皮尔逊相关系数:
  1. 计算分子:
    ( 0.8 × − 0.8 ) + ( − 0.2 × 0.2 ) + ( − 1.2 × 2.2 ) + ( − 0.2 × 0.2 ) + ( 0.8 × − 1.8 ) = − 0.64 − 0.04 − 2.64 − 0.04 − 1.44 = − 4.8 (0.8 \times -0.8) + (-0.2 \times 0.2) + (-1.2 \times 2.2) + (-0.2 \times 0.2) + (0.8 \times -1.8) = -0.64 - 0.04 - 2.64 - 0.04 - 1.44 = -4.8 (0.8×0.8)+(0.2×0.2)+(1.2×2.2)+(0.2×0.2)+(0.8×1.8)=0.640.042.640.041.44=4.8

  2. 计算电影A和电影C的偏离平方和的平方根:

    • 对于电影A:
      0. 8 2 + ( − 0.2 ) 2 + ( − 1.2 ) 2 + ( − 0.2 ) 2 + 0. 8 2 = 2.8 ≈ 1.673 \sqrt{0.8^2 + (-0.2)^2 + (-1.2)^2 + (-0.2)^2 + 0.8^2} = \sqrt{2.8} \approx 1.673 0.82+(0.2)2+(1.2)2+(0.2)2+0.82 =2.8 1.673

    • 对于电影C:
      ( − 0.8 ) 2 + 0. 2 2 + 2. 2 2 + 0. 2 2 + ( − 1.8 ) 2 = 8.32 ≈ 2.884 \sqrt{(-0.8)^2 + 0.2^2 + 2.2^2 + 0.2^2 + (-1.8)^2} = \sqrt{8.32} \approx 2.884 (0.8)2+0.22+2.22+0.22+(1.8)2 =8.32 2.884

  3. 皮尔逊相关系数为:
    r = − 4.8 1.673 × 2.884 = − 4.8 4.825 ≈ − 0.995 r = \frac{-4.8}{1.673 \times 2.884} = \frac{-4.8}{4.825} \approx -0.995 r=1.673×2.8844.8=4.8254.80.995

这表示电影A和电影C之间的评分呈现出强负相关,相关系数接近 -1.0。因此,用户对这两部电影的评分模式是完全相反的。

6. 使用 Pandas 计算皮尔逊相关系数

在实际应用中,推荐系统通常会有大量的用户和物品数据。我们可以使用 Pandas 的 corr() 函数快速计算皮尔逊相关系数。以下是一个示例代码:

import pandas as pd

# 创建用户-物品评分矩阵
data = {
    'userId': [1, 2, 3, 4, 5],
    'movieA': [5, 4, 3, 4, 5],
    'movieB': [3, 2, 1, 2, 3],
    'movieC': [2, 3, 5, 3, 1]
}

df = pd.DataFrame(data)

# 计算电影A和电影B的皮尔逊相关系数
correlation_AB = df['movieA'].corr(df['movieB'], method='pearson')
print(f"电影A和电影B的皮尔逊相关系数: {correlation_AB}")

# 计算电影A和电影C的皮尔逊相关系数
correlation_AC = df['movieA'].corr(df['movieC'], method='pearson')
print(f"电影A和电影C的皮尔逊相关系数: {correlation_AC}")

输出结果:

电影A和电影B的皮尔逊相关系数: 1.0
电影A和电影C的皮尔逊相关系数: -0.995

通过上述代码,我们可以快速计算电影A和电影B、电影A和电影C之间的相似度,进而为用户推荐与其评分高的电影类似或不同的电影。

7. 结论

皮尔逊相关系数是一种有效的工具,可以帮助推荐系统找到相似的物品。在基于物品的协同过滤中,通过计算物品之间的相关系数,可以为用户推荐与他们喜好相似或不相似的物品。结合 Pandas 和其他数据分析工具,皮尔逊相关系数可以快速、准确地应用于大规模推荐系统中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机智的小神仙儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值