本文共 1415 字,大约阅读时间需要 4 分钟。
夹角余弦与皮尔逊相关系数
夹角余弦(Cosine)是一种衡量向量方向相似性的方法,其核心思想是两个向量之间的夹角越小,余弦值越接近1,向量越相似。夹角余弦的取值范围为[-1,1],其中-1表示两个向量方向完全相反,0表示垂直,1表示方向完全一致。
在二维空间中,向量A(x1,y1)与向量B(x2,y2)的夹角余弦可以通过以下公式计算:
$$\cos\theta = \frac{x_1x_2 + y_1y_2}{\sqrt{x_1^2 + y_1^2} \cdot \sqrt{x_2^2 + y_2^2}}$$
对于高维空间中的两个n维样本点a(x₁,x₂,…,xₙ)和b(x₁',x₂',…,xₙ'),夹角余弦可以通过类似的公式计算,衡量它们之间的相似程度。夹角余弦只与向量的方向相关,与向量的幅值无关。
在实际应用中,计算夹角余弦可以通过以下两种方法实现:
import numpy as npx = np.random.random(10)y = np.random.random(10)d1 = np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))
from scipy.spatial.distance import pdistX = np.vstack([x, y])d2 = 1 - pdist(X, 'cosine')
需要注意的是,当两个向量完全相同时,夹角余弦值为1,计算结果d=1。
皮尔逊相关系数(Pearson correlation)是一种更为鲁棒的相关度量方法,它能够克服夹角余弦易受向量平移和尺度影响的问题。皮尔逊相关系数的计算方法如下:
首先,将向量x和y分别减去它们的均值,得到标准化后的向量x'和y':
$$x' = x - \bar{x}, \quad y' = y - \bar{y}$$
然后,计算它们的相关系数:
$$r = \frac{\text{Cov}(x', y')}{\sigma_x \cdot \sigma_y}$$
其中,Cov(x', y')是标准化向量的协方差,σ_x和σ_y分别是标准化向量的标准差。
皮尔逊相关系数具有以下优点:
在Python中,皮尔逊相关系数可以通过以下代码实现:
import numpy as npx = np.random.random(10)y = np.random.random(10)x_mean = np.mean(x)y_mean = np.mean(y)x_centered = x - x_meany_centered = y - y_meancov = np.cov(x_centered, y_centered)std_x = np.std(x_centered)std_y = np.std(y_centered)r = cov / (std_x * std_y)
或者利用numpy库:
X = np.vstack([x, y])r = np.corrcoef(X)[0, 1]
皮尔逊相关系数的取值范围为[-1,1],绝对值越大,相关性越强。当相关系数为1时,表示完全正线性相关;为-1时,表示完全负线性相关。
转载地址:http://jdofk.baihongyu.com/