协方差、样本协方差、协方差矩阵、相关系数详解(python代码)

这篇具有很好参考价值的文章主要介绍了协方差、样本协方差、协方差矩阵、相关系数详解(python代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

对于一个随机变量的分布特征,可以由均值、方差、标准差等进行描述。而对于两个随机变量的情况,有协方差和相关系数来描述两个随机变量的相互关系。

本文主要参考概率论与数理统计的教科书,整理了协方差、样本协方差、协方差矩阵、相关系数的概念解释和代码。

协方差(covariance)

协方差的概念来自概率论,实际应用中的样本协方差则与统计学概念有关。

协方差反应了随机变量 X 、 Y X、Y XY之间“协同”变化的关系。也可以说,协方差在某种意义上给出了两个变量线性相关性的强度以及这些变量的尺度。

Y Y Y就是 X X X时, c o v ( X , Y ) = c o v ( X ) = v a r ( X ) cov(X,Y)=cov(X)=var(X) cov(X,Y)=cov(X)=var(X)协方差即为方差,这就是我们称其为协方差的原因。1

协方差定义:
c o v ( X , Y ) = E { [ X − E ( X ) ] [ Y − E ( Y ) ] } = E ( X Y ) − E ( X ) E ( Y ) cov(X,Y)=E\{[X-E(X)][Y-E(Y)]\} =E(XY)-E(X)E(Y) cov(X,Y)=E{[XE(X)][YE(Y)]}=E(XY)E(X)E(Y)

直观解释

c o v ( X , Y ) > 0 cov(X,Y)>0 cov(X,Y)>0,即事件 { X > E ( X ) } ∩ { Y > E ( Y ) } \{X>E(X)\}\cap\{Y>E(Y)\} {X>E(X)}{Y>E(Y)} { X < E ( X ) } ∩ { Y < E ( Y ) } \{X<E(X)\}\cap\{Y<E(Y)\} {X<E(X)}{Y<E(Y)}发生的可能性更大,说明 X X X Y Y Y均有同时大于或同时小于各自平均值的趋势。

协方差的绝对值如果很大,则意味着变量值变化很大,并且它们同时距离各自的均值很远。

如果协方差是正的,那么两个变量都倾向于同时取得相对较大的值。如果协方差是负的,那么其中一个变量倾向于取得相对较大的值的同时,另一个变量倾向于取得相对较小的值,反之亦然。

样本协方差(sample covariance)

实际应用中,总体 X X X的均值 μ \mu μ、方差 σ 2 \sigma^2 σ2均未知, ( X 1 , X 2 , . . . , X n ) (X_1,X_2,...,X_n) (X1,X2,...,Xn)为取自该总体的一个样本,则样本均值 X ˉ \bar{X} Xˉ μ \mu μ的无偏估计量,样本方差 S 2 S^2 S2 σ 2 \sigma^2 σ2的无偏估计量。

同理,总体 X 、 Y X、Y XY的协方差也是一个未知参数,而样本协方差是基于数据得到的估计量。样本协方差是总体协方差的无偏估计。

样本协方差可以用下式计算:
S X Y = ∑ i = 1 n ( X i − X ˉ ) ( Y i − Y ˉ ) n − 1 S_{XY}=\frac{\textstyle\sum_{i=1}^n{(X_i-\bar{X})(Y_i-\bar{Y})}}{n-1} SXY=n1i=1n(XiXˉ)(YiYˉ)
样本方差、样本协方差的分母是n-1而不是n的解释和数学推导可以看下这篇文章。

协方差矩阵(covariance matrix)

随机向量 x ∈ R n \bold{x}\in\R^{n} xRn的协方差矩阵是一个 n × n n×n n×n的矩阵,并且满足:
c o v ( x ) i , j = c o v ( x i , x j ) cov(\bold{x})_{i,j}=cov(x_i,x_j) cov(x)i,j=cov(xi,xj)
协方差矩阵的对角元是方差:
c o v ( x i , x i ) = v a r ( x i ) cov(x_i,x_i)=var(x_i) cov(xi,xi)=var(xi)

代码示例

基于numpy的cov函数2,可以得到协方差矩阵:

import numpy as np
x1 = [-2.1, -1,  4.3]
x2 = [3,  1.1,  0.12]

X = np.stack((x1, x2), axis=0)# 每一行作为一个变量
np.cov(X)
#[out]:array([[11.71      , -4.286     ], 
#       	  [-4.286     ,  2.144133]])
np.cov(x1, x2)
#[out]:array([[11.71      , -4.286     ], 
#       	  [-4.286     ,  2.144133]])
np.cov(x1)
#[out]:array(11.71)

或者用公式计算:

def de_mean(x):
    xmean = np.mean(x)
    return [xi - xmean for xi in x]

def covariance(x, y):
    n = len(x)
    return np.dot(de_mean(x), de_mean(y)) / (n-1)

covariance(x1,x2)
#[out]: -4.2860000000000005

相关系数(Pearson Correlation Coefficient)

协方差可以描述随机变量之间协同变化的关系,但在使用中存在这样一个问题:例如,要讨论新生婴儿的身高X和体重Y的协方差,若采用两种不同的单位,米和千克或者厘米和克,后者协方差是前者的100000倍!由于量纲的不同导致X与Y的协方差前后不同。

为避免这样的情形发生,将随机变量标准化, X ∗ = X − E ( X ) D ( X ) , Y ∗ = Y − E ( Y ) D ( Y ) X^*=\frac{X-E(X)}{\sqrt{D(X)}},Y^*=\frac{Y-E(Y)}{\sqrt{D(Y)}} X=D(X) XE(X),Y=D(Y) YE(Y),再求协方差 c o v ( X ∗ , Y ∗ ) cov(X^*,Y^*) cov(X,Y),这就是随机变量X和Y的相关系数,又称为标准化协方差。1

这是统计学家Pearson提出的用于统计两个随机变量之间线性相关程度的统计量,也叫皮尔逊相关系数(Pearson Correlation Coefficient)

随机变量 X X X Y Y Y的相关系数:
ρ X Y = c o v ( X , Y ) D ( X ) D ( Y ) \rho_{XY}=\frac{cov(X,Y)}{\sqrt{D(X)}\sqrt{D(Y)}} ρXY=D(X) D(Y) cov(X,Y)

设二维随机变量 (X,Y) 的相关系数 ρ X Y ρ_{XY} ρXY存在,则:

  • ∣ ρ X Y ∣ = 1 |ρ_{XY}|=1 ρXY=1时,(X,Y)的取值(x,y)在直线y=ax+b上的概率为1,称X与Y完全线性相关;
  • ρ X Y ρ_{XY} ρXY>0时,称X与Y正线性相关;
  • ρ X Y ρ_{XY} ρXY<0时,称X与Y负线性相关。

直观解释

与协方差相比,相关系数(correlation)将每个变量的贡献归一化,为了只衡量变量的相关性而不受各个变量尺度大小的影响。

代码实现

对于矩阵a,numpy.corrcoef(a)可计算行与行之间的相关系数,行为一个随机变量,列为其观测值,输出为相关系数矩阵。3

import numpy as np
x1 = [-2.1, -1,  4.3]
x2 = [3,  1.1,  0.12]

X = np.stack((x1, x2), axis=0)# 每一行作为一个变量
np.corrcoef(X)
#[out]: array([[ 1.        , -0.85535781],
      		   [-0.85535781,  1.        ]])

