在PCA中涉及到了方差var和协方差cov,这里简单总结下。
首先:均值,样本方差,样本协方差的公式为

均值:X¯=1N∑Ni=1Xi\bar{X}=\frac{1}{N} \sum_{i=1}^{N}X_i

方差:var=1N∑Ni=1(Xi−X¯)2var=\frac{1}{N} \sum_{i=1}^{N}(X_i-\bar{X})^2

样本方差:S=1N−1∑Ni=1(Xi−X¯)2S=\frac{1}{N-1} \sum_{i=1}^{N}(X_i-\bar{X})^2

样本协方差:cov=1N−1∑Ni=1(Xi−X¯)(Yi−Y¯)cov=\frac{1}{N-1} \sum_{i=1}^{N}(X_i-\bar{X})(Y_i-\bar{Y})

首先我们应该清楚的区分两个概念,即方差和样本方差的无偏估计:
方差公式中分母上是N;样本方差无偏估计公式中分母上是N-1 (N为样本个数)。

其中样本方差公式中为什么除的n-1而不是n?样本协方差同样除的是n-1而不是n?如果除的是n,那么求的方差就不是随机抽取变量组成样本的方差,而是整个空间的方差。

1. 求协方差

协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。理解协方差矩阵的关键就在于牢记它计算的是不同维度之间的协方差,而不是不同样本之间,拿到一个样本矩阵,我们最先要明确的就是一行是一个样本还是一个维度。

例1.1

>>> X=np.array([[1 ,5 ,6] ,[4 ,3 ,9 ],[ 4 ,2 ,9],[ 4 ,7 ,2]])
>>> np.cov(X)
array([[  7.  ,   4.5    ,       4.   ,   -0.5     ],[  4.5 ,  10.33333333,   11.5  ,  -7.16666667],[  4.  ,  11.5     ,      13.  ,   -8.5      ],[ -0.5 ,  -7.16666667,   -8.5  ,  6.33333333]])

在numpy中,将x的每一列视作一个独立的变量,因此这里一共有3个4维的变量,因此将会输出一个4*4的协方差矩阵 ,其中对角线元素是每个维度的方差,非对角线上的元素则是不同维度间的协方差。

例1.2 下面是一个协方差实现的另一个简单例子:

>>> import numpy as np
>>> x = np.array([[0, 2], [1, 1], [2, 0]]).T
>>> x
array([[0, 1, 2],[2, 1, 0]])
>>> np.cov(x)  # 两个变量x0和x1,有很大的相关性,但是相反的方向
array([[ 1., -1.],[-1.,  1.]])
>>> x = [-2.1, -1,  4.3]
>>> y = [3,  1.1,  0.12]
>>> X = np.vstack((x,y))
>>> X
array([[-2.1 , -1.  ,  4.3 ],[ 3.  ,  1.1 ,  0.12]])
>>> np.cov(X)
array([[ 11.71      ,  -4.286     ],[ -4.286     ,   2.14413333]])
>>> np.cov(x, y)
array([[ 11.71      ,  -4.286     ],[ -4.286     ,   2.14413333]])
>>> np.cov(x)
array(11.709999999999999)

1.3 numpy中cov(x)与cover(x,y)的区别

示例:

>>> X=np.array([[1 ,5 ,6] ,[4 ,3 ,9 ],[ 4 ,2 ,9],[ 4 ,7 ,2]])
>>> X
array([[1, 5, 6],[4, 3, 9],[4, 2, 9],[4, 7, 2]])
>>> x=X[0:2]
>>> y=X[2:4]
>>> np.cov(X)
array([[  7. ,   4.5   ,       4.  ,    -0.5    ],[  4.5,  10.33333333,  11.5 ,  -7.16666667],[  4. ,  11.5       ,  13.  ,  -8.5       ],[ -0.5,  -7.16666667,  -8.5 ,  6.33333333]])
>>> np.cov(x,y)
array([[  7.  ,   4.5     ,    4.  ,   -0.5      ],[  4.5 ,  10.33333333,  11.5 ,  -7.16666667],[  4.  ,  11.5       ,  13.  ,  -8.5       ],[ -0.5 ,  -7.16666667,  -8.5 ,   6.33333333]])
>>> 

可以看出两者的输出是相同的。因此np.cov(X)其实就是把np.cov(x,y)中两个变量所有的维度纵向拼接在一起作为X参与运算。

2.由协方差矩阵求其相关的矩阵:

假设协方差矩阵sigma

