为什么这两个列表的相关系数等于1?

Why is the correlation coefficient of these two list equal to 1?

我有两个列表 ab 如下:

a = [4,4,4,1.1]
b = [4,4,4,1.2]  

很明显,两个列表中的最后一个值不同,但为什么我在下面的代码中得到的相关系数(来自 numpy)等于 1

print(corrcoef(a,b))

输出:

[[1. 1.]
 [1. 1.]]

你假设只是因为最后一个值不同,相关系数不应该是 1。但是,这个假设可能是有缺陷的。

要认识到的重要一点是,只有在调整每个 list/feature 的比例后才会计算相关性。考虑到这一点,您只有两对独特的数据点。仅给出两个数据点的相关性几乎*总是以 1 或 -1 的方式构建。这是因为实际值并不重要,因为它们在之前进行了相应的缩放。

例如:

import numpy as np
a = [60, 30]
b = [1050, 490]
print(np.corrcoef(a,b)) #still gives 1.

将此与您基本上通过的内容进行比较:

import numpy as np
a = [4, 1.1]
b = [4, 1.2]
print(np.corrcoef(a,b)) #still gives 1.

两个数据点没有包含足够的信息来表明相关性可以是不等于 1 或 -1 的特定值。

要了解为什么 1 的相关性在这里有意义,请考虑我可以添加的第三点。

a = [6.9, 4, 1.1] #gaps of 2.9
b = [6.8, 4, 1.2] #gaps of 2.8
print(np.corrcoef(a,b)) #still gives 1.

也许这使得相关性可以为 1 的原因稍微清楚一些,因为两个列表中的数据点仍然一起移动 完美。

为了得到3个点的不同相关值,我们可以比较一下。

a = [7, 4, 1.1]
b = [7, 4, 1.2]
print(np.corrcoef(a,b)) #gives 0.99994879

现在我们有足够的数据点来表明相关性不完全为 1。


*关于几乎,例外情况是一个功能根本没有改变的情况。例如 a = [0, 0]b = [0, 1]