皮尔森(pearson)相关系数代码实现

Table of Contents

  • Synopsis
  • Definition
  • Code
    • 1.numpy.corrcpef()实现
      • 结果矩阵中值(rowvar=True)的意义:
    • 2.调用scipy库函数
    • 3.手动实现
  • Reference

Synopsis

在统计学中,皮尔逊相关系数( Pearson correlation coefficient),又称皮尔逊积矩相关系数(Pearson product-moment correlation coefficient,简称 PPMCC或PCCs),是用于度量两个变量X和Y之间的相关**(线性相关),其值介于-1与1之间**。

Definition

两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商
在这里插入图片描述
上式定义了总体相关系数,常用希腊小写字母ρ作为代表符号。估算样本的协方差和标准差,可得到皮尔逊相关系数,常用英文小写字母 r代表:
皮尔森(pearson)相关系数代码实现_第1张图片

Code

由于方差 = 方的期望-期望的方,更一般得形式是Cov(X,Y) = E(XY) -E(X)E(Y)在这里插入图片描述
利用该公式可得:
在这里插入图片描述
这也可以用numpy.corrcoef()源码即:
在这里插入图片描述
C表示协方差矩阵

代码中的Key Point是要搞清楚变量是行表示,还是列表示

1.numpy.corrcpef()实现

皮尔森(pearson)相关系数代码实现_第2张图片

结果矩阵中值(rowvar=True)的意义:

返回矩阵的行数=返回矩阵的列数=输入矩阵1的行数+输入矩阵2的行数(行变量表示)
皮尔森(pearson)相关系数代码实现_第3张图片

import numpy as np

Mat1 = np.array([[1, 2, 3], [4, 5, 6]])
Mat2 = np.array([[11, 25, 346], [734, 48, 49]])

correlation = np.corrcoef(Mat1, Mat2)

print("矩阵1=\n", Mat1)
print("矩阵2=\n", Mat2)
print("相关系数矩阵=\n", correlation)

2.调用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)

3.手动实现

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))

Reference

  • numpy官方文档
  • 百科
  • Python Numpy库 numpy.corrcoef()函数讲解
  • Python三种方法计算皮尔逊相关系数(Pearson correlation coefficient)

你可能感兴趣的:(项目实训,讲义)