iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 皮尔森相关系数(Pearson)
  • 894
分享到

python 皮尔森相关系数(Pearson)

python概率论机器学习数据分析 2023-08-31 12:08:45 894人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

文章目录 一、概述二、定义2.1 总体样本定义2.2 估算样本定义2.3 两种计算方式2.4 皮尔森距离 三、python 实现3.1 生成随机数据集3.2 绘制散点图3.3 计算相关系数

文章目录

一、概述

  • 皮尔森相关系数也称皮尔森积矩相关系数(Pearson product-moment correlation coefficient) ,是一种线性相关系数,是最常用的一种相关系数。记为r,用来反映两个变量X和Y的线性相关程度,r 值介于-1到1之间,绝对值越大表明相关性越强。
  • 适用连续变量。
  • 相关系数与相关程度一般划分为
       0.8 - 1.0 极强相关
       0.6 - 0.8 强相关
       0.4 - 0.6 中等程度相关
       0.2 - 0.4 弱相关
       0.0 - 0.2 极弱相关或无相关

二、定义

2.1 总体样本定义

ρ X , Y = c o v ( X , Y ) σ X σ Y = E ( X − μ X ) E ( Y − μ Y ) σ X σ Y \begin{aligned} \rho_{X,Y} = \frac {cov(X,Y)} {\sigma_{X} \sigma_{Y}} = \frac {E(X-\mu_{X}) E(Y-\mu_{Y})} {\sigma_{X} \sigma_{Y}} \end{aligned} ρX,Y=σXσYcov(X,Y)=σXσYE(XμX)E(YμY)
其中, σX = E { [ X − E ( X ) ] 2 } , σY = E { [ Y − E ( Y ) ] 2 } \sigma_{X} = \sqrt{E\{[X - E(X)]^{2}\}},\sigma_{Y} = \sqrt{E\{[Y - E(Y)]^{2}\}} σX=E{[XE(X)]2} ,σY=E{[YE(Y)]2}

2.2 估算样本定义

  • 估算样本的协方差和标准差,可得到样本相关系数(即样本皮尔森相关系数),常用 r 表示:
    r = ∑ i = 1 n ( X i − X ‾ ) ( Y i − Y ‾ ) ∑ i = 1 n ( X i − X ‾ ) 2 ∑ i = 1 n ( Y i − Y ‾ ) 2 \begin{aligned} r = \frac { \displaystyle \sum_{i=1}^{n} (X_{i} - \overline{X}) (Y_{i} - \overline{Y}) } { \sqrt{ \displaystyle \sum_{i=1}^{n} (X_{i} - \overline{X})^{2} } \sqrt{ \displaystyle \sum_{i=1}^{n} (Y_{i} - \overline{Y})^{2} } } \end{aligned} r=i=1n(XiX)2 i=1n(YiY)2 i=1n(XiX)(YiY)

  • 还可以由(Xi,Yi)样本点的标准分数均值估计得到与上式等价的表达式
    r = 1 n − 1 ∑ i = 1 n ( X i − X ‾ σ X) ( Y i − Y ‾ σ Y)\begin{aligned} r = \frac{1}{n-1} \sum_{i=1}^{n}{ (\frac {X_{i} - \overline{X}} {\sigma_{X}} ) (\frac {Y_{i} - \overline{Y}} {\sigma_{Y}} ) } \end{aligned} r=n11i=1n(σXXiX)(σYYiY)
    其中,X i − X ‾ σ X \frac {X_{i} - \overline{X}} {\sigma_{X}} σXXiX 是样本X的标准分数。

