返回顶部
首页 > 资讯 > 后端开发 > Python >Python协方差与相关系数怎么定义
  • 319
分享到

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

2023-06-02 07:06:38 319人浏览 泡泡鱼

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

摘要

本篇内容介绍了“python协方差与相关系数怎么定义”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!联合分布中包含了相当丰富的信息。比如从联合

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

联合分布中包含了相当丰富的信息。比如从联合分布中抽取某个随机变量的边缘分布,即获得该随机变量的分布,并可以据此,获得该随机变量的期望和方差。这样做是将视线限制在单一的一个随机变量上,我们损失了联合分布中包含的其他有用信息,比如不同随机变量之间的互动关系。为了了解不同随机变量之间的关系,需要求助其它的一些描述量。

协方差

协方差(covariance)表达了两个随机变量的协同变化关系。我们取一个样本空间,即学生的体检数据。学生的身高为随机变量X,学生的体重为随机变量Y。


160cm170cm180cm
60kg0.20.050.05
70kg0.050.30.05
80kg0.050.050.2

根据上表,大的身高(180cm)和大的体重(80kg)同时出现的概率较大(0.2),小的身高值(160cm)和小的体重(60kg)的概率也较大(0.2)。偏大的身高往往伴随偏大的体重,偏小的身高常伴随偏小的体重。这种“大”伴随着“大”,“小”伴随着“小”的情形,叫做正相关。根据上面的数据,身高和体重两个随机变量正相关性很强。

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

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

定义

协方差的定义如下,如果X和Y是联合分布的随机变量,且分别有期望μXμX,μYμY,那么X和Y的协方差为

Cov(X,Y)=E[(X−μX)(Y−μY)]Cov(X,Y)=E[(X−μX)(Y−μY)]

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

我们已经知道,期望是某个随机变量根据概率的加权平均。我们所要加权平均的目标是X−μXX−μX和Y−μYY−μY的乘积。随机变量和期望的差,代表了随机变量的取值和中心值的偏离程度,也就是我们上面所谓的“偏大”或者“偏小”的情况:正值的偏离表示“偏大”,负值的偏离表示“偏小”。如果是正相关,即大配大,小配小的情况,那么这一乘积为正;如果是负相关,乘积为负。所以,通过(X−μX)(Y−μY)(X−μX)(Y−μY)这个量,我们表达了X和Y的相关性。

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


160cm170cm180cm
60kg0.20.050.05
70kg0.050.30.05
80kg0.050.050.2

让身高为X,体重为Y。我们可以通过边缘分布,来分别获得X和Y的分布(回忆一下)。求得X和Y的期望,分别为170和70。计算各个格子中的(X−μX)(Y−μY)(X−μX)(Y−μY)


160cm170cm180cm
60kg1000-100
70kg000
80kg-1000100

上面的两个表,对应的格子相乘,并求和,就得到协方差:

Cov(X,Y)=0.2×100+0.2×100+0.05×(−100)+0.05×(−100)=30(1)(2)(1)Cov(X,Y)=0.2×100+0.2×100+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 pdfpdf1 = 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协方差与相关系数怎么定义”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Python协方差与相关系数怎么定义

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

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