>>> sigma=np.array([[4,1,2],[2,3,4],[2,3,5]])
>>> sigma
array([[4, 1, 2],[2, 3, 4],[2, 3, 5]])
>>> p=len(sigma)  # 得出协方差的长度
>>> p
3
>>> e=np.eye(p)
>>> e
array([[ 1.,  0.,  0.],[ 0.,  1.,  0.],[ 0.,  0.,  1.]])
>>> variance=e*sigma  # 得出协方差矩阵的对角线元素,即方差矩阵
>>> variance
array([[ 4.,  0.,  0.],[ 0.,  3.,  0.],[ 0.,  0.,  5.]])
>>> v=np.power(variance,0.5) # 得出标准差矩阵
>>> v
array([[ 2.        ,  0.        ,  0.        ],[ 0.        ,  1.73205081,  0.        ],[ 0.        ,  0.        ,  2.23606798]])
>>> I=np.linalg.inv(v)  # 得出标准差的逆矩阵
>>> I
array([[ 0.5       ,  0.        ,  0.        ],[ 0.        ,  0.57735027,  0.        ],[ 0.        ,  0.        ,  0.4472136 ]])
>>> cov=I.dot(sigma).dot(I) # 得出相关系数矩阵
>>> cov
array([[ 1.        ,  0.28867513,  0.4472136 ],[ 0.57735027,  1.        ,  1.03279556],[ 0.4472136 ,  0.77459667,  1.        ]])
>>> 

其中对角线元素是每个维度的方差,非对角线上的元素则是不同维度间的协方差

3. 计算矩阵的方差

在数学中,每一维度指的是列,例如:[1,2,3]维度是三维的,但是在array中,每一维度指的是一个array,也就是一个样本。
计算方差的公式为:

>>> a=np.array([1,2,7])
>>> a
array([1, 2, 7])
>>> a.var()
6.8888888888888884
>>> 

这里计算的方差不是如方差公式s<script id="MathJax-Element-286" type="math/tex">s</script>那样除以N-1,在numpy里是上述的var。

4. 在matlab中的使用

