协方差矩阵的计算_sbaban的博客-程序员信息网_计算协方差矩阵

技术标签: 协方差-PCA  科研  

一、统计学的基本概念

统计学里最基本的概念就是样本的均值、方差、标准差。首先,我们给定一个含有n个样本的集合,下面给出这些概念的公式描述:
这里写图片描述
均值描述的是样本集合的中间点,它告诉我们的信息是有限的,而标准差给我们描述的是样本集合的各个样本点到均值的距离之平均。

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

二、为什么需要协方差

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

这里写图片描述

来度量各个维度偏离其均值的程度,协方差可以这样来定义:

这里写图片描述

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

从协方差的定义上我们也可以看出一些显而易见的性质,如:
这里写图片描述

三、协方差矩阵

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

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

这里写图片描述

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

四、Matlab协方差实战

必须要明确一点,协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。以下的演示将使用Matlab,为了说明计算原理,不直接调用Matlab的cov函数:

首先,随机生成一个10*3维的整数矩阵作为样本集,10为样本的个数,3为样本的维数。

这里写图片描述

图 1 使用Matlab生成样本集

根据公式,计算协方差需要计算均值,前面特别强调了,协方差矩阵是计算不同维度之间的协方差,要时刻牢记这一点。样本矩阵的每行是一个样本,每列是一个维度,因此我们要按列计算均值。为了描述方便,我们先将三个维度的数据分别赋值:

这里写图片描述

图 2 将三个维度的数据分别赋值

计算dim1与dim2,dim1与dim3,dim2与dim3的协方差:
这里写图片描述
图 3 计算三个协方差

协方差矩阵的对角线上的元素就是各个维度的方差,下面我们依次计算这些方差:

这里写图片描述
图 4 计算对角线上的方差

这样,我们就得到了计算协方差矩阵所需要的所有数据,可以调用Matlab的cov函数直接得到协方差矩阵:

这里写图片描述

图 5 使用Matlab的cov函数直接计算样本的协方差矩阵

计算的结果,和之前的数据填入矩阵后的结果完全相同。

五、总结

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

参考:http://blog.csdn.net/fngy123/article/details/45153163?locationNum=4

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xuhang0910/article/details/52421707

智能推荐

Flowable6.7.1初始化_天龙至尊的博客-程序员信息网_flowable数据库初始化

什么是BPMN?工作流介绍在任何行业和企业中,都有各种各样的流程,例如:请假流程 报销流程 入职流程 离职流程 出差流程 等等……就算你自己没有设计过工作流,那么你每天肯定也在使用各种流程。为什么要用 BPMN ?对于流程控制,有一种比较初级的玩法是:在业务代码里面加入 Status(状态机) 字段维护流程状态,流程负责的审批人可能也是 Hard Code(硬编码),这种玩法实现流程初级会比较快,但是长远来看会出现几个问题:流程健壮性差,但凡出现人员变动,或者组织结构调整

计算机领域的句柄(Handle)_weixin_30782331的博客-程序员信息网

在计算机程序中,句柄是一个对资源的抽象引用。句柄被使用时往往是应用程序引用的内存块或者对象被其他系统掌控着,例如被其他数据库或者操作系统控制。一个资源的句柄可以是一个不透明的标识符--即程序员可以使用但不知道其具体是如何实现的--它通常是一个整数(通常是一个表,或数组,管理着某一类的资源),或者可以是一个指针,可以让程序员获取更多的信息。常用的资源句柄是文件描述符、网络套接字、数据库连...

微信小程序页面栈_微信小程序之页面传值(路由、页面栈、globalData、缓存)_风吹幡动wsd的博客-程序员信息网

1. 通过url带参数传递1.1 固定参数传递例如,从 list 页面到 detail 页面, 传递一个或多个固定值list页面传值:点此进入 detaildetail页面取值:onLoad: function (options) {this.setData({detail_id: options.id,detail_name: options.name})}1.2 从列表取值从列表页进入详情页时...

RecyclerView使用大全_安辉就是我的博客-程序员信息网_recyclerview属性大全

RecylerView介绍RecylerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字recylerview即回收view也可以看出。官方对于它的介绍则是:RecyclerView 是 ListView 的升级版本,更加先进和灵活。RecyclerView通过设置LayoutManager,ItemDe

