Eigen 求协方差矩阵

方差和协方差

  • 方差:

    方差是在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。在许多实际问题中,研究方差即偏离程度有着重要意义。-----百度词条

    方差是衡量源数据和期望值相差的度量值。

​ 公式:

​ s2=∑i=1n(Xi−X‾)2n−1s^2=\frac{\sum_{i=1}^{n}(X_i-\overline{X})^2}{n-1}s2=n−1∑i=1n​(Xi​−X)2​

​ 其中:

​ X‾=∑i=1nXin\overline{X}=\frac{\sum_{i=1}^nX_i}{n}X=n∑i=1n​Xi​​

  • 协方差

    可以看到方差是表示数据整体和期望也就是均值的偏差程度,方差越大表示数据越参差不齐,或者说波动越大,在控制中可以表述为噪声或干扰越大,其可信度越低。

    方差只能表示数组自身的信息也就是一个随机变量的信息,如果需要知道两个随机变量之间的关系需要用协方差

    协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。—百度词条

​ 通俗讲协方差表示两个随机变量的关联度和关联方向 ,即变化趋势是相同还是相反或者不相关

​ 公式:

​ Cov(X,Y)=∑i=1n(Xi−X‾)(Yi−Y‾)n−1Cov(X,Y)=\frac{\sum_{i=1}^{n}(X_i-\overline{X})(Y_i-\overline{Y})}{n-1}Cov(X,Y)=n−1∑i=1n​(Xi​−X)(Yi​−Y)​

协方差矩阵

​ 但是协方差只能用来表述一维数据,或者说包含变量包含一个维度的数据,实际现实中往往有多维变量需要处理,每维度都需要计算,这时就需要计算多个协方差,为了便于计算和管理,用协方差组成的矩阵来表示,即协方差矩阵。

样本组成矩阵,其中的数据按行排列与按列排列求出的协方差矩阵是不同的,这里默认数据是按行排列(我各人喜欢按列排列即用列向量表示一个样本)。每一列是一个样本或观测结果,那么每一行就是一个随机变量。

​ Xm×n=[a11a12⋯a1na21a22⋯a2n⋮⋮⋱⋮am1am2⋯amn]=[c1c2⋯cm]TX_{m\times n}=\begin{bmatrix}a_{11}\hspace{0.5cm}a_{12}\hspace{0.5cm}\cdots\hspace{0.5cm}a_{1n}\\a_{21}\hspace{0.5cm}a_{22}\hspace{0.5cm}\cdots\hspace{0.5cm}a_{2n}\\\vdots\hspace{0.5cm}\vdots\hspace{0.5cm}\ddots\hspace{0.5cm}\vdots\\a_{m1}\hspace{0.5cm}a_{m2}\hspace{0.5cm}\cdots\hspace{0.5cm}a_{mn} \end{bmatrix}=[c_1\hspace{0.5cm}c_2\hspace{0.5cm}\cdots\hspace{0.5cm}c_m]^{T}Xm×n​=⎣⎢⎢⎢⎡​a11​a12​⋯a1n​a21​a22​⋯a2n​⋮⋮⋱⋮am1​am2​⋯amn​​⎦⎥⎥⎥⎤​=[c1​c2​⋯cm​]T

​ 有n个数据,每个数据有m个随机变量(维度),那么协方差矩阵为:

​ ∑=1n−1(cov(c1,c1)cov(c1,c2)⋯cov(c1,cm)cov(c2,c1)cov(c2,c2)⋯cov(c2,cm)⋮⋮⋱⋮cov(cm,c1)cov(cm,c2)⋯cov(cm,cm))\sum=\frac{1}{n-1}\left(\begin{matrix}cov(c_1,c_1) &cov(c_1,c_2)&\cdots&cov(c_1,c_m)\\cov(c_2,c_1)&cov(c_2,c_2)&\cdots&cov(c_2,c_m)\\\vdots&\vdots&\ddots&\vdots\\cov(c_m,c_1)&cov(c_m,c_2)&\cdots&cov(c_m,c_m)\end{matrix} \right)∑=n−11​⎝⎜⎜⎜⎛​cov(c1​,c1​)cov(c2​,c1​)⋮cov(cm​,c1​)​cov(c1​,c2​)cov(c2​,c2​)⋮cov(cm​,c2​)​⋯⋯⋱⋯​cov(c1​,cm​)cov(c2​,cm​)⋮cov(cm​,cm​)​⎠⎟⎟⎟⎞​

