标签:python numpy statistics probability correlation
对于数据X = [0,0,1,1,0]和Y = [1,1,0,1,1]
>> np.corrcoef(X,Y)
回报
array([[ 1. , -0.61237244],
[-0.61237244, 1. ]])
但是,根据http://docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html中显示的公式,我无法使用np.var和np.cov重现此结果:
>> np.cov([0,0,1,1,0],[1,1,0,1,1])/sqrt(np.var([0,0,1,1,0])*np.var([1,1,0,1,1]))
array([[ 1.53093109, -0.76546554],
[-0.76546554, 1.02062073]])
这里发生了什么?
解决方法:
这是因为,np.var默认的delta自由度是0,而不是1.
In [57]:
X = [0,0,1,1,0]
Y = [1,1,0,1,1]
np.corrcoef(X,Y)
Out[57]:
array([[ 1. , -0.61237244],
[-0.61237244, 1. ]])
In [58]:
V = np.sqrt(np.array([np.var(X, ddof=1), np.var(Y, ddof=1)])).reshape(1,-1)
np.matrix(np.cov(X,Y))
Out[58]:
matrix([[ 0.3 , -0.15],
[-0.15, 0.2 ]])
In [59]:
np.matrix(np.cov(X,Y))/(V*V.T)
Out[59]:
matrix([[ 1. , -0.61237244],
[-0.61237244, 1. ]])
或者从另一个角度来看:
In [70]:
V=np.diag(np.cov(X,Y)).reshape(1,-1) #the diagonal elements
In [71]:
np.matrix(np.cov(X,Y))/np.sqrt(V*V.T)
Out[71]:
matrix([[ 1. , -0.61237244],
[-0.61237244, 1. ]])
真正发生了什么,np.cov(m,y =无,rowvar = 1,偏差= 0,ddof =无),当没有提供偏差和ddof时,默认归一化为N-1,N为数字观察所以,这相当于delta的自由度为1.不幸的是,np.var的默认值(a,axis = None,dtype = None,out = None,ddof = 0,keepdims = False)具有默认的delta度自由0.
每当不确定时,最安全的方法是抓住协方差矩阵的对角元素,而不是单独计算var,以确保一致的行为.
标签:python,numpy,statistics,probability,correlation 来源: https://codeday.me/bug/20190725/1531046.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。