皮尔逊相关系数计算
时间: 2025-05-21 15:22:16 浏览: 21
### 皮尔逊相关系数的计算方法及其在协同过滤中的应用
#### 1. 皮尔逊相关系数定义
皮尔逊相关系数是一种用于衡量两个变量之间线性关系强度和方向的统计量,其取值范围为 [-1, +1]。正值表示正相关,负值表示负相关,绝对值越接近于 1,则表明两者的线性关系越强[^2]。
---
#### 2. 计算公式
假设存在两个向量 \(X\) 和 \(Y\),分别表示两位用户对多个项目的评分序列,则它们之间的皮尔逊相关系数可以通过以下公式计算:
\[ r_{XY} = \frac{\text{Cov}(X, Y)}{\sigma_X \cdot \sigma_Y} \]
其中:
- \(\text{Cov}(X, Y)\) 是 \(X\) 和 \(Y\) 的协方差;
- \(\sigma_X\) 和 \(\sigma_Y\) 分别是 \(X\) 和 \(Y\) 的标准差。
另一种等价形式为:
\[ r_{XY} = \frac{n\sum(xy) - (\sum x)(\sum y)}{\sqrt{[n\sum(x^2)-(\sum x)^2][n\sum(y^2)-(\sum y)^2]}} \]
这里 \(x\) 和 \(y\) 表示对应位置上的评分值,\(n\) 则指代有效评分的数量(即双方均给出评分的位置数目)[^4]。
---
#### 3. Python 实现代码
以下是利用 NumPy 库实现皮尔逊相关系数的具体例子:
```python
import numpy as np
def pearson_correlation(vec_x, vec_y):
"""
Calculate Pearson correlation coefficient between two vectors.
Parameters:
vec_x (numpy array): First input vector.
vec_y (numpy array): Second input vector.
Returns:
float: Pearson correlation coefficient value.
"""
mean_x = np.mean(vec_x)
mean_y = np.mean(vec_y)
cov_xy = np.sum((vec_x - mean_x) * (vec_y - mean_y))
std_x = np.sqrt(np.sum((vec_x - mean_x)**2))
std_y = np.sqrt(np.sum((vec_y - mean_y)**2))
if std_x == 0 or std_y == 0:
return 0
return cov_xy / (std_x * std_y)
# Example data points representing user ratings on items
ratings_user_1 = np.array([5, 3, 4, 4]) # Ratings by User A
ratings_user_2 = np.array([3, 1, 2, 3]) # Ratings by User B
correlation_value = pearson_correlation(ratings_user_1, ratings_user_2)
print(f"Pearson Correlation Coefficient: {correlation_value}")
```
---
#### 4. 在协同过滤中的作用
在基于用户的协同过滤中,皮尔逊相关系数被广泛应用于评估任意两名用户之间的相似度。相比于简单的余弦相似度或欧几里得距离,它的一个显著优势在于考虑到了用户评分的整体分布特性——即使某些用户倾向于打高分而另一些更保守,只要他们的相对偏好一致,仍能获得较高的匹配分数[^3]。
同样,在基于物品的协同过滤框架下,也可以借助这一指标来发现哪些项目具备类似的吸引力模式,并据此扩展推荐列表[^3]。
---
#### 5. 特性和注意事项
尽管皮尔逊相关系数功能强大,但在实际部署过程中需要注意以下几个方面:
- **稀疏性问题**:当用户-物品交互矩阵非常稀疏时,可能会因为缺乏足够的共同评分项而导致估计偏差增大。
- **冷启动挑战**:新加入系统的用户或物品通常缺少足够的历史数据支持,从而难以准确计算出可靠的相似度得分[^1]。
---
阅读全文
相关推荐

















