python计算变量间的相关系数(python计算多元变量的相关系数)

技术Python协方差与相关系数怎么定义本篇内容介绍了“Python协方差与相关系数怎么定义”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅

本文介绍了“如何定义Python协方差和相关系数”的知识。很多人在实际案例操作中都会遇到这样的困难。接下来,让边肖带领大家学习如何应对这些情况!希望大家认真阅读,学点东西!

联合分布包含丰富的信息。例如,从联合分布中提取随机变量的边际分布,即得到随机变量的分布,从而可以得到随机变量的期望和方差。这样,视线就被限制在单个随机变量上,我们就失去了联合分布中包含的其他有用信息,比如不同随机变量之间的相互作用。为了理解不同随机变量之间的关系,我们需要要求其他描述性的量。

00-1010协方差表示两个随机变量的协同变化关系。我们取一个样本空间,就是学生的体检数据。学生的身高是随机变量X,学生的体重是随机变量y。

10cm 170cm 180cm 60kg 0 . 20 . 050 . 0570kg 0 . 050 . 30 . 0580kg 0 . 050 . 050 . 2根据上表,大身高(180cm)和大体重(80kg)同时出现的概率较高(0.2),小身高值。身高过大往往伴随着体重过大,身高过小往往伴随着体重过小。这种“大”伴随着“大”,“小”伴随着“小”,这叫正相关。根据上述数据,身高和体重之间有很强的正相关关系。

另一方面,如果“大”匹配“小”和“小”匹配“大”的概率高,那么这两个随机变量是负相关的。“最可爱的身高差”就是负相关的一个例子。(样本空间是情侣的身高信息。你可以把男生的身高定义为随机变量,女生的身高定义为另一个随机变量)

就像其他分布描述符一样,协方差从概率分布中提取信息,让我们知道分布的“性能”。对于已知的联合分布,可以在任意两个随机变量之间计算协方差,即数值。

00-1010协方差定义如下:如果X和Y是联合分布的随机变量,并且分别存在期望的XX、YY,则X和Y的协方差为

Cov(X,Y)=E[(XX)(YY)]Cov(X,Y)=E[(XX)(YY)]

协方差的定义是基于期望的。根据期望的定义,协方差可以直接用于离散随机变量和连续随机变量。

我们已经知道,期望是随机变量根据概率的加权平均值。我们加权平均的目标是x xx x和y YY y的乘积,随机变量与期望值的差代表了随机变量的值与中心值的偏差程度,也就是我们所说的“太大”或“太小”:正值的偏差意味着太大,负值的偏差意味着太小。如果存在正相关,即如果有大匹配和小匹配,那么这个乘积就是正的;如果存在负相关,则产品为负。因此,通过(x x) (y y) (x x) (y y)的量,我们表达了x和y之间的相关性。

回到刚才的数据来计算相关性,

10cm 170cm 180cm 60kg 0 . 20 . 050 . 0570kg 0 . 050 . 30 . 0580kg 0 . 050 . 2让高度为X,重量为Y,我们可以通过边缘分布得到X和Y的分布(回想一下)。得到X和Y的期望值,分别是170和70。计算每个网格中的(x x) (y y) (x x) (y y)

10cm 170cm 180cm 60kg 1000-10070kg 00080kg-1000100以上两个表,对应的网格相乘求和得到协方差:

Cov(X,Y)=0.2100 0.2100 0.05(100)0.05(100)=30(1)(2)(1)Cov(X,Y)=0.2100 0.2100 0.05(100)0.05(100)

(2)=30

在上面的计算中,正相关的项目都分配有比较大的概率值。最终的协方差也是一个正值。

根据期望的性质,我们可以改写协方差的表达形式:

Cov(X,Y)=E(XY−XμX−YμX+μXμY)=E(XY)−E(X)μX−E(Y)μY+μXμY=E(XY)−E(X)E(Y)(3)(4)(5)(3)Cov(X,Y)=E(XY−XμX−YμX+μXμY)(4)=E(XY)−E(X)μX−E(Y)μY+μXμY(5)=E(XY)−E(X)E(Y)

当X和Y独立时,有E(XY)=E(X)E(Y)E(XY)=E(X)E(Y),Cov(X,Y)=0Cov(X,Y)=0。

(注意,Cov(X,Y)=0Cov(X,Y)=0并不意味着X和Y独立)

