2025年3月26日 星期三 甲辰(龙)年 月廿五 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > 人工智能

皮尔逊相关系数R的代码实现

时间:01-17来源:作者:点击数:35

皮尔逊相关系数代码实现

①直接用numpy的corrcoef方法

  • from math import sqrt
  • import numpy as np
  • x = [2,7,18,88,157, 90,177,570]
  • y = [3,5,15,90,180, 88,160,580]
  • print (np.corrcoef(x,y)) # ✔

输出结果—— (右上左下为R)

[[1. 0.99834875]

[0.99834875 1. ]]

②调用scipy库函数

  • from scipy.stats import pearsonr
  • v1 = [2,7,18,88,157, 90,177,570]
  • v2 = [3,5,15,90,180, 88,160,580]
  • pccs = pearsonr(v1, v2)
  • print(pccs)

输出结果—— (第一位为R)

(0.99834874864405, 1.1241947891650549e-08)

②自己手动实现

  • import math
  • import numpy as np
  • def pearson(v1, v2):
  • n = len(v1)
  • #simple sums
  • sum1 = sum(float(v1[i]) for i in range(n))
  • sum2 = sum(float(v2[i]) for i in range(n))
  • #sum up the squares
  • sum1_pow = sum([pow(v, 2.0) for v in v1])
  • sum2_pow = sum([pow(v, 2.0) for v in v2])
  • #sum up the products
  • p_sum = sum([v1[i] * v2[i] for i in range(n)])
  • #分子num,分母denominator
  • num = p_sum - (sum1*sum2/n)
  • den = math.sqrt((sum1_pow-pow(sum1, 2)/n)*(sum2_pow-pow(sum2, 2)/n))
  • if den == 0:
  • return 0.0
  • return num/den
  • vector1 = [2,7,18,88,157, 90,177,570]
  • vector2 = [3,5,15,90,180, 88,160,580]
  • print(pearson(vector2,vector1))

输出结果——

0.9983487486440501

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门