除了numpy的函数,pandas对象也装配了常用的数学、统计学方法。这些方法从DataFrame的行或列中抽取一个Series或一系列值的单个值(如总和或平均值)。与NumPy数组中的类似方法相比,它们内建了处理缺失值的功能。4

pandas中Seriescorr方法计算的是两个Series中重叠的、非NA的、按索引对齐的值的相关性。cov计算的是协方差。

pandas中DataFramecorrcov方法会分别以DataFrame的形式返回相关性和协方差矩阵。5

import pandas as pd

df = pd.DataFrame([(.2, .3), (.0, .6), (.6, .0), (.2, .1)],
                  columns=['dogs', 'cats'])
                  
"""
计算相关系数,支持三种方法
pearson : standard correlation coefficient
kendall : Kendall Tau correlation coefficient
spearman : Spearman rank correlation
"""
df.corr(method='pearson')

"""
计算协方差矩阵
"""
df.cov()

输出:
协方差、样本协方差、协方差矩阵、相关系数详解(python代码)


  1. 《概率论与数理统计》 ↩︎ ↩︎

  2. https://numpy.org/doc/stable/reference/generated/numpy.cov.html ↩︎

  3. https://zhuanlan.zhihu.com/p/35122515 ↩︎

  4. 《利用python进行数据分析》 ↩︎

  5. https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.corr.html ↩︎文章来源地址https://www.toymoban.com/news/detail-409554.html