​ 例如slam中的定位使用卡尔曼滤波(现在基本不用了,目前流行使用非线性优化和图优化算法,但是思想是值得学习的)机器人状态由位置和速度来表示XT=[p,v]T=[x,y,z,vx,vy,vz]TX^T=[p,v]^{T}=[x,y,z,v_x,v_y,v_z]^{T}XT=[p,v]T=[x,y,z,vx​,vy​,vz​]T ,如果他们各自都有三个维度。卡尔曼滤波中的一重要的参数就是Pk−P_k^-Pk−​ ,表示位置和速度的先验协方差。每个变量有三维度,合成的向量XTX^TXT有6个维度,所以协方差矩阵是一个6×66\times66×6的矩阵

​ 可以表示为:Pk−=[∑pp∑pv∑pv∑vv]P_k^-=\begin{bmatrix}\sum{pp} & \sum{pv}\\\sum{pv} & \sum{vv}\end{bmatrix}Pk−​=[∑pp∑pv​∑pv∑vv​]

协方差矩阵的计算

​ 如果按照定义把每个协方差都计算出来然后组成矩阵太过麻烦了,好在利用矩阵计算可以大大简化。

  • 把样本组成矩阵(假设有n个数据,每个数据有m个维度,XiX_iXi​表示随机变量)

    可以每行一个样本也可以每列一个样本

    • 按列 Xm×n=[a11a12⋯a1na21a22⋯a2n⋮⋮⋱⋮am1am2⋯amn]m×n=[X1X2⋯Xm]TX_{m\times n}=\begin{bmatrix} {a_{11}}\hspace{0.5cm}a_{12}\hspace{0.5cm}\cdots\hspace{0.5cm}a_{1n}\\a_{21}\hspace{0.5cm}a_{22}\hspace{0.5cm}\cdots\hspace{0.5cm}a_{2n}\\\vdots\hspace{0.5cm}\vdots\hspace{0.5cm}\ddots\hspace{0.5cm}\vdots\\a_{m1}\hspace{0.5cm}a_{m2}\hspace{0.5cm}\cdots\hspace{0.5cm}a_{mn}\end{bmatrix}_{m\times n}=[X_1\space X_2\space\cdots\space X_m]^TXm×n​=⎣⎢⎢⎢⎡​a11​a12​⋯a1n​a21​a22​⋯a2n​⋮⋮⋱⋮am1​am2​⋯amn​​⎦⎥⎥⎥⎤​m×n​=[X1​ X2​ ⋯ Xm​]T
    • 按行 Xn×m=[a11a12⋯a1ma21a22⋯a2m⋮⋮⋱⋮an1an2⋯anm]n×m=[X1X2⋯Xm]X_{n\times m}=\begin{bmatrix}a_{11}\hspace{0.5cm}a_{12}\hspace{0.5cm}\cdots\hspace{0.5cm}a_{1m}\\a_{21}\hspace{0.5cm}a_{22}\hspace{0.5cm}\cdots\hspace{0.5cm}a_{2m}\\\vdots\hspace{0.5cm}\vdots\hspace{0.5cm}\ddots\hspace{0.5cm}\vdots\\a_{n1}\hspace{0.5cm}a_{n2}\hspace{0.5cm}\cdots\hspace{0.5cm}a_{nm}\end{bmatrix}_{n\times m}=[X_1\space X_2\space\cdots\space X_m]Xn×m​=⎣⎢⎢⎢⎡​a11​a12​⋯a1m​a21​a22​⋯a2m​⋮⋮⋱⋮an1​an2​⋯anm​​⎦⎥⎥⎥⎤​n×m​=[X1​ X2​ ⋯ Xm​]
  • 计算每个维度的均值

    • 按列 Mean=[M1M2⋯Mm]TMean=[M_1\hspace{0.5cm}M_2\hspace{0.5cm}\cdots\hspace{0.5cm}M_m]^TMean=[M1​M2​⋯Mm​]T

    • 按行 Mean=[M1M2⋯Mm]Mean=[M_1\hspace{0.5cm}M_2\hspace{0.5cm}\cdots\hspace{0.5cm}M_m]Mean=[M1​M2​⋯Mm​]

  • 每个样本减区各个维度的均值,即求(Xi−X‾)(X_i-\overline X )(Xi​−X)

    • 按列temp=[a11−M1a12−M1⋯a1n−M1a21−M2a22−M2⋯a2n−M2⋮⋮⋱⋮am1−Mmam2−Mm⋯amn−Mm]m×ntemp=\begin{bmatrix}a_{11}-M_1\hspace{0.5cm}a_{12}-M_1\hspace{0.5cm}\cdots\hspace{0.5cm}a_{1n}-M_1\\a_{21}-M_2\hspace{0.5cm}a_{22}-M_2\hspace{0.5cm}\cdots\hspace{0.5cm}a_{2n}-M_2\\\vdots\hspace{0.5cm}\vdots\hspace{0.5cm}\ddots\hspace{0.5cm}\vdots\\a_{m1}-M_m\hspace{0.5cm}a_{m2}-M_m\hspace{0.5cm}\cdots\hspace{0.5cm}a_{mn}-M_m\end{bmatrix}_{m\times n}temp=⎣⎢⎢⎢⎡​a11​−M1​a12​−M1​⋯a1n​−M1​a21​−M2​a22​−M2​⋯a2n​−M2​⋮⋮⋱⋮am1​−Mm​am2​−Mm​⋯amn​−Mm​​⎦⎥⎥⎥⎤​m×n​

    • 按行temp=[a11−M1a12−M2⋯a1m−Mma21−M1a22−M2⋯a2m−Mm⋮⋮⋱⋮an1−M1an2−M2⋯anm−Mm]n×mtemp=\begin{bmatrix}a_{11}-M_1\hspace{0.5cm}a_{12}-M_2\hspace{0.5cm}\cdots\hspace{0.5cm}a_{1m}-M_m\\a_{21}-M_1\hspace{0.5cm}a_{22}-M_2\hspace{0.5cm}\cdots\hspace{0.5cm}a_{2m}-M_m\\\vdots\hspace{0.5cm}\vdots\hspace{0.5cm}\ddots\hspace{0.5cm}\vdots\\a_{n1}-M_1\hspace{0.5cm}a_{n2}-M_2\hspace{0.5cm}\cdots\hspace{0.5cm}a_{nm}-M_m\end{bmatrix}_{n \times m}temp=⎣⎢⎢⎢⎡​a11​−M1​a12​−M2​⋯a1m​−Mm​a21​−M1​a22​−M2​⋯a2m​−Mm​⋮⋮⋱⋮an1​−M1​an2​−M2​⋯anm​−Mm​​⎦⎥⎥⎥⎤​n×m​

  • 求1n−1∑i,jm(Xi−X‾i)(Xj−X‾j)\frac{1}{n-1}\sum_{i,j}^{m}(X_i-\overline X_i)(X_j-\overline X_j)n−11​∑i,jm​(Xi​−Xi​)(Xj​−Xj​)两两随机变量求协方差,组成矩阵即协方差矩阵

    • 按列∑=1n−1temp∗tempT\sum=\frac{1}{n-1}temp*temp^T∑=n−11​temp∗tempT
    • 按行∑=1n−1tempT∗temp\sum=\frac{1}{n-1}temp^T*temp∑=n−11​tempT∗temp
  • 注意n不能为1

