python课程设计矩阵对角线之和_python-协方差矩阵对角线上的方差的定义

在网上查了好久,自己写一个吧。

课本上说协方差阵对角线上是各个变量的方差,然而在numpy中通过np.cov(X)得到的协方差矩阵,其对角线线上的值不是np.var()计算出来的值。根本原因在于,np.cov(X)是在数理统计背景下计算的,得到的方差是样本方差,而不是平常意义下的方差。

嗯,不准确的讲,均值、方差、协方差。在数理统计中,除了均值的计算方式不变之外,其余的两个都是除以

equation?tex=%28n-1%29 ,而不是

equation?tex=n 。这样就可以解释出现上面问题的原因了。

两个随机变量

equation?tex=X_1%2CX_2 ,现在有两个观测数据

equation?tex=%281%2C2%29%2C%283%2C4%29 。每个随机变量可以看作一个特征,因此有

equation?tex=X_1%3D%5B1%2C3%5D%2CX_2%3D%5B2%2C4%5D ,数据矩阵如下

equation?tex=%5Cbegin%7Bbmatrix%7D+1%262%5C%5C3%264+%5Cend%7Bbmatrix%7D%5C%5C

样本均值的定义及python实现

数学定义:

equation?tex=%5Cbar%7Bx%7D%3D%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bi%3D0%7D%5E%7Bn%7Dx_i ,

equation?tex=x_i%EF%BC%9Ai%3D1%2C2%2C...%2Cn 是随机变量

equation?tex=X

equation?tex=n 个观测值

python代码:用np.mean()函数来实现。

笔算结果:

equation?tex=%5B1%2C3%5D 的样本均值为

equation?tex=2

equation?tex=%5B2%2C4%5D 的样本均值为

equation?tex=3

python代码实现结果

#python代码

x1=np.array([1,3])

x2=np.array([2,4])

np.mean(x1)

#Out[62]: 2.0

np.mean(x2)

#Out[63]: 3.0

样本方差的定义及python实现

数学定义:

equation?tex=%5Cfrac%7B%5Csum_%7Bi%3D0%7D%5E%7Bn%7D%28x_i-%5Cbar%7Bx%7D%29%7D%7Bn-1%7D

equation?tex=%5Cbar%7Bx%7D 是样本均值。

equation?tex=x_i%EF%BC%9Ai%3D1%2C2%2C...%2Cn 是随机变量

equation?tex=X

equation?tex=n 个观测值。

python代码:用np.cov()函数来实现。

笔算结果:

equation?tex=%5B1%2C3%5D 的样本方差为

equation?tex=%5Cfrac%7B%281-2%29%5E2%2B%283-2%29%5E2%7D%7B2-1%7D%3D2

equation?tex=%5B2%2C4%5D 的样本方差为

equation?tex=%5Cfrac%7B%282-3%29%5E2%2B%284-3%29%5E2%7D%7B2-1%7D%3D2

python代码实现结果

np.cov(x1)

#Out[64]: array(2.)

#np.cov(x2)

Out[65]: array(2.)

方差的定义及python实现

数学定义:

equation?tex=%5Cfrac%7B%5Csum_%7Bi%3D0%7D%5E%7Bn%7D%28x_i-%5Cbar%7Bx%7D%29%7D%7Bn%7D

equation?tex=%5Cbar%7Bx%7D 是平均值。

equation?tex=x_i%EF%BC%9Ai%3D1%2C2%2C...%2Cn

equation?tex=n 个数。

python代码:用np.var()函数来实现。

笔算结果:

equation?tex=%5B1%2C3%5D 的方差为

equation?tex=%5Cfrac%7B%281-2%29%5E2%2B%283-2%29%5E2%7D%7B2%7D%3D1

equation?tex=%5B2%2C4%5D 的方差为

equation?tex=%5Cfrac%7B%282-3%29%5E2%2B%284-3%29%5E2%7D%7B2%7D%3D1

python代码实现结果

np.var(x1)

#Out[67]: 1.0

np.var(x2)

#Out[68]: 1.0

小结:其实给出一组数

equation?tex=a_1%2Ca_1%2C...%2Ca_n .在学习数理统计这门课之前,一直都是采用

equation?tex=E%3D%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bi%3D0%7D%5E%7Bn%7Da_i

equation?tex=Var%3D%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bi%3D0%7D%5E%7Bn%7D%28a_i-E%29 来计算平均值和方差的。我这里用的平均值可能会不太规范,反正我学数理统计之前都是这么理解的。

在接触到样本与总体的概念之后,才发现平均值有了另外一个定义,叫做样本均值,从其蕴含的统计学意义上来讲是不一样的,但是它们俩形式上一样,计算公式也一样,可以认为

equation?tex=E%3D%5Cbar%7Ba%7D .等号左边代表这组数

equation?tex=a_1%2Ca_1%2C...%2Ca_n .的平均值,等号右边代表

equation?tex=a_1%2Ca_1%2C...%2Ca_n .这

equation?tex=n 个样本观测点的样本均值。

从而在开发代码语言时也就不用开发两个函数了(个人理解,查了好久,都是用的np.mean()计算的均值,当然list也有自己的函数,不过结果都是一样,如果实在理解不了,就把numpy的这个函数阿看作为统计学上的样本均值开发的函数吧,把list的函数看作日常理解的那个平均值)。

之后由于无偏估计和有偏估计的概念,才有了样本方差这个定义的出现,大致原因是:采用日常理解的方差形式

equation?tex=%5Cfrac%7B1%7D%7Bn%7D%5Csum_%7Bi%3D0%7D%5E%7Bn%7D%28a_i-E%29 所定义样本方差是总体方差的有偏估计,不太好。但是人们发现如果把系数换为

equation?tex=%5Cfrac%7B1%7D%7Bn-1%7D ,这样定义的样本方差就是总体方差的无偏估计了。(但愿这样写不会被老师看见,非得被打死)。

之所以写这么多是为了铺垫协方差矩阵的问题。

equation?tex=np.cov%28%29 是用来计算样本各变量之间的协方差矩阵的。

这个函数必须输入一个参数,其余的都有默认值。嗯,用python还是得看源码啊。

np.cov(x)#x是一个向量是输出样本方差

a = np.array([[1, 2], [3, 4]])

#转置是因为函数把矩阵的行看作我们所熟悉的随机变量,也就是特征,把列看作观测得到的值

#会输出一个协方差矩阵

np.cov(a.T)

源码如下:

def cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None,

aweights=None):

"""

Estimate a covariance matrix, given data and weights.

Covariance indicates the level to which two variables vary together.

If we examine N-dimensional samples, :math:`X = [x_1, x_2, ... x_N]^T`,

then the covariance matrix element :math:`C_{ij}` is the covariance of

:math:`x_i` and :math:`x_j`. The element :math:`C_{ii}` is the variance

of :math:`x_i`.

See the notes for an outline of the algorithm.

Parameters

----------

m : array_like

A 1-D or 2-D array containing multiple variables and observations.

Each row of `m` represents a variable, and each column a single

observation of all those variables. Also see `rowvar` below.

样本数据的协方差矩阵是下面这个图

上面的矩阵每一个元素的定义如下

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值