在做幻觉脸时用PCA,好不容易搞明白了原理,却发现溜掉了为什么计算协方差矩阵前要去均值(其实很简单,不要笑我脑残哈),和同学讨论啊讨论啊,讨论结果只是证明了我们把曾经学过的概率之类的忘的不胜什么了,所有就问了一下Google,很幸运找到了一位很敬业的小伙写的文章,贴出来警示一下自己要有人家这种钻研的精神!

源地址:http://www.pinkyway.info/2010/08/31/covariance/

今天看论文的时候又看到了协方差矩阵这个破东西,以前看模式分类的时候就特困扰,没想到现在还是搞不清楚,索性开始查协方差矩阵的资料,恶补之后决定马上记录下来,嘿嘿~本文我将用自认为循序渐进的方式谈谈协方差矩阵。

统计学的基本概念

学过概率统计的孩子都知道,统计里最基本的概念就是样本的均值,方差,或者再加个标准差。首先我们给你一个含有n个样本的集合,依次给出这些概念的公式描述,这些高中学过数学的孩子都应该知道吧,一带而过。

均值:

标准差:

方差:

很显然,均值描述的是样本集合的中间点,它告诉我们的信息是很有限的,而标准差给我们描述的则是样本集合的各个样本点到均值的距离之平均。以这两个集合为例,[0,8,12,20]和[8,9,11,12],两个集合的均值都是10,但显然两个集合差别是很大的,计算两者的标准差,前者是8.3,后者是1.8,显然后者较为集中,故其标准差小一些,标准差描述的就是这种“散布度”。之所以除以n-1而不是除以n,是因为这样能使我们以较小的样本集更好的逼近总体的标准差,即统计上所谓的“无偏估计”。而方差则仅仅是标准差的平方。

为什么需要协方差?

上面几个统计量看似已经描述的差不多了,但我们应该注意到,标准差和方差一般是用来描述一维数据的,但现实生活我们常常遇到含有多维数据的数据集,最简单的大家上学时免不了要统计多个学科的考试成绩。面对这样的数据集,我们当然可以按照每一维独立的计算其方差,但是通常我们还想了解更多,比如,一个男孩子的猥琐程度跟他受女孩子欢迎程度是否存在一些联系啊,嘿嘿~协方差就是这样一种用来度量两个随机变量关系的统计量,我们可以仿照方差的定义:

来度量各个维度偏离其均值的程度,标准差可以这么来定义:

协方差的结果有什么意义呢?如果结果为正值,则说明两者是正相关的(从协方差可以引出“相关系数”的定义),也就是说一个人越猥琐就越受女孩子欢迎,嘿嘿,那必须的~结果为负值就说明负相关的,越猥琐女孩子越讨厌,可能吗?如果为0,也是就是统计上说的“相互独立”。

  • zcpzcp2013-03-12 12:54:36[回复] [删除] [举报]

    '如果为0,也是就是统计上说的“相互独立”。'
    这句话不对。。协方差为0只表明两变量线性系数为0,不能表明独立。

从协方差的定义上我们也可以看出一些显而易见的性质,如:

协方差多了就是协方差矩阵

上一节提到的猥琐和受欢迎的问题是典型二维问题,而协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差,比如n维的数据集就需要计算个协方差,那自然而然的我们会想到使用矩阵来组织这些数据。给出协方差矩阵的定义:

这个定义还是很容易理解的,我们可以举一个简单的三维的例子,假设数据集有三个维度,则协方差矩阵为

可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度上的方差。

Matlab协方差实战

上面涉及的内容都比较容易,协方差矩阵似乎也很简单,但实战起来就很容易让人迷茫了。必须要明确一点,协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。这个我将结合下面的例子说明,以下的演示将使用Matlab,为了说明计算原理,不直接调用Matlab的cov函数(蓝色部分为Matlab代码)。

首先,随机产生一个10*3维的整数矩阵作为样本集,10为样本的个数,3为样本的维数。
MySample = fix(rand(10,3)*50)

根据公式,计算协方差需要计算均值,那是按行计算均值还是按列呢,我一开始就老是困扰这个问题。前面我们也特别强调了,协方差矩阵是计算不同维度间的协方差,要时刻牢记这一点。样本矩阵的每行是一个样本,每列为一个维度,所以我们要按列计算均值。为了描述方便,我们先将三个维度的数据分别赋值:

dim1 = MySample(:,1);
dim2 = MySample(:,2);
dim3 = MySample(:,3);

计算dim1与dim2,dim1与dim3,dim2与dim3的协方差:

sum( (dim1-mean(dim1)) .* (dim2-mean(dim2)) ) / ( size(MySample,1)-1 ) % 得到  74.5333
sum( (dim1-mean(dim1)) .* (dim3-mean(dim3)) ) / ( size(MySample,1)-1 ) % 得到  -10.0889
sum( (dim2-mean(dim2)) .* (dim3-mean(dim3)) ) / ( size(MySample,1)-1 ) % 得到  -106.4000

搞清楚了这个后面就容易多了,协方差矩阵的对角线就是各个维度上的方差,下面我们依次计算:

std(dim1)^2 % 得到  108.3222
std(dim2)^2 % 得到   260.6222
std(dim3)^2 % 得到  94.1778

这样,我们就得到了计算协方差矩阵所需要的所有数据,调用Matlab自带的cov函数进行验证:

cov(MySample)

把我们计算的数据对号入座,是不是一摸一样?

