MATLAB自带工具箱实现PCA降维代码

PCA基本流程:

一、训练集矩阵算协方差矩阵A;函数

二、算协方差矩阵特征值与特征向量;测试

三、按特征值的大小排列特征矩阵,得B,对应的特征值(按从大到小排列)组成向量a;spa

四、A*B获得去关联的新矩阵C,A与C的对应位置物理意义相同(指样本维度和样本数),可是去掉了关联,而且按特征贡献度大小排列;code

五、选贡献度百分比或降维后的维度。例如百分之90,则是取知足sum(a(1:n))/sum(a)>90%的最小的n;若是直接定降维后的维度,则直接设置个n;blog

六、任同样本的降维公式相同,对于样本x:x*B(1:n,:)。图片

原理说明:

步骤3,4本质上是基变换原理。4能够去关联的原理与马氏距离相仿。贡献度的原理与协方差矩阵的数学意义相关。转换矩阵相关的计算必须在训练集上完成是由于协方差矩阵的计算须要一个样本集,如将测试集样本加入这个样本集,则训练集中已经包含了测试集信息(例如某一维特征的均值)。get

matlab函数说明:

[coeff,score,latent,tsquare] = pca(feature);%咱们这里须要他的pc和latent值作分析

feature是被降维的特征,每一行是一个特征,列数表明总的特征个数,好比一个图片的HOG特征是96维,总共有8000个HOG特征,那么feature的维度是8000×96,咱们的目标就是将其降维(假设将96维降到50维,)那么咱们指望的降维后feature就变成了咱们须要的feature_after_PCA:8000×50数学

coeff:步骤3算出来的矩阵B,本质上是一个基变换矩阵。数学意义是协方差矩阵按特征值的大小排列的特征矩阵。class

score:步骤4算出来的矩阵C,与A同维同物理意义。原理

latent:步骤3算出来的向量a,存储了贡献度,数学意义是协方差矩阵特征值从大到小排列。 

用途:

根据latent计算知足某贡献度所需的样本维度,或直接定一个样本维度,而后feature*coeff(1:n,:)降维。把训练集中全部样本计算feature*coeff就是score,固然,feature*coeff(1:n,:)这个式子更大的用途是计算测试集中的样本。

重点!!!

pca内建函数在算协方差的时候先减了个样本均值,因此这里feature*coeff不是score,须要先算:

x0 = bsxfun(@minus,feature,mean(feature,1));

而后x0*coeff才是score。

参考原文:matlab_PCA,训练集与测试集分开,原理和用法

相关文章
相关标签/搜索