我有两个列表a
和b
如下:
a = [4,4,4,1.1]
b = [4,4,4,1.2]
很明显,两个列表中的最后一个值是不同的,仍然是为什么在下面的代码中为什么要使相关系数(来自numpy)等于1
?
print(corrcoef(a,b))
输出:
[[1. 1.]
[1. 1.]]
答案 0 :(得分:4)
您仅假设最后一个值不同,相关系数就不应为1。但是,这种假设可能有误。
要实现的重要事情是,仅在调整每个列表/功能的标度之后才计算相关性。考虑到这一点,您只有两对唯一的数据点。仅给定两个数据点的相关性几乎*总是可以以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]