2.3 两种计算方式

  • (1)
    ρ X , Y = c o v ( X , Y ) σ X σ Y = E ( X − μ X ) E ( Y − μ Y ) σ X σ Y = E ( X Y ) − E ( X ) E ( Y ) E ( X 2 ) − E 2 ( X ) E ( Y 2 ) − E 2 ( Y ) \begin{aligned} \rho_{X,Y} = \frac {cov(X,Y)} {\sigma_{X} \sigma_{Y}} = \frac {E(X-\mu_{X}) E(Y-\mu_{Y})} {\sigma_{X} \sigma_{Y}} = \frac {E(XY) - E(X)E(Y)} { \sqrt{E(X^2) - E^{2}(X)} \sqrt{E(Y^2) - E^{2}(Y)} } \end{aligned} ρX,Y=σXσYcov(X,Y)=σXσYE(XμX)E(YμY)=E(X2)E2(X) E(Y2)E2(Y) E(XY)E(X)E(Y)

  • (2)
    ρ X , Y = n ∑ X Y − ∑ X ∑ Y n ∑ X 2 − ( ∑ X ) 2 n ∑ Y 2 − ( ∑ Y ) 2 \begin{aligned} \rho_{X,Y} = \frac {n \sum{XY} - \sum{X}\sum{Y}} { \sqrt{n \sum{X^{2}} - (\sum{X})^{2}} \sqrt{n \sum{Y^{2}} - (\sum{Y})^{2}} } \end{aligned} ρX,Y=nX2(X)2 nY2(Y)2 nXYXY

2.4 皮尔森距离

d X , Y =1− ρ X , Y d_{X,Y} = 1 - \rho_{X,Y} dX,Y=1ρX,Y

三、python 实现

3.1 生成随机数据集

import randomimport pandas as pdn = 10000X = [random.nORMalvariate(100, 10) for i in range(n)] # 随机生成服从均值100,标准差10的正态分布序列Y = [random.normalvariate(100, 10) for i in range(n)] # 随机生成服从均值100,标准差10的正态分布序列Z = [i*j for i,j in zip(X,Y)]df = pd.DataFrame({"X":X,"Y":Y,"Z":Z})

在这里插入图片描述

3.2 绘制散点图

import matplotlib.pyplot as plt # 绘制散点图矩阵pd.plotting.scatter_matrix(df)plt.show()

在这里插入图片描述

3.3 计算相关系数

3.3.1 自定义函数(无显著性检验)

import mathdef PearsonFirst(X,Y):    '''        公式一    '''    XY = X*Y    EX = X.mean()    EY = Y.mean()    EX2 = (X**2).mean()    EY2 = (Y**2).mean()    EXY = XY.mean()    numerator = EXY - EX*EY     # 分子    denominator = math.sqrt(EX2-EX**2)*math.sqrt(EY2-EY**2) # 分母        if denominator == 0:        return 'NaN'    rhoXY = numerator/denominator    return rhoXYdef PearsonSecond(X,Y):    '''        公式二    '''    XY = X*Y    X2 = X**2    Y2 = Y**2    n = len(XY)    numerator = n*XY.sum() - X.sum()*Y.sum()                # 分子    denominator = math.sqrt(n*X2.sum() - X.sum()**2)*math.sqrt(n*Y2.sum() - Y.sum()**2) # 分母        if denominator == 0:        return 'NaN'    rhoXY = numerator/denominator    return rhoXY     r1 = PearsonFirst(df['X'],df['Z'])  # 使用公式一计算X与Z的相关系数r2 = PearsonSecond(df['X'],df['Z']) # 使用公式二计算X与Z的相关系数print("r1: ",r1)print("r2: ",r2)

在这里插入图片描述

3.3.2 Python 函数

(1)pandas.corr 函数(无显著性检验)

  • 参数解析
    DataFrame.corr(
      method = ‘pearson’, # 可选值为{‘pearson’:‘皮尔森’, ‘kendall’:‘肯德尔秩相关’, ‘spearman’:‘斯皮尔曼’}
      min_periods=1    # 样本最少的数据量
    )
df.corr(method="pearson")

在这里插入图片描述

(2)scipy.stats.pearsonr 函数 (有显著性检验)

from scipy.stats import pearsonrr = pearsonr(df['X'],df['Z'])print("pearson系数:",r[0])print("   P-Value:",r[1])

在这里插入图片描述

(3)pandas.corr 加 scipy.stats.pearsonr 获取相关系数检验P值矩阵

def GetPvalue_Pearson(x,y):    return pearsonr(x,y)[1]df.corr(method=GetPvalue_Pearson)

在这里插入图片描述

来源地址:https://blog.csdn.net/small__roc/article/details/123519616

--结束END--

本文标题: python 皮尔森相关系数(Pearson)

本文链接: https://www.lsjlt.com/news/385708.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作