如何解决如何在 Python 中使用 numpy for 循环手动计算相关系数?
因此,我正在学习 Python 中的第一门适当课程,并且在尝试计算数据集的相关系数时遇到了一些问题。我知道我可以只使用 np.coercoef 但我也希望能够“手动”完成。我尝试了以下代码的各种组合,但我一直得到的答案比 np.coercoef 给我的答案要高(大约 0.62 与 0.57 相比)。
我希望这里有人能帮我找出代码中的问题?
最好的问候,
k_m = np.array([22,48,76,10,22,4,68,44,14,56])
km = np.array([63,39,61,30,51,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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。