matlab类间散度矩阵,协方差矩阵和散布矩阵(散度矩阵)的意义

在机器学习模式识别相关算法中,经常需要求样本的协方差矩阵C和散布矩阵S。如在PCA主成分分析中,就需要计算样本的散度矩阵,而有的教材资料是计算协方差矩阵。实质上协方差矩阵和散度矩阵的意义就是一样的,散布矩阵(散度矩阵)前乘以系数1/(n-1)就可以得到协方差矩阵了。

在模式识别的教程中,散布矩阵也称为散度矩阵,有的也称为类内离散度矩阵或者类内离差阵,用一个等式关系可表示为:

关系:散度矩阵=类内离散度矩阵=类内离差阵=协方差矩阵×(n-1)

样本的协方差矩阵乘以n-1倍即为散布矩阵,n表示样本的个数,散布矩阵的大小由特征维数d决定,是一个为d×d的半正定矩阵。

一、协方差矩阵的基础

对于二维随机变量(X,Y)之间的相互关系的数字特征,我们用协方差来描述,记为Cov(X,Y):

0818b9ca8b590ca3270a3433284dd417.png

那么二维随机变量(X,Y)的协方差矩阵,为:

0818b9ca8b590ca3270a3433284dd417.png

对于3维随机变量(X, Y, Z)的协方差矩阵可表示为:

0818b9ca8b590ca3270a3433284dd417.png

现实应用中,上式n表示样本的个数,随机变量(X, Y,Z)可以看作样本的特征(属性);

需要特别说明的是:

(1)协方差矩阵是一个对称矩阵,且是半正定矩阵,主对角线是各个随机变量的方差(各个维度上的方差)。

(2)标准差和方差一般是用来描述一维数据的;对于多维情况,而协方差是用于描述任意两维数据之间的关系,一般用协方差矩阵来表示。因此协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。

(3)协方差计算过程可简述为:先求各个分量的均值E(Xi)和E(Xj),然后每个分量减去各自的均值得到两条向量,在进行内积运算,然后求内积后的总和,最后把总和除以n-1。

例子:设有8个样本数据,每个样本有2个特征:(1,2);(3 3);(3 5);(5 4);(5 6);(6 5);(8 7);(9 8),那么可以看作二维的随机变量(X,Y),即

X=[1 3 3 5 5 6 8 9]

Y=[2 3 5 4 6 5 7 8]

Matlab中可以使用cov(X, Y)函数计算样本的协方差矩阵,其中X,Y都是特征向量。当然若用X表示样本的矩阵(X中每一行表示一个样本,每列是一个特征),那么可直接使用cov(X)计算了。

clear all

clc

X=[1,2;3 3;3 5;5 4;5 6;6 5;8 7;9 8]%样本矩阵:8个样本,每个样本2个特征

covX= cov(X)%使用cov函数求协方差矩阵运行结果为:

covX =

7.1429    4.8571

4.8571    4.0000当然,可以按定义计算,Matlab代码如下:

clear all

clc

X=[1,2;3 3;3 5;5 4;5 6;6 5;8 7;9 8]%样本矩阵:8个样本,每个样本2个特征

covX= cov(X)%使用cov函数求协方差矩阵

%% 按定义求协方差矩阵

meanX=mean(X)          %样本均值

varX=var(X)            %样本方差

dimNum=8;              %s样本个数ize(X,1)=8

dim1=X(:,1);           %特征分量1

dim2=X(:,2);           %而在分量2

c11=sum( (dim1-mean(dim1)) .* (dim1-mean(dim1)) ) / ( dimNum-1 );

c21=sum( (dim2-mean(dim2)) .* (dim1-mean(dim1)) ) / ( dimNum-1 );

c12=sum( (dim1-mean(dim1)) .* (dim2-mean(dim2)) ) / ( dimNum-1 );

c22=sum( (dim2-mean(dim2)) .* (dim2-mean(dim2)) ) / ( dimNum-1 );

C33=[c11,c12;c21,c22]%协方差矩阵运行结果:

varX =

7.1429    4.0000

C33 =

7.1429    4.8571

4.8571    4.0000说明:

