一、np.var

数学上学过方差:$$ D(X)=\sum_{i\in [0,n)} ({x-\bar{x}})^2 $$
np.var()实际上是均方差,均方差的意义就是将方差进行了平均化,从而使得此值不会随着数据的增多而发生变化。
np.std()是标准差,np.std()的平方等于np.var(),标准差在高斯分布中用$\sigma$表示。
不论是方差还是标准差,它们衡量的都是二阶中心矩。为什么是二阶而不是一阶?这是一个问题。

函数原型:numpy.var(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<class numpy._globals._NoValue>)
计算张量a在axis轴上的方差

  • a:一个ndarray,不一定是一维
  • axis:可取值为None,int,int元组。当取值为None时,会把张量a展平成一维数组;当指定一个或多个int时,沿着axis指定的轴计算方差,其它轴的形状会保留。
  • dtype:在计算方差的时候使用的数据类型,如果a是int类型的张量,计算方差时也会使用float32类型
  • out:放置计算结果的数组,主要用于节省空间,out的维度必须保证正确
  • ddof:int,ddof是“Delta Degrees of Freedom”,表示自由度的个数,在计算方差时,分子是各个值和均值的差的平方之和,分母为(N-ddof)
  • keepdims:是否保留a的形状

返回值variance是一个ndarray

import numpy as npa = np.random.randint(0, 10, (2, 3))
print(a)
print(np.var(a))
print(np.var(a, axis=0))
print(np.var(a, axis=1))
print(np.var(a, keepdims=True))
print(np.var(a, axis=0, keepdims=True))
print(np.var(a, axis=(0, 1)))

输出为

[[2 1 5][7 3 0]]
5.666666666666667
[6.25 1.   6.25]
[2.88888889 8.22222222]
[[5.66666667]]
[[6.25 1.   6.25]]
5.666666666666667

关于ddof

import numpy as npa = np.random.randint(0, 10, 4)
print(np.var(a), '=',np.sum((a - np.mean(a)) ** 2) / len(a))
ddof = 1
print(np.var(a, ddof=ddof), '=',np.sum((a - np.mean(a)) ** 2) / (len(a) - ddof))

二、np.cov

np.cov用来计算协方差
函数原型:numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None)
首先理清两个概念:

  • variable:变量,也就是feature
  • observation:观测,也就是样本

参数介绍:

  • m是一个一维向量或者二维矩阵,当m为一个向量时,它相当于一个1行n列的矩阵,最终输出的协方差矩阵为$1\times 1$的矩阵(也就是一个标量)。当m是一个二维矩阵时,它的每一行表示一个feature(numpy官方文档称之为variable),每一列表示一个样本(observation)。我们想要知道的是feature之间的相关性。假设m是n行k列的二维矩阵,那么输出为$n\times n$的协方差矩阵。
  • y和m一样,可以是一维向量,也可以是二维矩阵。y相当于给m添加了若干个新行,也就是m=np.hstack(m,y)。y的列数必须和m一致,否则没法把m和y的行拼起来。实际上,这个参数是可有可无的,因为单单用m矩阵就足够了。举例来说,m是一个n行k列的矩阵,y是一个p行k列的矩阵,那么把m和y拼起来得到一个(n+p)行k列的矩阵。在这个矩阵上计算协方差,得到一个(n+p)阶的方阵。
  • rowvar是一个布尔值,用来描述矩阵m和矩阵y的信息。默认情况下,m矩阵的一行对应一个feature,一列对应一个样本,每个feature就被称为variable,rowvar的意思是每行表示一个feature。此值默认为True。
  • bias,在计算协方差时,如果bias=True,分母为N(N表示样本数,也就是观测个数),表示有偏估计;默认情况下,此值为False,分母为N-1表示有偏估计。这个问题略微复杂。
  • ddof:表示自由度,当此值不为None,分母为N-ddof。当此值不为None时,bias参数失效。
  • fweights:一个一维整型数组,表示每个观测出现的次数。提供此参数的目的是,防止m矩阵过大。
  • aweights:一个一维浮点数组,表示每个观测的权重。权重大表明这个观测准确,权重小表明这个权重不太重要。

返回值:out一个方阵,它的维数等于feature的个数。

数学上的协方差的定义:
$$ cov(X,Y)= (X-\bar{X})\cdot (Y-\bar{Y}) $$
此式中,X和Y皆为向量。方差是特殊的协方差D(X)=cov(X,X)。协方差表示的是两个向量的关联程度,其实就相当于:把两个向量中的变量进行中心化(减去均值),然后计算剩余向量的内积。
np.cov和数学上的协方差并不一样,在无偏估计情况下:$np.cov=\frac{cov}{n-1}$;在有偏估计情况下,$np.cov=\frac{COV}{n}$。其中n表示X向量和Y向量的维度。
例子:方差是特殊地协方差

a = [1, 2, 3, 4, 6]
print(np.cov(a), np.var(a) * len(a) / (len(a) - 1))

例子:两个变量的协方差

import numpy as np
a, b = np.random.rand(2, 4)
print(np.cov(a, b))
print(np.cov([a, b]))
print(np.dot(a - np.mean(a), b - np.mean(b)) / (len(a) - 1))

例子:理解m和y的关系

import numpy as npa = [[1, 2], [4, 7]]
b = [[7, 16], [17, 8]]
c = np.cov(a, b)
print(c)
print(np.vstack((a,b)))
print(np.cov(np.vstack((a, b))))

三、np.correlate

数学上相关系数的定义:$$ \ro(X,Y)=\frac{cov(X,Y)}{\sqrt{cov(X,X)\times cov(Y,Y)}}$$
函数原型:numpy.corrcoef(x, y=None, rowvar=True, bias=<class 'numpy._globals._NoValue'>, ddof=<class 'numpy._globals._NoValue'>)