相关系数

正的协方差表达了正相关性,负的协方差表达了负相关性。对于同样的两个随机变量来说,计算出的协方差越大,相关性越强。

但随后一个问题,身高和体重的协方差为30,这究竟是多大的一个量呢?如果我们又发现,身高与鞋号的协方差为5,是否说明,相对于鞋号,身高与体重的的相关性更强呢?

这样横向对比超出了协方差的能力范围。从日常生活经验来说,体重的上下浮动大约为20kg,而鞋号的上下浮动大约可能只是5个号码。所以,对于体重来说,5kg与中心的偏离并不算大,而5个号码的鞋号差距,就可能是最极端的情况了。假设身高和体重的相关强度,与身高和鞋码的相关强度类似,但由于体重本身的数值上下浮动更大,所计算出的协方差也会更大。另一个情况,依然是计算身高与体重的协方差。数据完全不变,而只更改单位。我们的体重用克而不是千克做单位,计算出的协防差是原来数值的1000倍!

为了能进行这样的横向对比,我们需要排除用统一的方式来定量某个随机变量的上下浮动。这时,我们计算相关系数(correlation coefficient)。相关系数是“归一化”的协方差。它的定义如下:

ρ=Cov(X,Y)Var(X)Var(Y)−−−−−−−−−−−−√ρ=Cov(X,Y)Var(X)Var(Y)

相关系数是用协方差除以两个随机变量的标准差。相关系数的大小在-1和1之间变化。再也不会出现因为计量单位变化,而数值暴涨的情况了。

依然使用上面的身高和体重数据,可以计算出

Var(X)=0.3×(60−70)2+0.3×(80−70)2=60Var(X)=0.3×(60−70)2+0.3×(80−70)2=60

Var(Y)=0.3×(180−170)2+0.3×(160−170)2=60Var(Y)=0.3×(180−170)2+0.3×(160−170)2=60

ρ=30/60=0.5ρ=30/60=0.5

这样一个“归一化”了的相关系数,更容易让人把握到相关性的强弱,也更容易在不同随机变量之间,做相关性的横向比较。

双变量正态分布

双变量正态分布是一种常见的联合分布。它描述了两个随机变量X1X1和X2X2的概率分布。概率密度的表达式如下:

f(x1,x2)=12πσ1σ21−ρ2−−−−−√exp[−z2(1−ρ2)]f(x1,x2)=12πσ1σ21−ρ2exp⁡[−z2(1−ρ2)]

其中,

z=(x1−μ1)2σ21−2ρ(x1−μ1)(x2−μ2)σ1σ2+(x2−μ2)2σ22z=(x1−μ1)2σ12−2ρ(x1−μ1)(x2−μ2)σ1σ2+(x2−μ2)2σ22

X1X1和X2X2的边缘密度分别为两个正态分布,即正态分布N(μ1,σ1)N(μ1,σ1), N(μ2,σ2)N(μ2,σ2)。

另一方面,除非ρ=0ρ=0,否则联合分布也并不是两个正态分布的简单相乘。可以证明,ρρ正是双变量正态分布中,两个变量的相关系数。

我们现在绘制该分布的图像。可惜的是,现在的scipy.stats并没有该分布。我们需要自行编写。

选取所要绘制的正态分布,为了简单起见,让μ1=0μ1=0, μ2=0μ2=0, σ1=1σ1=1,σ2=1σ2=1。

我们先让ρ=0ρ=0,此时的联合分布相当于两个正态分布的乘积。绘制不同视角的同一分布,结果如下。可以看到,概率分布是中心对称的。

Python协方差与相关系数怎么定义

Python协方差与相关系数怎么定义

再让ρ=0.8ρ=0.8,也就是说,两个随机变量的相关系数为0.8。绘制不同视角的同一分布,结果如下。可以看到,概率分布并不中心对称。沿着Y=XY=X这条线,概率曲面隆起,概率明显比较高。而沿着Y=−XY=−X这条线,概率较低。这也就是我们所说的正相关。

Python协方差与相关系数怎么定义

Python协方差与相关系数怎么定义

现在,ρρ对于我们来说,有了更具体的现实意义。:-)