从中可以发现,样本的协方差矩阵的对角线即为样本的方差。

二、协方差矩阵的几何意义

为了更好理解协方差矩阵的几何意义,下面以二维正态分布图为例(假设样本服从二维正态分布):

0818b9ca8b590ca3270a3433284dd417.png

clear all;clc

mu=[0,0];         % 均值向量

C=[5 0;0 1]       %样本的协方差矩阵

[V,D] =eigs(C)    %求协方差矩阵的特征值D和特征向量V

%% 绘制二维正态分布图

[X,Y]=meshgrid(-10:0.3:10,-10:0.3:10);%在XOY面上,产生网格数据

p=mvnpdf([X(:) Y(:)],mu,C);%求取联合概率密度,相当于Z轴

p=reshape(p,size(X));%将Z值对应到相应的坐标上

figure

set(gcf,'Position',get(gcf,'Position').*[1 1 1.3 1])

subplot(2,3,[1 2 4 5])

surf(X,Y,p),axis tight,title('二维正态分布图')

subplot(2,3,3)

surf(X,Y,p),view(2),axis tight,title('在XOY面上的投影')

subplot(2,3,6)

surf(X,Y,p),view([0 0]),axis tight,title('在XOZ面上的投影');

协方差矩阵C的特征值D和特征向量V分别为:

V =

1     0

0     1

D =

5     0

0     1

说明:

1)均值[0,0]代表正态分布的中心点,方差代表其分布的形状。

2)协方差矩阵C的最大特征值D对应的特征向量V指向样本分布的主轴方向。例如,最大特征值D1=5对应的特征向量V1=[1 0]T即为样本分布的主轴方向(一般认为是数据的传播方向)。次大特征值D2=1对应的特征向量V2=[0 1]T,即为样本分布的短轴方向。

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

协方差矩阵C的特征值D和特征向量V分别为:

V =

0     1

1     0

D =

5     0

0     5

说明:

1)由于协方差矩阵C具有两个相同的特征值D1=D2=5,因此样本在V1和V2特征向量方向的分布是等程度的,故样本分布是一样圆形。

2)特征值D1和D2的比值越大,数据分布形状就越扁;当比值等于1时,此时样本数据分布为圆形。

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

协方差矩阵C的特征值D和特征向量V分别为:

V =

0.7071   -0.7071

0.7071    0.7071

D =

6     0

0     4

说明:

1)特征值的比值D1/D2=6/4=1.5>1,因此样本数据分布形状是扁形,数据传播方向(样本的主轴方向)为V1=[0.7071 0.7071]T

0818b9ca8b590ca3270a3433284dd417.png

综合上述,可知:

(1)样本均值决定样本分布中心点的位置。

(2)协方差矩阵决定样本分布的扁圆程度。

是扁还是圆,由协方差矩阵的特征值决定:当特征值D1和D2的比值为1时(D1/D2=1),则样本分布形状为圆形。当特征值的比值不为1时,样本分布为扁形;

偏向方向(数据传播方向)由特征向量决定。最大特征值对应的特征向量,总是指向数据最大方差的方向(椭圆形的主轴方向)。次大特征向量总是正交于最大特征向量(椭圆形的短轴方向)。

三、协方差矩阵的应用

协方差矩阵(散布矩阵)在模式识别中应用广泛,最典型的应用是PCA主成分分析了,PCA主要用于降维,其意义就是将样本数据从高维空间投影到低维空间中,并尽可能的在低维空间中表示原始数据。这就需要找到一组最合适的投影方向,使得样本数据往低维投影后,能尽可能表征原始的数据。此时就需要样本的协方差矩阵。PCA算法就是求出这堆样本数据的协方差矩阵的特征值和特征向量,而协方差矩阵的特征向量的方向就是PCA需要投影的方向。

关于PCA的原理和分析,请见鄙人的博客:

《PCA主成分分析原理分析和Matlab实现方法》:http://blog.csdn.NET/guyuealian/article/details/68487833

如果你觉得该帖子帮到你,还望贵人多多支持,鄙人会再接再厉,继续努力的~

0818b9ca8b590ca3270a3433284dd417.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