到了这里,关于协方差、样本协方差、协方差矩阵、相关系数详解(python代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 阿白数模笔记之协方差矩阵与相关矩阵

    目录 前言 一、方差 二、协方差矩阵 ①协方差 ②自协方差矩阵 互协方差矩阵​编辑 ③互协方差矩阵 Ⅰ、数学定义 Ⅱ、MATLAB运算 三、相关矩阵 ①person相关系数 ②自相关矩阵 ③互相关矩阵 Ⅰ、数学定义 Ⅱ、matlab运算         作为数模小白,前天在学习FA算法时看到协方差

    2024年02月11日
    浏览(45)
  • 矩阵运算_矩阵的协方差矩阵/两个矩阵的协方差矩阵_求解详细步骤示例

            在统计学中, 方差 是用来度量 单个随机变量 的 离散程度 ,而协方差则一般用来刻画 两个随机变量 的 相似程度。 参考: 带你了解什么是Covariance Matrix协方差矩阵 - 知乎 将输入数据A进行中心化处理得到A\\\'。即通过 减去每个维度的平均值 来实现中心化。 注意:

    2024年02月03日
    浏览(46)
  • 【概率论理论】协方差,协方差矩阵理论(机器学习)

      在许多算法中需要求出两个分量间相互关系的信息。协方差就是描述这种相互关联程度的一个特征数。   设 ( X , Y ) (X,Y) ( X , Y ) 是一个二维随机变量,若 E [ ( X − E ( X ) ) ( Y − E ( Y ) ) ] E[(X-E(X))(Y-E(Y))] E [ ( X − E ( X ) ) ( Y − E ( Y ) ) ] 存在,则称此数学期望为 X X X 与

    2024年02月14日
    浏览(49)
  • 协方差矩阵在torch和numpy中的比较,自行实现torch协方差矩阵

    数学中(教科书、大学课堂、数学相关的科普视频),一个矩阵的向量往往是竖着的, 一列作为一个vector ,这一点numpy库也是这样默认的。 但是在机器学习以torch框架为例,一个有意义的向量或者说embedding 是横着的 。 因为numpy库默认是一列是一个向量而torch等机器学习框架

    2023年04月08日
    浏览(38)
  • 协方差矩阵

    首先先了解方差与协方差: 协方差: (1)针对 一维样本集合 时(y i =x i ),求出的协方差其实就是方差,既方差是协方差的一种特殊情况。协方差意义和方差一样,都是 反应集合中各元素离散程度 。 (2)针对 二维样本集合 时,求出的协方差反映的就是 两个维度之间的相

    2024年02月10日
    浏览(66)
  • 因子模型:协方差矩阵

    本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 因子协方差矩阵 (factor covariance matrix)在计算风险的时候很重要。如果一个模型有个因子,那么协方差矩阵的大小就是。对角线元素是每个因子的方差,非对角线元素是协方差,这些协方差有可能不为零。 协方差

    2024年02月04日
    浏览(86)
  • 协方差矩阵的研究

    (1)协方差矩阵的定义、计算过程。         协方差(Covariance):在概率论和统计学中用于衡量两个变量的总体误差。协方差在某种意义上给出了两个变量线性相关性的强度以及这些变量的尺度。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。协方差矩阵

    2024年02月13日
    浏览(37)
  • 数字信号谱估计方法对比仿真——估计自相关,周期图法,协方差法,burg算法,修正协方差法

    目录 一、理论基础 1.1自相关谱估计 1.2周期图法谱估计 1.3协方差法谱估计 1.4burg算法谱估计 1.5修正协方差谱估计 二、核心程序 三、仿真结论        自相关谱估计、周期图法谱估计、协方差法谱估计、Burg算法谱估计和修正协方差谱估计是常见的信号谱估计方法,用于分析信

    2024年02月10日
    浏览(40)
  • 协方差矩阵到底有什么用?

    我们知道,线性代数,可以完成空间上的线性变换——旋转,缩放。对于协方差,我们隐约可以想到,它能解释一个随机变量,它在各个维度的变化程度。但是,这种认识其实还是处于比较浅层次的。数学嘛,总要落实到公式上,才算认识比较深刻。 我认为,协方差一个经典

    2024年02月16日
    浏览(45)
  • MATLAB中均值、方差、标准差、协方差、相关性的计算

    xmean = 2 ans = 2 xvar = 0.6667 ans = 0.6667 xvar_1 = 0.8000 ans = 0.8000 ans = 0.6667 xstd = 0.8165 ans = 0.8165 ans = 0.8165 xstd_1 = 0.8944 ans = 0.8944 ans = 0.8944 xcov = 0.6667 xycov = 0.6667 0.5000 0.5000 0.6667 ans = 0.5000 xcov_1 = 0.8000 xycov_1 = 0.8000 0.6000 0.6000 0.8000 ans = 0.6000 xycorrcoef = 1.0000 0.7500 0.7500 1.0000 xzcorrcoef = 1.0000

    2024年02月21日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包