# By Vameifrom scipy.stats import normimport numpy as np# this function is to generate a pdf of bivariate normal distributiondef bivar_norm(mu1, mu2, sigma1, sigma2, rho):    # pdf of bivariate norm
    def pdf(x1, x2):        # get z
        part1 = (x1 - mu1)**2/sigma1**2
        part2 = - 2.*rho*(x1 - mu1)*(x2 - mu2)/sigma1*sigma2
        part3 = (x2 - mu2)**2/sigma2**2
        z = part1 + part2 + part3
        cof = 1./(2.*np.pi*sigma1*sigma2*np.sqrt(1 - rho**2))        return cof*np.exp(-z/(2.*(1 - rho**2)))    return pdf
pdf1 = bivar_norm(0, 0, 1, 1, 0)
pdf2 = bivar_norm(0, 0, 1, 1, 0.8)from mpl_toolkits.mplot3d import Axes3Dfrom matplotlib import cmfrom matplotlib.ticker import LinearLocator, FormatStrFormatterimport matplotlib.pyplot as plt# plot functiondef space_surface(pdf, xp, yp, zlim, rot1=30, rot2=30):
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    X = np.arange(*xp)
    Y = np.arange(*yp)
    X, Y = np.meshgrid(X, Y)
    Z = pdf(X, Y)
    surf = ax.plot_surface(X, Y, Z, rstride=8, cstride=8,
         alpha = 0.3)
    cset = ax.contour(X, Y, Z, zdir='z', offset=zlim[0], cmap=cm.coolwarm)
    cset = ax.contourf(X, Y, Z, zdir='x', offset=xp[0], cmap=cm.coolwarm)
    cset = ax.contourf(X, Y, Z, zdir='y', offset=yp[0], cmap=cm.coolwarm)    for angle in range(rot1 + 0, rot1 + 360):
        ax.view_init(rot2, angle)
    ax.set_zlim(*zlim)
    ax.zaxis.set_major_locator(LinearLocator(10))
    ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
    ax.set_xlabel("X")
    ax.set_ylabel("Y")
    ax.set_zlabel("f(x,y)")    # fig.colorbar(surf, shrink=0.5, aspect=5)xp = [-3, 3, 0.05]
yp = [-3, 3, 0.05]
zlim1 = [-0.15, 0.15]
zlim2 = [-0.25, 0.25]
space_surface(pdf1, xp, yp, zlim1, 30, 20)
space_surface(pdf1, xp, yp, zlim1, 60, 45)
space_surface(pdf2, xp, yp, zlim2, 30, 20)
space_surface(pdf2, xp, yp, zlim2, 60, 45)

“Python协方差与相关系数怎么定义”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/154658.html

(1)

相关推荐

  • 微信小程序怎么嵌入python代码(python如何编写微信小程序)

    技术python如何实现微信小程序反编译这篇文章主要介绍“python如何实现微信小程序反编译”,在日常操作中,相信很多人在python如何实现微信小程序反编译问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法

    攻略 2021年12月13日
  • 网上值机提前多久,网上值机后需要提前多久到机场

    技术网上值机提前多久,网上值机后需要提前多久到机场在飞机起飞前2个小时网上值机提前多久,都可以去机场办理登机牌。可以前一天晚上去机场打印登机牌。乘坐飞机前,因需要打印登机牌,领取行程单,办理行李托运,过安检等手续。机场接

    生活 2021年10月22日
  • 怎么用ps换背景颜色,PS如何抠图替换背景色

    技术怎么用ps换背景颜色,PS如何抠图替换背景色1怎么用ps换背景颜色、打开要用ps进行抠图和换背景的图片,直接使用快捷键Ctrl+O打开,或在【文件】中选择【打开】,找到相应的素材点击即可,如下图所示:2、图片打开后,

    生活 2021年10月19日
  • 如何使用R语言包circlize可视化展示blast双序列比对结果

    技术如何使用R语言包circlize可视化展示blast双序列比对结果如何使用R语言包circlize可视化展示blast双序列比对结果,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题

    攻略 2021年11月9日
  • WEB应用是怎么被部署的

    技术WEB应用是怎么被部署的WEB应用是怎么被部署的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一个WEB应用,无论是解压后的目录,还是一

    攻略 2021年11月18日
  • 如何理解MYSQL-GroupCommit 和 2pc提交

    技术如何理解MYSQL-GroupCommit 和 2pc提交这篇文章将为大家详细讲解有关如何理解MYSQL-GroupCommit 和 2pc提交,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后

    攻略 2021年11月16日