点积接近0但np.corrcoef返回显著负值,求问题原因解析
问题:特征向量点积近0但相关系数非0的原因
问题现象
两个特征向量的点积接近0(结果为5.551115123125783e-17),但使用np.corrcoef计算相关系数时得到显著的负相关系数-0.16304091,预期相关系数也应为0,对此存在疑问。
代码重现
import numpy as np eigenvectors_sorted = np.array([ [-0.4252893 , 0.42100611, 0.71434339, 0.36276216], [ 0.14612219, 0.90470509, -0.33510219, -0.21877734] ]) # 计算点积 print(np.dot(eigenvectors_sorted[0], eigenvectors_sorted[1])) # 输出:5.551115123125783e-17 # 计算相关系数 print(np.corrcoef(eigenvectors_sorted[0], eigenvectors_sorted[1])) # 输出: # [[ 1. -0.16304091] # [-0.16304091 1. ]]
核心原因
点积和皮尔逊相关系数的计算逻辑完全不同:
- 点积:衡量两个向量的正交性,公式为$\sum_{i=1}^n x_i y_i$,这里结果接近0说明原始向量在空间中正交。
- 皮尔逊相关系数:衡量两个变量的线性相关性,计算前会先对每个向量做去均值处理,公式为$\frac{\sum_{i=1}^n (x_i-\bar{x})(y_i-\bar{y})}{\sqrt{\sum_{i=1}^n (x_i-\bar{x})2}\sqrt{\sum_{i=1}n (y_i-\bar{y})^2}}$。
验证计算
计算两个向量的均值:
- 第一个向量均值:$\frac{-0.4252893 + 0.42100611 + 0.71434339 + 0.36276216}{4} = 0.26820559$
- 第二个向量均值:$\frac{0.14612219 + 0.90470509 - 0.33510219 - 0.21877734}{4} = 0.1242369375$
对两个向量去均值后,计算点积约为
-0.13328,再除以去均值向量的模长乘积,结果正好是-0.163左右,和np.corrcoef的输出一致。
结论
特征向量的正交性是基于原始向量的,但皮尔逊相关系数是基于去均值后的向量计算的。这两个向量本身均值不为0,去均值后存在线性相关性,因此相关系数非0。
内容的提问来源于stack exchange,提问作者Titurn
相关产品推荐
相关产品推荐