把树分成森林 matlab,20170106RF_Matlab 随机森林指的是利用多棵树对样本进行训练并预测的一种分类器,包括两个方面:数据的随 269万源代码下载- www.pudn.com...

文件名称: 20170106RF_Matlab下载 收藏√ [5 4 3 2 1 ]开发工具: matlab文件大小: 441 KB上传时间: 2017-01-06下载次数: 0提 供 者: yanxiu详细说明:随机森林指的是利用多棵树对样本进行训练并预测的一种分类器,包括两个方面:数据的随…

inur new.php id,Cmsez(随易)全站系统 0day

程序名称:Cmsez Web Content Manage System v2.0.0文件:comments.php viewimg.php代码:---------------//commentsinclude "mainfile.php";$artnew article();//设定$confirmyes;//yes:需要管理员认证后才能显示,no:直接显示$membe…

PHP红黑源码,红黑树的实现源码(第二次修订版)

/*-----------------------------------------------------------RB-Tree的插入和删除操作的实现算法参考资料:1) <>2) http://lxr.linux.no/linux/lib/rbtree.c作者&#xff1a;http://www.cppblog.com/converse/您可以自由的传播&#xff0c;修改这份代码&#xff0c;转…

python 自动点击上传以后上传文件,python使用selenium模拟点击网页实现自动导入上传文件功能...

一、环境准备Python版本&#xff1a;3.4编辑器&#xff1a;Pycharmexcel文件&#xff1a;导入的excel模板二、python代码由于工作需要&#xff0c;需要每天定时导入相关excel文件进入后台数据库&#xff0c;由于导入的逻辑比较复杂&#xff0c;所以决定通过python模拟登陆导入网…

php绘制频谱图,一步一步教你实现iOS音频频谱动画(二)

本文是系列文章中的第二篇&#xff0c;上篇讲述了音频播放和频谱数据计算&#xff0c;本篇讲述数据处理和动画的绘制。前言在上篇文章中我们已经拿到了频谱数据&#xff0c;也知道了数组每个元素表示的是振幅&#xff0c;那这些数组元素之间有什么关系呢&#xff1f;根据FFT的原…

php删除尾部字符,php如何删除字符串末尾字符

我们知道字符串删除字符的方式有好几种&#xff0c;今天就来介绍三种php删除字符串最后一个字符的函数&#xff0c;有需要的小伙伴可以参考一下。方法一&#xff1a;substr()函数substr()函数返回字符串的一部分。语法如下&#xff1a;substr(string string, int start, int [l…

empinfo Oracle数据库,Oracle数据库---包

--根据员工号或员工姓名获取员工的信息--根据员工号或员工姓名删除员工的信息--创建包规范CREATE OR REPLACE PACKAGE overload_pkgISFUNCTION get_info(eno NUMBER) RETURN emp%ROWTYPE;FUNCTION get_info(name VARCHAR2) RETURN emp%ROWTYPE;PROCEDURE del_emp(eno NUMBER);P…

oracle查看context,oracle context(上下文)

context在计算机领域翻译为上下文context的信息也就是当前会话中的环境变量&#xff0c;如&#xff1a;登录的session_id&#xff0c;用户名&#xff0c;语言等信息查看context中的属性信息。oracle默认的为我们创建了一个context叫userenv(user environment)SYS_CONTEXT(USERE…

oracle标量子查询的优势,标量子查询

--标量子查询select e.empno, e.ename, e.sal, e.deptno,(select d.dname from dept d where e.deptno d.deptno)as dnamefrom emp e--插入一条数据insert into emp(empno,deptno) values(9999,null)--返回结果15条记录--改成left join(hash outer)select e.empno, e.ename, e…

切割照片php上传,php下ajax的文件切割上传

var myForm document.getElementById("myForm");var upfile document.getElementById("upfile");myForm.onsubmit function() {//获取文件对象var file upfile.files[0];//获取文件大小var fileSize file.size;//一次截取的大小(字节)var CutSize 10…

oracle插补缺失日期,Oracle连接 ORA-28001: 口令已经失效解决方法

cmd进入命令行C:UsersAdministrator>sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on 星期四 9月 24 15:19:21 2020Copyright (c) 1982, 2010, Oracle. All rights reserved.连接到:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Pr…

PHP 蒙太奇马赛克拼图,AndreaMosaic制作一幅马赛克拼图

大家在网上应该都见过用很多幅图片拼成的马赛克图片&#xff0c;今天小编就为大家介绍AndreaMosaic制作一幅马赛克拼图方法&#xff0c;不会的朋友快快来学习吧&#xff01;软件名称&#xff1a;AndreaMosaic(蒙太奇图片制作软件) V6.1.0.4 中文安装免费版软件大小&#xff1a;…

php mongo 查询count,[PHP] 使用PHP在mongodb中进行count查询

原文&#xff1a;https://www.cnblogs.com/taoshihan/p/12362111.html在php7的mongodb扩展中&#xff0c;当要查询某个集合在某个条件下的数据个数时&#xff0c;可以使用下面的方式来获取。比原生的命令要复杂许多比旧版mongo扩展也复杂许多需要使用到MongoDB\Driver\Command …

oracle字段类型设计,Oracle字段类型设计与实际业务不符引发的问题

在Oracle表的设计过程中&#xff0c;开发人员总是对字段的类型不以为然&#xff0c;下面来演示一个例子&#xff0c;按照应该设计为number的&#xff0c;结果设计成了varcha在Oracle表的设计过程中&#xff0c;开发人员总是对字段的类型不以为然&#xff0c;下面来演示一个例子…

linux下进程监控6,Linux进程监控技术—精通软件性能测试与LoadRunner最佳实战(6)...

8.2.5 Linux操作系统进程监控技术Linux在进程监控方面同样出色&#xff0c;不仅可以通过图形用户界面的管理工具&#xff0c;还可以用命令方式显示进程相关信息。像“Windows的任务管理器”一样&#xff0c;在RedHat 9中可以通过单击“系统工具”→“系统监视器”&#xff0c;…

linux pcie命令,setpci命令_Linux setpci 命令用法详解:查询和配置PCI设备的使用工具...

setpci命令是一个查询和配置PCI设备的使用工具。语法setpci(选项)(参数)选项-v&#xff1a;显示指令执行的细节信息&#xff1b;-f&#xff1a;当没有任何操作需要完成时&#xff0c;不显示任何信息&#xff1b;-D&#xff1a;测试模式&#xff0c;并不真正将配置信息写入寄存器…

linux proc文件 write的原子性,Linux命令之write调用的原子性

linux命令是对Linux系统进行管理的命令。本文介绍的关于linux命令中write调用的原子性的详细描述&#xff0c;具体内容如下所述。UNIX环境高级编程中关于原子操作的介绍&#xff0c;其中有一种情形是在文件尾端添加数据。文中说&#xff0c;如果多个进程都需要将数据添加到某一…

linux 命令行 迅雷替代,Mac/Linux下迅雷替代方案

还记得我两年前写的《DIY了家用NAS》吗&#xff1f;现在又带来新的升级啦。当初的NAS最多能使用Transmission来进行BT下载&#xff0c;那时就在想&#xff0c;如果能下载普通的http资源就好了。再进一步&#xff0c;有什么方案可以通吃所有下载方式呢&#xff1f; 记得那个时候…

linux好用的编译器,推荐几款Linux下比Notepad++好的编辑器软件

Notepad这一段又出风头了&#xff0c;好好的做你软件多好&#xff0c;非得参杂入政治。前两天开源文本编辑器 Notepad 发布了 7.8.1 版本&#xff0c;然后在该版本中作者居然摸黑中国&#xff0c;具体的内容请大家自行百度。而且这已经不是 Notepad 第一次这么干了&#xff01;…

linux下调用python脚本,Linux下QT调用Python脚本的解决方案,Qt,python,一种,解决办法

最近在做一个深度学习对图片中对象识别效果的检测工具&#xff0c;其主要功能就是将自己标注的图片与识别结果图片进行对比然后计算识别的准确等参数&#xff0c;并提供原图与结果图片的显示功能。脚本主要完成识别与计算功能&#xff0c;QT完成数据的整理显示与图片的显示。我…