猜你喜欢
  • Python协方差与相关系数怎么定义
    本篇内容介绍了“Python协方差与相关系数怎么定义”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!联合分布中包含了相当丰富的信息。比如从联合...
    99+
    2023-06-02
  • DEDECMS相关文章以关键字相关的修改方法(自定义函数)
    现在终于出了解决办法: 1 在 inc_functions.php 最后>前 加上 复制代码代码如下://查询指定栏目里包含相应关键字的文章,并列出 //参数说明:$showImg 是否显示缩略图,0表示不显示...
    99+
    2022-06-12
    相关文章 关键字
  • 怎么用python函数求两个数相减差
    你可以定义一个函数,使用参数来表示这两个数,并在函数内部进行相减操作。下面是一个示例代码: def subtract(a, b): ...
    99+
    2023-10-23
    python
  • C#怎么绑定相关数据
    这篇文章主要介绍了C#怎么绑定相关数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。灵活的运用C# 绑定数据操作绑定到简单属性:<%#UserName%>绑定到集...
    99+
    2023-06-17
  • Flex4与自定义布局有什么关系
    这篇文章将为大家详细讲解有关Flex4与自定义布局有什么关系,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Flex4与自定义布局如果您还不熟悉Flex4的***功能,那么有些内容肯定是您想要了解的。Fle...
    99+
    2023-06-17
  • 虚拟主机的相关配置差数怎么选择
    选择虚拟主机的配置应该根据您的网站需求和预算来决定。以下是一些需要考虑的因素:1. 流量和带宽:根据预计的网站流量和所需的带宽选择合...
    99+
    2023-08-23
    虚拟主机
  • python类方法怎么定义
    本篇内容介绍了“python类方法怎么定义”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!定义类方法的定义需要借助于装饰器。在定义类方法时,需...
    99+
    2023-06-30
  • go语言中函数与方法怎么定义
    这篇“go语言中函数与方法怎么定义”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言中函数与方法怎么定义”文章吧。一、怎...
    99+
    2023-07-02
  • python中怎么定义函数
    python中怎么定义函数?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4...
    99+
    2023-06-14
  • python怎么定义numpy数组
    要定义一个numpy数组,首先要导入numpy库,然后可以使用np.array函数来创建数组。下面是一个示例:```pythonim...
    99+
    2023-09-29
    python numpy
  • python中类怎么定义与封装
    在Python中,可以使用class关键字来定义一个类。类的定义包括类名、类的属性和方法。类的封装是指将类的属性和方法封装起来,只允...
    99+
    2023-10-19
    python
  • Python枚举怎么定义与使用
    这篇文章主要介绍了Python枚举怎么定义与使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python枚举怎么定义与使用文章都会有所收获,下面我们一起来看看吧。1. 枚举的定义首先,定义枚举要导入enum模...
    99+
    2023-07-06
  • Python数学相关模块怎么用
    本篇内容介绍了“Python数学相关模块怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、math模块math库是Python提供的内...
    99+
    2023-06-30
  • python静态方法怎么定义
    本篇内容主要讲解“python静态方法怎么定义”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python静态方法怎么定义”吧!定义静态方法也可以直接通过类名调用,不需要先创建对象。区别在于类方法...
    99+
    2023-06-30
  • python对象方法怎么定义
    这篇文章主要讲解了“python对象方法怎么定义”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python对象方法怎么定义”吧!概念在类中,对象调用的函数称为对象方法,一般也称为方法。定义格...
    99+
    2023-06-30
  • TypeScript中函数与类怎么定义
    本文小编为大家详细介绍“TypeScript中函数与类怎么定义”,内容详细,步骤清晰,细节处理妥当,希望这篇“TypeScript中函数与类怎么定义”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。介绍「跳跳」:函数...
    99+
    2023-06-05
  • python中的类怎么定义与封装
    在Python中,可以使用关键字`class`来定义一个类。类是一种抽象的数据类型,可用于封装数据和方法。下面是一个简单的类的定义与...
    99+
    2023-10-11
    python
  • Python闭包与装饰器怎么定义
    这篇文章主要介绍“Python闭包与装饰器怎么定义”,在日常操作中,相信很多人在Python闭包与装饰器怎么定义问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python闭包与装饰器怎么定义”的疑惑有所帮助!...
    99+
    2023-07-06
  • python怎么定义二维数组
    小编给大家分享一下python怎么定义二维数组,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float(浮点型)。...
    99+
    2023-06-14
  • 怎么在python中定义数组
    本篇文章为大家展示了怎么在python中定义数组,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言...
    99+
    2023-06-07
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作