Python - 如何找出两个向量之间的相关性?

2 投票
3 回答
7789 浏览
提问于 2025-04-15 23:59

给定两个向量 XY,我需要找出它们之间的相关性,也就是它们的线性依赖或独立性。这两个向量的维度是相同的。结果应该是一个浮点数,范围在 [-1.0 .. 1.0] 之间。

举个例子:

X=[-1, 2,    0]
Y=[ 4, 2, -0.3]

找到 y = cor(X,Y),使得 y 属于 [-1.0 .. 1.0]

这应该是一个简单的构造,涉及到列表推导。不允许使用外部库。

更新:好的,如果点积就足够了,那么这是我的解决方案:

nX = 1/(sum([x*x for x in X]) ** 0.5)
nY = 1/(sum([y*y for y in Y]) ** 0.5)
cor = sum([(x*nX)*(y*nY)  for x,y in zip(X,Y) ])

对吧?

3 个回答

2

不要以为一个公式在数学上是对的,它在代码里直接用就一定能正常工作。有些相关性定义在计算时可能会出现数字上的问题。

可以参考 如何准确计算相关性

4

因为范围应该是 [-1, 1],所以我觉得 皮尔逊相关系数 对你的需求来说是合适的。

另外,点积也可以用,但在计算之前你需要先对向量进行归一化处理。如果你的数据中有负值,那么结果的范围可以是 -1 到 1;如果没有负值,结果的范围就只能是 0 到 1。

4

听起来像是一个点积

你可以通过解这个方程来找到两个向量之间角度的余弦值,这个值总是在[-1, 1]的范围内,这样你就能得到你想要的结果。

这个值等于点积除以两个向量的大小。

撰写回答