1《电子商务》实验报告PCA降维题目(22)PCA成员2014年6月1日2摘要为了提高统计模式识别的正确识别率,人们通常需要采集数量巨大的数据特征,使得原始空间或输入空间的维数可能高达几千维或万维。如果直接在输入空间上进行分类器训练,就可能带来两个棘手的问题:(1)很多在低维空间具有良好性能的分类算法在计算上变得不可行;(2)在训练样本容量一定的前提下,特征维数的增加将使得样本统计特性的估计变得更加困难,从而降低分类器的推广能力或泛化能力,呈现所谓的“过学习”或“过训练”的现象。要避免出现“过学习”的情况,用于统计分类器训练的训练样本个数必须随着维数的增长而呈指数增长,从而造成人们所说的“维数灾难”。这一问题可以通过降维来解决。因为高维数据中包含了大量的冗余并隐藏了重要关系的相关性,降维的目的就是消除冗余,减少被处理数据的数量,同时还能保持数据的特征完整性,本次实验使用26维度的语音参数MFCC验证PCA降维算法。关键字:降维、PCA、MFCC31.算法分析1.1PCA简介PCA的目标是为了发现这种特征之间的线性关系,检测出这些线性关系,并且去除这线性关系。PCA称为主成分分析或者主元分析。是一种数据分析的降维方法,一般常用于图像处理,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题。计算主成分的目的是将高维数据投影到较低维空间。一类事物的特征会很多,而每个特征也有很高的维数。但有些维数之间有很大的相似性,相同的维数难以区分特性,所以PCA的目标是为了发现这种特性维度之间的线性关系,检测出这些线性关系,并且去除这线性关系。1.2PCA算法设X1、X2….,Xp为原始变量,F1、F2…,Fm为m个主成分因子其使方差Var(F1)越大,表示F1包含的信息越多,故称F1为第一主成分。(1)Fi与Fj互不相关,Cov(Fi,Fj)=0(2)F1是X1,X2,…,Xp的一切线性组合中方差最大的,……,即Fm是与F1,F2,……,Fm-1都不相关的X1,X2,…,XP的所有线性组合中方差最大者。F1,F2,…,Fm(m≤p)为构造的新变量指标,即原变量指标的第一、第二、……、第m个主成分。11112121...ppFaXaXaX11111221221122221122...............ppppmmmmppFaXaXaXFaXaXaXFaXaXaX41.3PCA降维步骤(1)计算原变量协方差矩阵(2)求出Σ的特征值及相应的正交化单位特征向量Σ的前m个较大的特征值就是前m个主成分对应的方差,对应的单位特征向量就是原来变量在主成分Fi上的载荷系数(数学上可以证明),则原变量的第i个主成分Fi为:主成分的方差(信息)贡献率用来反映信息量的大小,为:(3)选择主成分最终要选择几个主成分,即F1,F2,……,Fm中m的确定是通过方差累计贡献率G(m)来确定当累积贡献率大于85%时,就认为能足够反映原来变量的信息了,对应的m就是抽取的前m个主成分。2.实验过程2.1实验环境MATLAB2014a+windows8操作系统MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高11()()1nijijkikjksxxxxnTiiiFaX1imiii11()miipkkGm()ijpps,1,2,,ijp5级技术计算语言和交互式环境。除了矩阵运算、绘制函数/数据图像等常用功能外,MATLAB还可以用来创建用户界面及与调用其它语言(包括C,C++和FORTRAN)编写的程序。而2014a是第一个支持中文的MATLAB版本。Windows8是由微软公司于2012年10月26日正式推出的操作系统。系统独特的metro开始界面和触控式交互系统,旨在让人们的日常电脑操作更加简单和快捷,为人们提供高效易行的工作环境。其支持来自Intel、AMD的芯片架构,被应用于个人电脑和平板电脑上。该系统具有更好的续航能力,且启动速度更快、占用内存更少,并兼容Windows7所支持的软件和硬件。2.2实验步骤1.打开MATLAB2014a,点击,将MATLAB的工作文件夹定位到mfcc.mat所在目录下,如下图:图2-12.双击mfcc.mat,将数据加载到工作区。3.在命令行窗口输入命令:[coeff,score,latent,tsquared]=pca(mfcc);并回车,得到MATLAB自带的pca算法运行后的数据,如下图:图2-24.在命令行窗口输入命令:rate=cumsum(latent)./sum(latent);并回车,得到特征值的累计贡献率,如下图:6图2-35.根据贡献率分析,需要保持95%以上的特征,所以选择前21个特征向量。在命令行窗口输入命令:tranMatrix=coeff(:,1:21);并回车,得到主成分变换矩阵,则从原来的26维空间降到21维空间。6.在命令行窗口输入命令:mfcc_result=bsxfun(@minus,mfcc,mean(mfcc,1))*tranMatrix;并回车,得到降维结果。选中工作区mfcc_result,点击右键,选择“另存为”,保存在mfcc.mat同一文件夹下,命名为mfcc_result.mat,如下图:7图2-43.实验分析3.1MATLAB的PCA函数分析[coeff,score,latent,tsquared]=pca(X)为MATLAB自带的函数,其各个变量代表的意义如下:X:为要输入的n维原始数据。coeff:是X矩阵所对应的协方差阵V的所有特征向量组成的矩阵,即变换矩阵或称投影矩阵,每列对应一个特征值的特征向量,列的排列顺序是按特征值的大小递减排序。score:也就是说原X矩阵在主成分空间的表示。它是对原始数据进行的分析,进而在新的坐标系下获得的数据,并将这n维数据按贡献率由大到小排列。latent:是一维列向量,是X所对应的协方差矩阵的特征值向量,每一个数据是对应score里相应维的贡献率,因为数据有n维所以列向量有n个数据,由大到小排列。tsquared:是表示对每个样本点Hotelling的T方统计量。83.2实验代码行分析[coeff,score,latent,tsquared]=pca(mfcc):通过MATLAB自带的函数,得到mfcc数据的MATLABpca函数分析结果。rate=cumsum(latent)./sum(latent):计算特征值的累计贡献率,算出降维后的空间所能表示原空间的程度。tranMatrix=coeff(:,1:21):根据得到的累计贡献率,分析需要保留的维度数,因为只需要能表示原空间95%以上的特性,就可以保证数据完整性。通过查看rate的结果,前21个特征值就可以表示原空间95%的特性,同时原空间所有的特征向量组成的矩阵为coeff,所以保留coeff的前21个列向量。mfcc_result=bsxfun(@minus,mfcc,mean(mfcc,1))*tranMatrix:score为原空间在主成分空间的表示,但是进行了维数据按贡献率,其计算表达式为score=bsxfun(@minus,mfcc,mean(mfcc,1))*coeff。由于soeff的特征维度数也是经过排序的,所以不能直接用原数据mfcc*tranMatrix得到降维后的空间,只能通过bsxfun(@minus,mfcc,mean(mfcc,1))*tranMatrix来计算。4.实验结果实验得到的结果保存在mfcc_result.mat文件中,最终降维后的数据有以下变化:1.结果数据没有打乱样本的排列顺序。2.结果数据的维度排列顺序进行了改变,按维度对数据的贡献度进行降序排列。3.结果数据保留了原始数据至少95%的特性,并且减少了5个维度,总体降维很成功。4.本次实验采用的PCA算法在数据进行降维的同时对数据进行了处理,所以最终数据与原始数据不能进行直接对比,需要使用本结果数据进行数据识别时,请参照“1.3PCA降维步骤”进行测试数据的处理。以下为结果数据的部分显示截图:9图4-15.结论PCA的原理就是将原来的样本数据投影到一个新的空间中,相当于在矩阵分析里面学习的将一组矩阵映射到另外的坐标系下。通过一个转换坐标,也可以理解成把一组坐标转换到另外一组坐标系下,但是在新的坐标系下,表示原来的原本不需要那么多的变量,只需要原来样本的最大的一个线性无关组的特征值对应的空间的坐标即可。PCA还具有以下一些优缺点:1.优点:它利用降维技术用少数几个综合维度来代替原始特征的多个维度,这些综合维度集中了原始维度的大部分信息;它通过计算综合主成分函数得分,对客观现象进行了科学评价,得到维度贡献率的排名,对维度重要性的估算非常理性化。2.缺点:当主成分的因子符合的符号有正负时,综合评价函数意义就不明确,命名清晰性低,只能涉及一组维度的相关关系,出现两组维度时可以使用典型相关分析。最后还有一点值得注意的,PCA降维是通过协方差寻找各维度的相关性,考虑到相关性最小的维度之间联系最少,这些维度相互独立,可以独立的判别原始数据,所以PCA算法目的就是消除相关性较大的维度,留下相关性小的维度。由此出发,可以知道PCA算法不是唯一的,根绝选择的协方差矩阵不同,PCA算法也不一样,获得的转换矩阵肯定也不一样,最后导致的pca降维得到的数据肯定不一致。所以在利用PCA算法进行降维,并用得到的数据进行内容识别时,一定要保证训练数据和测试数据都进行了同一个PCA算法的处理。