如何在python中使用numpy for循环手动计算相关系数?

罗勒

因此,我正在学习Python的第一门适当课程,并且偶然发现了一些问题,试图计算数据集的相关系数。我知道我只能使用np.coercoef,但是我也希望能够“手工”完成。我尝试了以下代码的各种组合,但始终能得到比np.coercoef给我的答案要高的答案(大约是0.52到0.62)。

我希望这里的某个人可以帮助我确定代码中的问题?

最好的祝福,

k_m = np.array([22, 48, 76, 10, 22, 4, 68, 44, 10, 76, 14, 56])
km = np.array([63, 39, 61, 30, 51, 44, 74, 78, 55, 58, 41, 69])

gns_k_m = 0
gns_km = 0
cov = 0
sum_k_m = 0
sum_km = 0

for k in range(len(k_m)):
    gns_k_m += k_m[k]/len(k_m)

for k in range(len(km)):
    gns_km += km[k]/len(km)
    
print(gns_k_m, gns_km)

for k in range(len(k_m)):
    cov += (k_m[k]-gns_k_m)*(km[k]-gns_km)/(len(k_m)-1)

print(cov)

for k in range(len(k_m)):
    sum_k_m += (k_m[k]-gns_k_m)**2

sa_k_m = np.sqrt(sum_k_m/len(k_m))

for k in range(len(km)):
    sum_km += (km[k]-gns_km)**2
    
sa_km = np.sqrt(sum_km/len(km))

cor = cov/(sa_k_m*sa_km)

print(cor)
print(np.corrcoef(k_m,km))
一月

问题是np.corrcoef使用归一化除以len(k_m)您而不是除以协方差len(k_m) - 1

因此,如果您重新标准化给出的结果np.corrcoef,您将获得与手动实现相同的值。

In [26]: new_res = (np.corrcoef(k_m, km) * len(k_m) / (len(k_m) - 1))[0, 1]

In [28]: np.allclose(new_res, cor)
Out[28]: True

In [29]: new_res
Out[29]: 0.6165427925911239

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章