Python计算余弦相似度与皮尔逊相关系数详解

Luna
Luna
发布时间:2026-10-13| 3人浏览过
原创

本文详细介绍在Python中计算向量相似度的两种核心方法:夹角余弦与皮尔逊相关系数。通过具体代码示例,展示如何利用NumPy和SciPy库实现这两种算法,并深入解析它们在平移不变性、尺度不变性及方向相关性上的区别与适用场景。

余弦相似度原理与计算

夹角余弦(Cosine Similarity)

该指标也被称为余弦相似度。在几何学中,夹角余弦用于衡量两个向量方向的差异;在机器学习中,这一概念被引入以评估样本向量之间的相似程度。

在二维空间内,向量A(x1, y1)与向量B(x2, y2)的夹角余弦计算公式如下:

对于两个n维样本点a(x11, x12, …, x1n)和b(x21, x22, …, x2n),其夹角余弦的计算方式为:

同理,针对任意两个n维样本点a(x11, x12, …, x1n)和b(x21, x22, …, x2n),可采用上述夹角余弦概念来量化它们之间的相似程度。

具体公式表达为:

余弦值的取值范围介于[-1, 1]之间。通过计算两个向量的夹角并得出对应的余弦值,可以表征这两个向量的相似性。当夹角越小(趋近于0度)时,余弦值越接近1,表明两个向量的方向越一致,相似度越高。若两个向量方向完全相反,夹角余弦取最小值-1;当余弦值为0时,两向量正交,夹角为90度。由此可见,余弦相似度仅与向量的方向相关,而与向量的幅值大小无关。


import numpy as np
x=np.random.random(10)
y=np.random.random(10)
 
#方法一:根据公式求解
d1=np.dot(x,y)/(np.linalg.norm(x)*np.linalg.norm(y))
 
#方法二:根据scipy库求解
from scipy.spatial.distance import pdist
X=np.vstack([x,y])
d2=1-pdist(X,'cosine')

当两个向量完全相等时,计算得到的余弦值为1。以下代码演示了如何计算得出d=1的情况:


d=1-pdist([x,x],'cosine')

皮尔逊相关系数与Python实现

皮尔逊相关系数(Pearson Correlation)

(1) 皮尔逊相关系数的定义

前文提到的余弦相似度仅反映向量方向,但会受到向量平移的影响。例如在夹角余弦公式中,若将向量x平移为x+1,余弦值会发生改变。为了实现平移不变性,需引入皮尔逊相关系数(Pearson Correlation),有时也直接称为相关系数。

若将夹角余弦公式改写为:

皮尔逊相关系数具备平移不变性和尺度不变性,能够计算出两个向量(或维度)之间的相关性。

在Python中的实现方式如下:


import numpy as np
x=np.random.random(10)
y=np.random.random(10)
 
#方法一:根据公式求解
x_=x-np.mean(x)
y_=y-np.mean(y)
d1=np.dot(x_,y_)/(np.linalg.norm(x_)*np.linalg.norm(y_))
 
#方法二:根据numpy库求解
X=np.vstack([x,y])
d2=np.corrcoef(X)[0][1]

相关系数是衡量随机变量X与Y相关程度的一种统计方法,其取值范围为[-1, 1]。相关系数的绝对值越大,表明X与Y的相关度越高。当X与Y存在线性相关关系时,相关系数取值为1(正线性相关)或-1(负线性相关)。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。