4.1 matlab 统计基本函数 var方差
参考:(http://blog.csdn.net/tong_huijiao/article/details/54018019)

函数名称: var
函数功能:求解方差
函数用法:

  • var(X) 【与var(X,0)相同 】
  • var(X,W)
  • var(X,W,dim)

注:var(X,W)

  • W可以取0或1:取0求样本方差的无偏估计值(除以N-1),对应取1求得的是方差(除以N)
  • W也可以是向量,但必须与X中的第一个维度数相同,即length(W)= size(X,1)

var(X ,0 ,dim) :除以N-1 ;dim =1 对每列操作 dim = 2 对每行操作
var(X ,1 ,dim) : 除以N ;dim =1 对每列操作 dim = 2 对每行操作
var(X,W,dim) : 关于W取向量时,把W看做X中观察值发生的次数(或者说概率也行)

1.对于X是向量时:把向量中每个元素看做一个样本
var(X) 或者 var(x,0)函数输出这个向量中元素的样本方差的无偏估计值,var(x,1)输出的是样本方差 。

2. 对于X是矩阵时
把每行看做一个观察值,每列看做一个变量,函数输出一个行向量,每个元素计算的是该列的方差

3. 对于var(X ,0 ,dim) 或者 var(X ,1 ,dim)
前面已说 0 对应 除以N-1; 1对应除以N
dim 指维度信息,默认为1,dim =1 就指对每列操作; dim =2 就指对每行操作。

4 . 对于 var(X,W)、var(X,W,dim) 中W为向量的情况:
把W看做X中对应观察值发生的次数(或者说概率也行)处理

4.2 MATLAB中cov函数的用法
参考:(http://blog.sina.com.cn/s/blog_9e67285801010twv.html)
函数名称:cov
函数功能:求协方差矩阵
函数用法:

  • cov(X) :cov(X,0) = cov(X)
  • cov(X,Y) :X,Y必须是各维数都相同的矩阵
  • cov(X,1) :除以N而不是N-1
  • cov(X,Y,1) : 除以N而不是N-1

1.如果X是向量
cov(X)输出的是这个向量的方差

2. X是一个矩阵来
matlab把每行看做一个观察值,把每列当做一个变量.也就是说对于一个4*3的矩阵求协方差矩阵,matlab会认为存在三个变量,即会求出一个3*3的协方差矩阵。其中,对角线元素为对应变量的方差无偏估计值,其他位置为对应变量间的协方差无偏估计值(即除的是N-1)

3.对于cov(X,Y)
X、Y必须是各维数都相等的矩阵,其功能是把X中所有元素看做一个变量的样本,Y中所有元素看做另外一个变量的样本,把矩阵中每个对应位置看做一个联合观察值,函数实现的是求出两个变量的协方差矩阵。

4. cov(X,1) 和 cov(X,Y,1)
与之前的求解过程一致。不同的是,其求出的是协方差,而不是样本的协方差无偏估计值,即其除以的是N 而不是N-1。

先到这里。。。

numpy.cov()和numpy.var()的用法相关推荐

  1. python代码示例-Python numpy.cov()用法及代码示例

    协方差提供了两个变量或更多组变量之间的相关强度的度量.协方差矩阵元素Cij是xi和xj的协方差.元素Cii是xi的方差. 如果COV(xi,xj)= 0,则变量不相关 如果COV(xi,xj)> ...

  2. numpy.cov() 计算协方差矩阵

    在PCA中会用到,记录一下 numpy.cov()的作用是计算协方差矩阵,下面给出几个例子 [python] view plaincopy >>> x = np.array([[0, ...

  3. python中mean的用法_python 的numpy库中的mean()函数用法介绍

    1. mean() 函数定义: numpy.mean(a, axis=None, dtype=None, out=None, keepdims=)[source] Compute the arithm ...

  4. python 的numpy库中的mean()函数用法介绍

    这篇文章主要介绍了python 的numpy库中的mean()函数用法介绍,具有很好对参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 mean() 函数定义: 2 mean()函数功能: 求取均 ...

  5. Numpy cov() 函数的理解

    该函数用来求协方差矩阵 numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None) 第 ...

  6. python average函数怎么用_python 的numpy库中的mean()函数用法介绍

    1. mean() 函数定义: numpy.mean(a, axis=None, dtype=None, out=None, keepdims=)[source] Compute the arithm ...

  7. numpy中argmax、argmin的用法

    numpy中argmax.argmin的用法 1.argmax,argmin的作用 argmax: 返回每行或每列的最大值所在下标索引 argmin: 返回每行或每列的最下值所在下标索引 参数 axi ...

  8. python numpy.r_ 与 numpy.c_的用法

    参考文章: numpy.r_ 与 numpy.c_ import numpy as npa = np.array([1, 2, 3]) #3行1列b = np.array([4, 5, 6]) #3行 ...

  9. [转载] numpy.dot numpy.linalg.eig numpy.linalg.svd np.linalg.inv 用法 + 例子

    参考链接: Python中的numpy.dot numpy.dot() x是mn 矩阵 ,y是nm矩阵 则x.dot(y) 得到m*m矩阵 >>> np.dot(3, 4) 12 & ...

最新文章

  1. 如何提高模型性能?这四大方法值得尝试 | CSDN 博文精选
  2. oracle表空间dbf文件,Oracle 11g表空间dbf文件迁移
  3. JS一起学04:函数返回值、定时器、随机数、自动播放的幻灯片
  4. 一文搞懂一致性hash的原理和实现
  5. 【Android Studio安装部署系列】目录
  6. 前端学习(535):多列布局2
  7. 工业大数据全景解读和应用案例
  8. elasticsearch中集群选举中的ping源码解析
  9. 06-在IDEA中实战Git
  10. jsp文件创建后自动设置其pageEncoding的属性值为UTF-8
  11. 语言随机效应模型_R语言LME4混合效应模型研究教师的受欢迎程度
  12. Caffe学习:Solver
  13. 数据库笔试题 (3)
  14. 使用Git进行Vivado版本控制
  15. 阿里巴巴中台战略--共享服务体系
  16. 仙剑永恒的经典──仙剑诗集
  17. 淘宝详情页设计要点有哪些 优秀淘宝详情页面多少屏合适
  18. python concat_python数据拼接: pd.concat
  19. 面向对象程序设计实验——编写Rational类
  20. Composer 源切换/composer 镜像网

热门文章

  1. VTK:几何对象之PolyLine
  2. OpenCV使用cv :: CascadeClassifier类检测视频流中的对象的实例(附完整代码)
  3. Qt CMake变量参考
  4. 通过QML定义对象类型
  5. C语言二叉树总和等于k的所有路径的算法(附完整源码)
  6. C语言实现随机快速排序random quick sort算法(附完整源码)
  7. C语言实现阿姆斯特朗数armstrong number算法(附完整源码)
  8. QT的QSslPreSharedKeyAuthenticator类的使用
  9. 1.18.2.Table APISQL(概念与通用API、两种计划器(Planner)的主要区别、创建 TableEnvironment、临时表、永久表、创建表、虚拟表、Connector 等)
  10. Hive集成Tez引擎跑任务出现的问题(Java heap space问题)