下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 PCA降维在MATLAB上的实现

PCA降维在MATLAB上的实现.doc

PCA降维在MATLAB上的实现

Maxine婷婷
2018-04-28 0人阅读 举报 0 0 暂无简介

简介:本文档为《PCA降维在MATLAB上的实现doc》,可适用于综合领域

PCA降维在MATLAB上的实现PCA降维在MATLAB上的实现学院计算机科学与技术专业计算机科学与技术年级级姓名周忠儒王云标学号指导教师魏建国年月日PCA降维在MATLAB上的实现一实验目的二实验环境三实验原理、PCA降维方法原理、MATLAB、PCA降维方法详解)、原始数据:)、协方差矩阵的求法:)、计算协方差矩阵的特征向量和特征值:)、选择成分组成模式矢量:)、得到降维后的数据:四实验代码详解实验结果五六实验总结PCA降维在MATLAB上的实现一实验目的掌握PCA降维的基本内容了解MATLAB的基本用法用PCA降维算法处理图像数据二实验环境Matlab三实验原理、PCA降维方法原理PCA的原理就是将原来的样本数据投影到一个新的空间中相当于我们在矩阵分析里面学习的将一组矩阵映射到另外的坐标系下。通过一个转换坐标也可以理解成把一组坐标转换到另外一组坐标系下但是在新的坐标系下表示原来的原本不需要那么多的变量只需要原来样本的最大的一个线性无关组的特征值对应的空间的坐标即可。PCA即主成分分析是图像处理中经常用到的降维方法大家知道我们在处理有关数字图像处理方面的问题时比如经常用的图像的查询问题在一个几万或者几百万甚至更大的数据库中查询一幅相近的图像。这时我们通常的方法是对图像库中的图片提取响应的特征如颜色纹理siftsurfvlad等等特征然后将其保存建立响应的数据索引然后对要查询的图像提取相应的特征与数据库中的图像特征对比找出与之最近的图片。、MATLABMATLAB(矩阵实验室)是MATrixLABoratory的缩写是一款由美国TheMathWorks公司出品的商业数学软件。MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。除了矩阵运算、绘制函数数据图像等常用功能外MATLAB还可以用来创建用户界面及与调用其它语言(包括CC和FORTRAN)编写的程序。、PCA降维方法详解)、原始数据:由于本实验数据过于庞大为了方便我们假定数据是二维的借助网络上的一组数据如下:x=,,,,,,,,,Ty=,,,,,,,,,T)、计算协方差矩阵()协方差矩阵:以下是含有n个样本的集合中一些数理统计的相关概念:均值:标准差:方差:在这里标准差和方差一般是用来描述一维数据的但现实生活我们常常遇到含有多维数据的数据集例如上学时免不了要统计多个学科的考试成绩。面对这样的数据集我们当然可以按照每一维独立的计算其方差但是通常我们还想了解这几科成绩之间的关系这时我们就要用协方差协方差就是一种用来度量两个随机变量关系的统计量其定义为:从协方差的定义上我们也可以看出一些显而易见的性质如:cov(X,Y)=var(X)cov(X,Y)=var(Y,X)需要注意的是协方差也只能处理二维问题那维数多了自然就需要计算多个协方差比如n维的数据集就需要计算个协方差那自然而然的我们会想到使用矩阵来组织这些数据。给出协方差矩阵的定义:这个定义还是很容易理解的我们可以举一个简单的三维的例子假设数据集有三个维度则协方差矩阵为:可见协方差矩阵是一个对称的矩阵而且对角线是各个维度上的方差。)、协方差矩阵的求法:协方差矩阵计算的是不同维度之间的协方差而不是不同样本之间的。下面我们将在matlab中用一个例子进行详细说明:首先随机产生一个*维的整数矩阵作为样本集为样本的个数为样本的维数。MySample=fix(rand(,)*)根据公式计算协方差需要计算均值那是按行计算均值还是按列呢我一开始就老是困扰这个问题。前面我们也特别强调了协方差矩阵是计算不同维度间的协方差要时刻牢记这一点。样本矩阵的每行是一个样本每列为一个维度所以我们要按列计算均值。为了描述方便我们先将三个维度的数据分别赋值:dim=MySample(:,)dim=MySample(:,)dim=MySample(:,)计算dim与dimdim与dimdim与dim的协方差:sum((dimmean(dim))*(dimmean(dim)))(size(MySample,))sum((dimmean(dim))*(dimmean(dim)))(size(MySample,))sum((dimmean(dim))*(dimmean(dim)))(size(MySample,))搞清楚了这个后面就容易多了协方差矩阵的对角线就是各个维度上的方差下面我们依次计算:std(dim)^std(dim)^std(dim)^这样我们就得到了计算协方差矩阵所需要的所有数据调用Matlab自带的cov函数进行验证:cov(MySample)可以看到跟我们计算的结果是一样的说明我们的计算是正确的。但是通常我们不用这种方法而是用下面简化的方法进行计算:先让样本矩阵中心化即每一维度减去该维度的均值。然后直接用新的样本矩阵乘上它的转置。然后除以(N)即可。其实这种方法也是由前面的公式通道而来只不过理解起来不是很直观而已。其Matlab代码实现如下:X=MySample–repmat(mean(MySample),,)中心化样本矩阵C=(X’*X)(size(X,))其中B=repmat(A,m,n)将矩阵A复制m×n块。即把A作为B的元素B由m×n个A平铺而成。B的维数是size(A,)*m,(size(A,)*nB=mean(A)的说明:如果你有这样一个矩阵:A=用mean(A)(默认dim=)就会求每一列的均值ans=用mean(A,)就会求每一行的均值ans=size(A,n)如果在size函数的输入参数中再添加一项n并用或为n赋值则size将返回矩阵的行数或列数。其中r=size(A,)该语句返回的是矩阵A的行数c=size(A,)该语句返回的是矩阵A的列数)上面我们简单说了一下协方差矩阵及其求法言归正传我们用上面简化求法求出样本的协方差矩阵为:)、计算协方差矩阵的特征向量和特征值因为协方差矩阵为方阵我们可以计算它的特征向量和特征值如下:eigenvectors,eigenvalues=eig(cov)我们可以看到这些矢量都是单位矢量也就是它们的长度为这对PCA来说是很重要的。)、选择成分组成模式矢量求出协方差矩阵的特征值及特征向量之后按照特征值由大到小进行排列这将给出成分的重要性级别。现在如果你喜欢可以忽略那些重要性很小的成分当然这会丢失一些信息但是如果对应的特征值很小你不会丢失很多信息。如果你已经忽略了一些成分那么最后的数据集将有更少的维数精确地说如果你的原始数据是n维的你选择了前p个主要成分那么你现在的数据将仅有p维。现在我们要做的是组成一个模式矢量这只是几个矢量组成的矩阵的一个有意思的名字而已它由你保持的所有特征矢量构成每一个特征矢量是这个矩阵的一列。对于我们的数据集因为有两个特征矢量因此我们有两个选择。我们可以用两个特征矢量组成模式矢量:我们也可以忽略其中较小特征值的一个特征矢量从而得到如下模式矢量:)、得到降维后的数据其中rowFeatureVector是由模式矢量作为列组成的矩阵的转置因此它的行就是原来的模式矢量而且对应最大特征值的特征矢量在该矩阵的最上一行。rowdataAdjust是每一维数据减去均值后所组成矩阵的转置即数据项目在每一列中每一行是一维对我们的样本来说即是第一行为x维上数据第二行为y维上的数据。FinalData是最后得到的数据数据项目在它的列中维数沿着行。这将给我们什么结果呢,这将仅仅给出我们选择的数据。我们的原始数据有两个轴(x和y)所以我们的原始数据按这两个轴分布。我们可以按任何两个我们喜欢的轴表示我们的数据。如果这些轴是正交的这种表达将是最有效的这就是特征矢量总是正交的重要性。我们已经将我们的数据从原来的xy轴表达变换为现在的单个特征矢量表达。说明:如果要恢复原始数据只需逆过程计算即可即:四实验代码详解按照上述PCA降维算法的原理编写代码如下:loadimmat将im中的数据导入MATLABm=mean(im,)求im数据每一行的平均值即得数为一列向量每一元素为im每一行的平均值。TrainNumber=size(im,)求im数据每一行数据的元素个数A=定义一个空矩阵Afori=:TrainNumbertemp=im(:,i)uint(m)定义一个中间矩阵变量其值为im中每一列减去m的得数A=Atemp将中间矩阵变量temp的值存入A中endfor循环的作用是将im每一列都减去m并存入A中L=A'*AL=A矩阵与其转置矩阵的乘积VD=eig(L)求矩阵L的特征值与特征向量Leigvec=定义一个空矩阵fori=:Leigvec=LeigvecV(:,i)End将特征矩阵存入L中PCA=A*LeigvecPCA为A矩阵与特征矩阵的乘积结果就是降维后的矩阵为维度。五实验结果最后降至维六实验总结PCA降维方法在网上确实有很多的资料是一种非常常用的处理图像的方法。通过在网上查找资料的过程不仅了解了PCA降维算法也复习了线性代数这门学科并且更加熟悉了MATLAB的用法获益匪浅。当然在实验过程中也遇到了很多有大有小的问题比如代码的实现matlab的应用尤其是维度匹配问题研究了好长时间。不过最终都将这些问题一一解决总之又学到了好多。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/11

PCA降维在MATLAB上的实现

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利