使用Eigen库计算

#include <iostream>
#include<Dense>
using namespace Eigen;
using namespace std;
int main()
{// //  (0.43,1.1,0,0.32,0.21,0)// (0.4,1.28,0,0.34,0.17,0)// (0.39,1.2,0,0.31,0.25,0)// (0.45,1.4,0,0.22,0.13,0)Eigen::MatrixXf mat_1(6, 4);//按列MatrixXf mat_2(4, 6);//按行MatrixXf cov_1 = MatrixXf::Zero(6,6);MatrixXf cov_2 = MatrixXf::Zero(6,6);mat_2<< 0.43, 1.1, 0, 0.32, 0.21, 0,0.4, 1.28, 0, 0.34, 0.17, 0,0.39, 1.2, 0, 0.31, 0.25, 0,0.45, 1.4, 0, 0.22, 0.13, 0;mat_1 = mat_2.transpose();//1 求各个维度均值MatrixXf mean_1 = mat_1.rowwise().mean();MatrixXf mean_2 = mat_2.colwise().mean();//2 每个样本减去均值for (size_t i = 0; i < mat_1.cols(); i++){cov_1.col(i) = mat_1.col(i) - mean_1;}for (size_t i = 0; i < mat_2.rows(); i++){cov_2.row(i) = mat_2.row(i) - mean_2;}//3 计算cov_1 = cov_1 * cov_1.transpose()/(cov_1.cols()-1);cov_2 = cov_2.transpose() * cov_2 / (cov_2.rows() - 1);cout << cov_1 << endl<<endl << cov_2;}
  • 运行结果

    可以看到是按行计算和按列计算一样的

Eigen 求协方差矩阵相关推荐

  1. python求协方差矩阵_协方差矩阵python实现

    当你有一个数据集,每一条数据都M种属性,然后你想知道M种属性对数据集的影响的时候.你需要用到协方差矩阵. 求协方差矩阵之前请一定要知道协方差矩阵是干嘛的,是表示属性之间关系的矩阵,协方差矩阵的规模只与 ...

  2. Eigen求特征值与特征向量

    这里列举三种方式求矩阵的特征值与特征向量 #include <stdio.h> #include <stdlib.h> #include<Eigen/Eigen>u ...

  3. python 计算协方差_python 线性代数:[12]求协方差矩阵

    这是今天用到的所有代码: >>> import numpy >>> s=[100,120,140] >>> t=[50,60,70] >&g ...

  4. python求协方差矩阵_用numpy计算协方差(covariance)

    numpy.cov函数计算协方差(covariance),不过函数返回的是一个对称矩阵.协方差的数学定义如下: 协方差(covariance) numpy.cov函数在输入1D数据的时候,等于是在计算 ...

  5. 线性代数基础知识:求矩阵的特征值、特征向量和协方差矩阵

    话不多说,我们直接拿具体的问题讲解. 问题: 手写稿,因为输入起来实在是太烦啦(实际是因为菜...字有点丑,不妨碍阅读哈) 求协方差矩阵matlab代码实现: % 计算矩阵的协方差矩阵% 加载数据 d ...

  6. OpenCV人脸识别Eigen算法源码分析

    1 理论基础 学习Eigen人脸识别算法需要了解一下它用到的几个理论基础,现总结如下: 1.1 协方差矩阵 首先需要了解一下公式: 共公式可以看出:均值描述的是样本集合的平均值,而标准差描述的则是样本 ...

  7. oracle方差和协方差函数,[转载]方差var、协方差cov、协方差矩阵(浅谈)(三)_函数cov...

    废话不多说,这节都是干货 我们继续讲第二个函数cov,需要区分的还是两个概念:协方差和样本协方差无偏估计值,此部分参考了博客相关内容http://blog.csdn.net/raocong2010/a ...

  8. 从特征分解到协方差矩阵:详细剖析和实现PCA算法

    从特征分解到协方差矩阵:详细剖析和实现PCA算法 本文先简要明了地介绍了特征向量和其与矩阵的关系,然后再以其为基础解释协方差矩阵和主成分分析法的基本概念,最后我们结合协方差矩阵和主成分分析法实现数据降 ...

  9. matlab 特征值不排序,matlap 代码求解释!从这里开始即可%对特征值进行排序并去掉...

    %人脸识别代码 clear all %    //removes all variables from the workspace. This frees up system memory. clos ...

最新文章

  1. Python开发环境配置
  2. 第1关:最长非降子序列(非连续)问题
  3. ssh跳板登陆太麻烦,使用expect每次自动登录 利用expect 模拟键盘动作,在闲置时间之内模拟地给个键盘响应...
  4. [每日电路图] 8、三轴加速度计LIS3DH电路图及功耗等指标
  5. 去除word文档中向下的箭头图标
  6. 阿里云系列——7.阿里云IIS系列详解(过程+通用+最新)
  7. zongzi tutorial
  8. angularjs-数据同步时机ng-model-options
  9. leetcode 592. Fraction Addition and Subtraction | 592. 分数加减运算(最大公因数gcd,最小公倍数lcm)
  10. 挑个很吉利的日子,开通我的博客!
  11. 介绍一个轻量级iOS安全框架:SSKeyChain
  12. 【学习笔记】java核心技术学习笔记整理
  13. js中prototype,constructor的理解
  14. HTML:canvas简述
  15. oracle 平均值 最大值,Oracle分析函数三——SUM,AVG,MIN,MAX,COUNT
  16. renpy 如何执行2个action_可执行的网络推广方案如何策划 8个维度 学会了策划方案不求人...
  17. 秒杀项目(2)集成redis
  18. 毕设设计要点整理(一)——角色相关
  19. 马哥教育SRE笔记【作业】week04
  20. 十三年来,淘宝走过的大数据之路

热门文章

  1. Webmin安装过程
  2. Lambda架构与Kappa架构对比
  3. 第26件事 精益创业的3个访谈
  4. Ubuntu深度学习环境配置一箩筐
  5. java中静态变量和成员变量的区别
  6. 百元左右平替苹果耳机有哪些?值得入手的蓝牙耳机推荐
  7. xShell运行Python脚本报错 Python script error 80040154
  8. Android沉浸式模式
  9. BeanCopier、BeanUtils 对象属性拷贝
  10. idea注释代码三种方式