因此,我正在学习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] 删除。
我来说两句