精华内容
下载资源
问答
  • matlab 计算协方差矩阵

    千次阅读 2019-03-19 19:14:30
    但是在有些用到协方差的算法中, 分母使用了N,而不是N-1。但是由于样本很多,差别不大。 >> v=magic(3) v = 8 1 6 3 5 7 4 9 2 >> cov(v) ans = 7 -8 1 -8 16 -8 ...

    但是在有些用到协方差的算法中, 分母使用了N,而不是N-1。但是由于样本很多,差别不大。

    >> v=magic(3)

    v =

         8     1     6
         3     5     7
         4     9     2

    >> cov(v)

    ans =

         7    -8     1
        -8    16    -8
         1    -8     7

    >> v = magic(5)

    v =

        17    24     1     8    15
        23     5     7    14    16
         4     6    13    20    22
        10    12    19    21     3
        11    18    25     2     9

    >> cov(v)

    ans =

      52.500   5.000 -37.500 -18.750  -1.250
       5.000  65.000  -7.500 -43.750 -18.750
     -37.500  -7.500  90.000  -7.500 -37.500
     -18.750 -43.750  -7.500  65.000   5.000
      -1.250 -18.750 -37.500   5.000  52.500

    >> v = magic(5);
    >> v=v(:,1:3)

    v =

        17    24     1
        23     5     7
         4     6    13
        10    12    19
        11    18    25

    >> cov(v)

    ans =

      52.500000000000000   5.000000000000000 -37.500000000000000
       5.000000000000000  65.000000000000000  -7.500000000000000
     -37.500000000000000  -7.500000000000000  90.000000000000000

    >> 

    展开全文
  • 均值、方差和标准差计算公式 均值: X‾=∑i=1n(xi−x‾)n\overline X= \frac {\sum_{i=1}^n(x_i - \overline x)}{n}X=n∑i=1n​(xi​−x)​ 方差: s2=∑i=1n(xi−x‾)2ns^2 = {\frac {\sum_{i=1}^n (x_i - \...
     
    

    均值、方差和标准差计算公式

    均值
    X=i=1n(xix)n\overline X= \frac {\sum_{i=1}^n(x_i - \overline x)}{n}

    方差
    s2=i=1n(xix)2ns^2 = {\frac {\sum_{i=1}^n (x_i - \overline x)^2 } {n}}

    标准差
    s=i=1n(xix)2ns = \sqrt{ {\frac {\sum_{i=1}^n (x_i - \overline x)^2 } {n}} }

    方差是衡量随机变量或一组数据时离散程度的度量。方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。(摘自百度百科)

    补充:有方差来描述变量与均值的偏离程度,那又搞出来个标准差干什么呢?
    方差与要处理的数据的量纲是不一致的,虽然能很好的描述数据与均值的偏离程度,但是处理结果是不符合我们的直观思维的。
    举个例子:一个班级里有60个学生,平均成绩是70分,标准差是9,方差是81,成绩服从正态分布,那么我们通过方差不能直观的确定班级学生与均值到底偏离了多少分,通过标准差我们就很直观的得到学生成绩分布在[61,79]范围的概率为0.6826,即约等于下图中的34.2%*2
    在这里插入图片描述
    总的来说,均方差是数据序列与均值的关系,而均方误差是数据序列与真实值之间的关系。
    参考


    协方差矩阵

    标准差和方差一般是用来描述一维数据的,但现实生活我们常常遇到含有多维数据的数据集。比如统计多个学科的考试成绩。面对这样的数据集,我们当然可以按照每一维独立的计算其方差,但是通常我们还想了解这几科成绩之间的关系,这时,我们就要用协方差,协方差就是一种用来度量两个随机变量关系的统计量,其定义为:
    cov(X,Y)=i=1n(Xix)(YiY)n1cov(X,Y)=\frac {\sum_{i=1}^n(X_i-\overline x)(Y_i-\overline Y)} {n-1}

    【协方差是衡量两个变量同时变化的变化程度。协方差大于0表示 xxyy 若一个增,另一个也增;小于0表示一个增,一个减。如果 xxyy 是统计独立的,那么二者之间的协方差就是0。但是协方差是0,并不能说明 xxyy 是独立的。协方差绝对值越大,两者对彼此的影响越大,反之越小。协方差是没有单位的量。】

    从协方差的定义上,也可以看出一些显而易见的性质,如:
    (1)cov(X,X)=var(X)X(1)cov(X,X)=var(X) —表示X的方差
    (2)cov(X,Y)=cov(Y,X)(2)cov(X,Y)=cov(Y,X)

    需要注意的是,协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差。从而引入协方差矩阵,其定义为:
    Cnn=ci,j,ci,j=cov(Dimi,Dimj)C_{n * n} = (c_{i,j},c_{i,j}=cov(Dim_i,Dim_j))

    举例:假设数据集 x,y,z{x,y,z}三个维度,则协方差矩阵为:
    在这里插入图片描述
    可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度上的方差。

    个人遇到的困惑:在使用Maltab的cov、eig和pca等各函数时,传入的参数究竟是列表示维度还是行表示维度

    首先必须明确的一点是:协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的
    其次:样本矩阵的每行是一个样本,每列为一个维度


    上代码说明:
    (1)用Matlab自带的数据

    load('hald','ingredients')
    ingredients = ingredients';
    

    在这里插入图片描述
    此时,ingredients表示4个样本,每个样本的所包含的维度是13维。(即13列)

    (2)去均值
    在方差、标准差和协方差的计算公式中都可发现,每一维的数据 xix_i 需要减去该维度的均值 x\overline x
    因此,首先将每一维数据的减去均值以后,代入方差、标准差和协方差计算公式时,只需要对每个数据直接求平方和即可。

    meanValue = mean(ingredients);   % 计算每一维度的均值
    meanValueMatrix = repmat(meanValue,size(ingredients,1),1);
    ingredients = ingredients - meanValueMatrix; % 每个数据减去对应维度的均值
    

    去均值后的ingredients
    (3)计算协方差矩阵
    【这儿我并没有根据协方差的公式去计算,即第一列维度与其它各列维度的相乘求和以后在除以样本数。采用了另外一个计算方式:1n1XTX\frac{1}{n-1}X^TX

    这儿还有一个小坑:
    假设 XXmnm*n 的矩阵,
    有的文章对协方差的计算写为: =1n1XXT协方差矩阵=\frac{1}{n-1}XX^T
    而有的文章写为:=1n1XTX协方差矩阵=\frac{1}{n-1}X^TX

    其实上述两者都没有错。只是在第一种计算里面,XX 的每一列是一个样本,而行数表示的是维度(n=样本个数,m=维度)
    在第二种计算里面,XX 的每一行是一个样本,而列数表示的是维度(m=样本个数,n=维度)

    协方差计算:

    % 协方差矩阵.其中n=size(ingredients,1),n是样本个数
    covMatrix = ingredients' * ingredients / (size(ingredients,1) - 1); 
    

    在这里插入图片描述

    (4)使用cov函数验证
    需要注意的是:matlab计算协方差的函数cov,是按列表示维度,减去每列均值然后计算协方差矩阵的。

    load('hald','ingredients')
    ingredients = ingredients';
    test = cov(ingredients)
    

    在这里插入图片描述
    在这里插入图片描述


    Matlab的pca函数

    仍然使用上面的例子。求出协方差矩阵以后,即可得到协方差矩阵的特征值和特征向量。当特征值按照从大到小排列,取前面k个特征值所对应的特征向量所形成的矩阵,即可对原数据降维。(pca)

    (1)求协方差矩阵的特征值和特征向量

    % D是对角矩阵,其对角上的值是特征值。V的每一列对应D上的每一个特征值。如下图箭头
    [V,D] = eig(covMatrix);
    

    在这里插入图片描述

    (2)pca函数对原数据降维

    load('hald','ingredients')
    ingredients = ingredients';
    % coeff是特征向量组成的矩阵,score是降维后的新数据,latent是特征值
    [coeff,score,latent] = pca(ingredients);  
    

    特征值和特征向量:
    在这里插入图片描述
    latent与D相比发现,latent是特征值按照从大到小排序,而在D中,特征值是按照从小到大排序。
    特征向量一样。

    展开全文
  • matlab是标准的,numpy相当于转置后计算>> x = [2,0,-1.4;2.2,0.2,-1.5;2.4,0.1,-1;1.9,0,-1.2]x =2.0000 0 -1.40002.2000 0.2000 -1.50002.4000 0.1000 -1.00001.9000 0 -1.2000&...

    matlab是标准的,numpy相当于转置后计算

    >> x = [2,0,-1.4;2.2,0.2,-1.5;2.4,0.1,-1;1.9,0,-1.2]

    x =

    2.0000    0            -1.4000

    2.2000    0.2000    -1.5000

    2.4000    0.1000    -1.0000

    1.9000    0            -1.2000

    >> cov(x)

    ans =

    0.0492        0.0142      0.0192

    0.0142        0.0092      -0.0058

    0.0192        -0.0058     0.0492

    >> xt=x'

    xt =

    2.0000     2.2000         2.4000       1.9000

    0             0.2000         0.1000       0

    -1.4000    -1.5000        -1.0000     -1.2000

    >> cov(xt)

    ans =

    2.9200   3.1600   2.9500   2.6700

    3.1600   3.4300   3.1750   2.8850

    2.9500   3.1750   3.0100   2.7050

    2.6700   2.8850   2.7050    2.4433

    np.array(x).T

    array([[ 2. , 2.2, 2.4, 1.9],

    [ 0. , 0.2, 0.1, 0. ],

    [-1.4, -1.5, -1. , -1.2]])

    >>> print(np.cov(np.array(x).T))

    [[ 0.04916667 0.01416667 0.01916667]

    [ 0.01416667 0.00916667 -0.00583333]

    [ 0.01916667 -0.00583333 0.04916667]]

    np.array(x)

    array([[ 2. , 0. , -1.4],

    [ 2.2, 0.2, -1.5],

    [ 2.4, 0.1, -1. ],

    [ 1.9, 0. , -1.2]])

    >>> print(np.cov(np.array(x)))

    [[ 2.92 3.16 2.95 2.67 ]

    [ 3.16 3.43 3.175 2.885 ]

    [ 2.95 3.175 3.01 2.705 ]

    [ 2.67 2.885 2.705 2.44333333]]

    展开全文
  • matlab是标准的,numpy相当于转置后计算 >> x = [2,0,-1.4;2.2,0.2,-1.5;2.4,0.1,-1;1.9,0,-1.2] x = 2.0000 0 -1.4000 2.2000 0.2000 -1.5000 2.4000 0.1000 -1.0000 1.9000 0 ...

    matlab是标准的,numpy相当于转置后计算

    >> x = [2,0,-1.4;2.2,0.2,-1.5;2.4,0.1,-1;1.9,0,-1.2]

    x =

    2.0000    0            -1.4000
    2.2000    0.2000    -1.5000
    2.4000    0.1000    -1.0000
    1.9000    0            -1.2000

    >> cov(x)

    ans =

    0.0492        0.0142      0.0192
    0.0142        0.0092      -0.0058
    0.0192        -0.0058     0.0492

     

    >> xt=x'

    xt =

    2.0000     2.2000         2.4000       1.9000
    0             0.2000         0.1000       0
    -1.4000    -1.5000        -1.0000     -1.2000

    >> cov(xt)

    ans =

    2.9200   3.1600   2.9500   2.6700
    3.1600   3.4300   3.1750   2.8850
    2.9500   3.1750   3.0100   2.7050
    2.6700   2.8850   2.7050    2.4433

     

    np.array(x).T
    array([[ 2. , 2.2, 2.4, 1.9],
             [ 0. , 0.2, 0.1, 0. ],
             [-1.4, -1.5, -1. , -1.2]])

    >>> print(np.cov(np.array(x).T))
    [[ 0.04916667 0.01416667 0.01916667]
    [ 0.01416667 0.00916667 -0.00583333]
    [ 0.01916667 -0.00583333 0.04916667]]

     

    np.array(x)
    array([[ 2. , 0. , -1.4],
              [ 2.2, 0.2, -1.5],
              [ 2.4, 0.1, -1. ],
              [ 1.9, 0. , -1.2]])

    >>> print(np.cov(np.array(x)))
    [[ 2.92 3.16 2.95 2.67 ]
    [ 3.16 3.43 3.175 2.885 ]
    [ 2.95 3.175 3.01 2.705 ]
    [ 2.67 2.885 2.705 2.44333333]]

    转载于:https://www.cnblogs.com/qqhfeng/p/5294118.html

    展开全文
  • 本文全部参考自:http://www.cnblogs.com/welen/articles/5535042.html#undefined知识点一:MATLAB中四个取整函数具体使用方法如下:Matlab取整函数有: fix, floor, ceil, round.fix朝零方向取整,如fix(-1.3)=-1;...
  • 运行版本:1.MatlabR2015b windows64Bit2.https://octave-online.net/3.http://www.compileonline.com/execute_matlab_online.php代码:%自编协方差矩阵计算法结果一致,但与matlab自带的cov函数不一致% Rxx.mclose ...
  • Matlab-计算协方差矩阵函数

    千次阅读 2018-09-07 15:02:32
    一、源码 function [ COVMAT ] = covarianceMatrix( ...% 这是一个计算协方差矩阵的函数 % inputData 输入数据 % 每一行为一个维度 % 每一列为一个样本 %获得输入数据维度 [m,n] = size(inputData); %创建协...
  • Matlab-计算协方差

    千次阅读 2015-08-02 09:29:02
    始终谨记,计算协方差计算的是不同维度之间的协方差,每一列为一个维度。 代码如下: %matlab 计算 MySample =[ 40 7 32 45 48 1 6 47 42 45 24 46 31 40 33 4 7 ...
  • 这里只针对协方差矩阵的计算做说明,并与numpy和MATLAB中的协方差矩阵计算做对比。关于协方差矩阵的定义这里不再赘述。 混淆点 关于矩阵中数据是按照列排列和按照行排列的出来的协方差矩阵是不同的。 如果数据...
  • end end c = 10.3333 -4.1667 3.0000 -4.1667 2.3333 -1.5000 3.0000 -1.5000 1.0000 c为求得的协方差矩阵,在matlab以矩阵a的每一列为变量,对应的每一行为样本。这样在矩阵a中就有3个列变量分别为a(:,1), a(:,2),...
  • end end c = 10.3333 -4.1667 3.0000 -4.1667 2.3333 -1.5000 3.0000 -1.5000 1.0000 c为求得的协方差矩阵,在matlab以矩阵a的每一列为变量,对应的每一行为样本。这样在矩阵a中就有3个列变量分别为a(:,1), a(:,2),...
  • 计算的主要代码是: xc = x - sum(x,1)./m; % Remove mean c = (xc' * xc) ./ denom; denom为m-1(m>1)或m(m = 1)。非常有意思的是: a.先移除均值&移除均值的方式; b.denorm 是用来normlize.参考之前的...
  • end end c = 10.3333 -4.1667 3.0000 -4.1667 2.3333 -1.5000 3.0000 -1.5000 1.0000 c为求得的协方差矩阵,在matlab以矩阵a的每一列为变量,对应的每一行为样本。这样在矩阵a中就有3个列变量分别为a(:,1), a(:,2),...
  • matlab求协方差矩阵>> A=[0,0,0;2,0,2;]A =0 0 02 0 2>> v = diag(cov(A))'v =2 0 2...MATLAB怎么计算协方差>> x=rand(1,5);>> y=2*rand(1,5);>> cov(x,y) %计算协方差ans =0.1079 ...
  • 今天看论文的时候又看到了协方差矩阵这个破东西,以前看模式分类的时候就特困扰,没想到现在还是搞不清楚,索性开始查协方差矩阵的资料,恶补之后决定马上记录下来,嘿嘿~本文我将用自认为循序渐进的方式谈谈协方差...
  • 本代码主要利用MATLAB工具实现MATLAB——cov和corrcoef计算协方差和相关系数,简单明了,易于理解
  •  Matlab协方差矩阵的计算原理
  • 目前还弄不清是什么原因,有多大影响,只知道存在这个问题。 运行版本: 1.MatlabR2015b windows64Bit ... 3....%自编协方差矩阵计算法结果一致,但与matlab自带的cov函数不一致 % ...
  • matlab的方差的定义,使用的是样本方差,最后要除以n-1,而不是n 协方差的定义,也是用的样本,要除以n-1 概率的课本上的方差定义用的是总体方差,最后要除以n。 协方差也是总体的,要除以n 如果要换成计算总体方差...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 211
精华内容 84
关键字:

matlab计算协方差

matlab 订阅