Update:今天突然发现,原来协方差矩阵还可以这样计算,先让样本矩阵中心化,即每一维度减去该维度的均值,使每一维度上的均值为0,然后直接用新的到的样本矩阵乘上它的转置,然后除以(N-1)即可。其实这种方法也是由前面的公式通道而来,只不过理解起来不是很直观,但在抽象的公式推导时还是很常用的!同样给出Matlab代码实现:

X = MySample – repmat(mean(MySample),10,1);   % 中心化样本矩阵,使各维度均值为0
C = (X’*X)./(size(X,1)-1)

总结

理解协方差矩阵的关键就在于牢记它计算的是不同维度之间的协方差,而不是不同样本之间,拿到一个样本矩阵,我们最先要明确的就是一行是一个样本还是一个维度,心中明确这个整个计算过程就会顺流而下,这么一来就不会迷茫了~

P.S.写论文要选Latex,在wordpress里编辑公式还得用Latex,用Latex还真对得起咱学计算机这张脸~

关于协方差矩阵的概念及意义相关推荐

  1. 方差、协方差、协方差矩阵的概念及意义 的理解

    书到用时方恨少,不仅文科是这样,理科更是这样. 想想大学时候,我们学习数学的目的也就是为了考试,从来没有想过它们能解决什么实际问题.但是现在想想,我们真是错了.数学其实就是来自生活. 话题一转,如果是 ...

  2. 关于方差、协方差、协方差矩阵的概念及意义

    期望 离散型随机变量的一切可能的取值xi与对应的概率Pi(=xi)之积的和称为该离散型随机变量的数学期望(设级数绝对收敛),记为 E(x).随机变量最基本的数学特征之一.它反映随机变量平均取值的大小, ...

  3. 协方差矩阵的实例与意义

    协方差矩阵的实例与意义 在机器学习中经常需要计算协方差矩阵,本科时没学过这个概念,一直对此非常头疼.现在试图通过实例的计算.图形化的表示来梳理一下什么是协方差矩阵. A numerical examp ...

  4. 浅谈均值、方差、标准差、协方差的概念及意义

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

  5. C++中多态的概念和意义

    文章目录 1 C++中多态的概念和意义 1.1 函数重写回顾 1.2 多态的概念 1.3 多态的意义 1.4 静态联编和动态联编 2 特殊的虚函数 2.1 构造函数能成为虚函数吗 2.2 析构函数能成 ...

  6. 【软件开发底层知识修炼】二 深入浅出处理器之二 中断的概念与意义

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 上一篇文章我们学习了微处理器与微控制器的区别.点击链接查看上一篇文章 ...

  7. 【C++深度剖析教程27】多态的概念与意义

    今天来学习一个新的概念,多态!!!多态在C++编程中具有重要的地位与意义,是面向对象的一个重要思想! 加qq1126137994一起学习更多技术~ 1.问题引入 父类与子类之间具有赋值兼容性; *子类 ...

  8. 【C++深度剖析教程22】继承的概念和意义

    今天我们来学习C++中的继承的概念和意义. 一.类之间的组合关系 问题:类之间是否存在直接的关联关系? 回答:类之间存在组合的关系,整体与部分的关系. 可以看一下生活中的例子: 下面我们以一个简单的程 ...

  9. 从语义开始 – 概念、意义、实践

    从语义开始 – 概念.意义.实践 http://bbs.blueidea.com/thread-2944769-1-1.html 转载于:https://www.cnblogs.com/javashi ...

最新文章

  1. 基于AFNetworking3.0网络封装
  2. 【组合数学】生成函数 ( 正整数拆分 | 重复有序拆分 | 不重复有序拆分 | 重复有序拆分方案数证明 )
  3. JUC并发编程六 并发架构--偏向锁
  4. 第20月第4天 pycharm utf-8
  5. iphone 抹除设备是什么意思_SMT设备有哪些,SMT是什么意思?
  6. python编写代码_用 Python 编写干净、可测试、高质量的代码
  7. hibernate one2one 唯一外键关联(双向关联)
  8. Win10 UWP开发系列:开发一个自定义控件——带数字徽章的AppBarButton
  9. python 处理异常_Python异常处理– Python尝试除外
  10. HTML网页设计制作大作业(div+css)
  11. Class Not Found 的错误解决
  12. 鼠标经过时改变DIV背景颜色的三种途径
  13. mysql frm文件生成工具_如何使用mysqlfrm工具从.frm文件中恢复表结构
  14. tomcat启动后无法访问到8080页面的原因
  15. ERROR: Cannot uninstall ‘llvmlite‘. It is a distutils installed project and thus we cannot accuratel
  16. 爱情刚刚开始是最美好的
  17. 全国计算机等级考试(NCRE)
  18. 因为一首歌,想念一个人?
  19. GDB实用插件(peda, gef, gdbinit)全解
  20. 从驱动开发角度理解linux epoll调用链

热门文章

  1. Pelican + Github 搭建自己的静态博客
  2. 读懂Ensemble,Bagging,Boosting以及Stacking
  3. php读取文件行读,如何在php中按行读取文件
  4. “探究性学习”与“研究性学习”的区别
  5. 王义辉:浅谈网站用户深度访谈
  6. 第7-9节项目4-让吃货失望的菜单
  7. 百度直播这半年:内建中台,外投生态,瞄准知识和带货
  8. 81条恶搞脑筋急转弯
  9. Few-shot Learning 小白入门笔记
  10. 致远小场景方案之简道云推送表单数据到致远OA