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

Python 为什么这两个列表的相关系数等于1?,python,numpy,correlation,Python,Numpy,Correlation,我有两个列表a和b,如下所示: a = [4,4,4,1.1] b = [4,4,4,1.2] 很明显,这两个列表中的最后一个值是不同的,但为什么我在下面的代码中得到的相关系数(来自numpy)等于1: print(corrcoef(a,b)) 输出: [[1. 1.] [1. 1.]] 假设仅因为最后一个值不同,相关系数不应为1。然而,这一假设可能有缺陷 需要认识到的重要一点是,只有在调整了每个列表/特征的比例之后,才能计算相关性。记住这一点,您只有两个唯一的数据点对。仅给出两个数

我有两个列表
a
b
,如下所示:

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

print(corrcoef(a,b))
输出:

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

假设仅因为最后一个值不同,相关系数不应为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]

谢谢你的完美解释。因此,每个集合中至少应有3个唯一的数据点,以获得有意义的相关系数。但是如果我有我的原始帖子中的数据,那么找到它们之间相似性的最佳方法是什么呢?很好的解释。我想我会更关注这样一个事实,即这本质上是计算归一化协方差,与其他值相比,这是最后一个较小的值,归一化将意味着小数位差异的影响最小,导致结果四舍五入到
1
@SuhailSheth在这种情况下,您必须“定义”某些标准上的相似性。一个例子可能是两对之间绝对差值的总和或平均值。但是,您的标准将取决于实际数据点和具体情况。通常,您希望有2对以上的数据点,以便可靠地使用相关性,这是一个更安全的选择。因为1.0是该数据的正确、准确的相关系数。对于任何
a
b
形式的
a=[c,c,c,d1]
b=[c,c,c,d2]
,如果
d1
d2
,则为1.0。(同样,如果
d1>c
d2>c