免费的编程中文书籍索引 from github_aaa8610的博客-程序员信息网

免费的编程中文书籍索引免费的编程中文书籍索引,欢迎投稿。国外程序员在stackoverflow推荐的程序员必读书籍,中文版。stackoverflow上的程序员应该阅读的非编程类书籍有哪些?中文版github上的一个流行的编程书籍索引中文版感谢@siberiawolf使用 Bootstrap 开发了网页版,地址:http://siberiawo...

Go语言--包(Package)_yunfan188的博客-程序员信息网_go package

1 命名空间和作用域1.1 命名空间命名空间(Namespace)在编程语言中常用来表示标识符(identifier)的可见范围。编程语言借助命名空间来解决标识符不能同名的问题,命名空间实际上相当于给标识符添加了标识前缀,使标识符变得全局唯一。另外,命名空间是程序组织更加模块化,降低了程序内部的耦合性。一个标识符可以在多个命名空间中定义,它在不同命名空间中的含义是不互相干的。新的命名空间中可定义任意的标识符,它们不会与位于其他命名空间上的同名标识符发生冲突,当然自定义标识符尽量不要使用编程语言自

随便推点

如何1人5天开发完3D数据可视化大屏,超炫酷 【二】_winty~~的博客-程序员信息网

1. 前言在前第一部分的文章中,分享了大屏地球的实现。本次将会分享剩余的实现部分,文内大量干货,内容包括:平面地图的实现柱体的实现性能优化地图相关问题2. 平面地图平面地图的必要性在于地...

php智能裁剪,Codeigniter实现智能裁剪图片的方法_php实例_娜塔丽圈圈的博客-程序员信息网

一副1024*768大小的图片,裁剪到240*240大小,裁剪后不失真,尽可能保留图片主题含义。我使用到的方法:1. 先将图片等比例缩略到可以裁剪的大小;如果是宽幅图片,则按高度等比例缩放到高度 = 240px,窄幅图片(高度大于宽度)则按宽度等比例缩放;2. 按长宽格式居中裁剪;保留缩略后的图片中间部分;$this->load->library('image_lib');list($...

s5pv210 NV12 to RGB (fimc1实现硬解码数据在LCD显示)_咕唧咕唧shuboLK的博客-程序员信息网

最近用到210的硬解码,已经实现了H264->NV12这个解码过程,但是fb显示的数据是RGB的,所以解码为NV12并不能直接在LCD上显示,需要有一个NV12->RGB的转换过程。在6410 上s3c-pp设备会实现color space的转换,并且实现支持视频数据的硬件缩放。但是在S5PV210的 datasheet里并没找到post processor这个设备。 原来210更高级些,它有三个

MATLAB--求一个矩阵中所有元素的平均值_海轰Pro的博客-程序员信息网_matlab求矩阵平均

求一个矩阵中所有元素的平均值  在学均值滤波的时候,需要用到求一个矩阵所有元素的平均值,学习C++的我居然写了个循环,先算总值,再除以个数.(现在想想当时自己好笨!)  先上代码吧(用MATLAB中的一些函数可以减少很多工作量)a=[1,2,3;4,5,6;7,8,9];d=mean(a(:))结果:d = 5解释:a(:)的...

Fortran 基础语法(一)_weixin_30348519的博客-程序员信息网

GE是大于等于号(>=),GT是大于号(>),LE是小于等于号(<=),LT是小于号(<)IF基本用法If(逻辑判断式) then……End ifIf(逻辑判断式) then……Else……End if逻辑运算符:Fortran 90Fortr...

读书笔记:程序员的数学 概率统计_Alex_fishman的博客-程序员信息网

读书笔记:程序员的数学 概率统计特点内容第一、二章 概率定义 多随机变量第三、四章 离散、连续分布第五章 协方差矩阵与多元正态分布第六、七章 估计与检验 伪随机数第八章 各类应用体会之前读过程序员的数学、程序员的数学线性代数,这次就把程序员的数学:概率统计也看了。配上普林斯顿微积分读本,算是把高数三件套都过了一遍。虽然说也上过一遍概率论,但又只剩下一些零碎的记忆了。这次看一遍这本概率统计,看看能不能捞回来一点。特点跟本科上课的教材相比,它的特点和之前写过的这种数学入门书都非常像,就是干货少讲解多。

推荐文章

热门文章

相关标签