理解了np.cov()函数之后,很容易理解np.correlate(),二者参数几乎一模一样。
np.cov()描述的是两个向量协同变化的程度,它的取值可能非常大,也可能非常小,这就导致没法直观地衡量二者协同变化的程度。相关系数实际上是正则化的协方差,n个变量的相关系数形成一个n维方阵。

参数介绍:

  • x:一个一维向量或者二维矩阵,每行表示一个feature,每列表示一个样本
  • y:列数和x一致,用来和x进行拼接,相当于添加了|y|个feature。
  • rowvar:布尔值,默认为True,表示每行表示一个feature,也就是每行表示一个variable。
  • bias:已废弃,不要使用它。
  • ddof:已废弃,不要使用它。

返回值:R一个n维方阵,n的个数和变量的个数相同。

参考资料

PCA实现

转载于:https://www.cnblogs.com/weiyinfu/p/10693445.html

numpy中的方差、协方差、相关系数相关推荐

  1. 标准差 方差 协方差 相关系数

    一.统计学的基本概念 统计学里最基本的概念就是样本的均值.方差.标准差.首先,我们给定一个含有n个样本的集合,下面给出这些概念的公式描述: 均值: 标准差: 方差: 均值描述的是样本集合的中间点,它告 ...

  2. 随机变量的期望 方差 协方差 相关系数的性质

    期望性质:E(C)=C,C为任意常数 E(aX+bY)=aE(X)+bE(Y) E(aX+C)=aE(X)+C X,Y独立 E(XY)=E(X)E(Y) 方差:D(X)=E(X*X)-E(X)*E(X ...

  3. 协方差与相关系数 numpy中cov与corrcoef的使用

    协方差与相关系数 协方差与相关系数 协方差 相关系数 1.协方差 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值时另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值:如果两 ...

  4. numpy中方差var、协方差cov求法

    在PCA中涉及到了方差var和协方差cov,下面详细了解这两个函数的用法.numpy中var和cov函数求法和MATLAB中var和cov函数求法类似. 首先均值,样本方差,样本协方差公式分别为 其中 ...

  5. matlab 均值、方差、标准差、数据中值、协方差、相关系数、均方根误差

    mean(X):对矩阵A求列平均:mean(X,2)对矩阵X求行平均:若X为向量,mean(X)返回X中平均. 分母为n时,是整体方差 方差:Y=var(X,0,1):求矩阵X的列向量方差: Y=va ...

  6. python计算样本方差_Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算...

    使用numpy可以做很多事情,在这篇文章中简单介绍一下如何使用numpy进行方差/标准方差/样本标准方差/协方差的计算. variance: 方差 方差(Variance)是概率论中最基础的概念之一, ...

  7. python方差的计算公式_Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算...

    使用numpy可以做很多事情,在这篇文章中简单介绍一下如何使用numpy进行方差/标准方差/样本标准方差/协方差的计算. variance: 方差 方差(Variance)是概率论中最基础的概念之一, ...

  8. python使用numpy中的np.mean函数计算数组的均值、np.var函数计算数据的方差、np.std函数计算数组的标准差

    python使用numpy中的np.mean函数计算数组的均值.np.var函数计算数据的方差.np.std函数计算数组的标准差 目录

  9. 爱因斯坦求和约定在Python扩展库Numpy中的实现

    推荐教材: <Python数据分析.挖掘与可视化>(慕课版)(ISBN:978-7-115-52361-7),董付国,人民邮电出版社,定价49.8元,2020年1月出版,2021年12月第 ...

最新文章

  1. python里面map函数_python中的map()函数
  2. python 跳出多重循环
  3. 如何为Apache Kylin快速开发新数据源?
  4. 为什么构造函数不能声明为虚函数,析构函数可以,构造函数中为什么不能调用虚函数?
  5. c# 定位内存快速增长_CTF丨Linux Pwn入门教程:针对函数重定位流程的相关测试(下)...
  6. 机器人实现屠宰自动化
  7. 常哥带你认识NoSQL和Redis的强大
  8. .NET Core 3.0 的新改进:针对分布式应用程序的故障诊断和监控
  9. 安装教程-VMware 12 安装 Windows 10 企业版
  10. 严重的 Windows DNS RCE漏洞 SIGRed PoC 已现身,微补丁发布
  11. CentOS安装JDK 17
  12. AI2(App Inventor 2)离线版服务器(2019.8.25更新)
  13. Linux Shell基础教程
  14. 独立站开发优化问题?
  15. 张小龙是高球冠军,大前研一是物理学家:​为什么牛人在很多领域都是世界第一?...
  16. 关于对象中的this指向和修改this指向问题。
  17. HTML中字体相关单位
  18. 【已更新】万能门店小程序独立版V5.1二开完整版 无限DIY+不限制小程序生成数量+数10款插件
  19. ansible第一次使用模块报错
  20. [学习笔记] Python【第031讲:永久存储:腌制一缸美味的泡菜】总结

热门文章

  1. spark streaming checkpointing
  2. 突破验证,安装Media Player11.
  3. [转][C#]Environment 类
  4. 表达式求值(NOIP2013 普及组第二题)
  5. ContentLoadingProgressBar不显示问题
  6. 构建和实现单点登录解决方案
  7. 鼠标指向表格时 显示更多信息 toolTipController1
  8. 【南邮操作系统实验】页面置换算法(FIFO、LRU、OPT) Python 版
  9. [转]形态学操作:膨胀与腐蚀
  10. NB朴素贝叶斯理论推导与三种常见模型