基于PCA的特征提取
2014-04-09 15:40
309 查看
图像处理方面的知识也学了一段时间了,总是光看理论的话,感觉联系不上实际,第一次把理论综合的实现出来,对这些理论的印象才感觉的更深刻,也能够为后续的学习打下良好的基础。
PCA是比较老的算法,但是可靠性挺好,对于我这种新手,练练手还是不错的。
下面开始对这些算法说一说我自己的理解,如果有不正确的地方还请各位牛人指点。
主成分分析(PCA)是多变量分析中一项很老的技术,源于通信理论中的K-L变换,它考虑的是对于d维空间中的n个向量X1,X2......Xn,如何在低维空间中进行表示,这需要对其空间进行变换。
变换具体的表示如下:
![](http://img.blog.csdn.net/20140409154731375?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VpMTM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
其中
![](http://img.blog.csdn.net/20140409154845484?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VpMTM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
即为对样本的一种近似表示,是样本的均值,
![](http://img.blog.csdn.net/20140409154927156?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VpMTM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
就是在d'维空间中的主成份分量,也就是经过PCA提取后的一组特征。
![](http://img.blog.csdn.net/20140409155000812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VpMTM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
是这d'维空间的一组基。
这样
![](http://img.blog.csdn.net/20140409155029500?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VpMTM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
即为原样本在d'维空间的一种近似。
看到这,还不知道
![](http://img.blog.csdn.net/20140409154927156?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VpMTM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
和
![](http://img.blog.csdn.net/20140409155000812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VpMTM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
是如何计算得到的,具体的推理过程就不细说了,想知道的可以自行查阅相关资料,我只写一下他们的计算公式。
![](http://img.blog.csdn.net/20140409155000812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VpMTM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
是散布矩阵S的前d‘个特征向量,
![](http://img.blog.csdn.net/20140409154927156?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VpMTM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
是散布矩阵S的前d‘个特征值,而散布矩阵S为
![](http://img.blog.csdn.net/20140409155215328?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VpMTM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
,其中Z为样本矩阵X中的每个样本减去样本均值后得到的矩阵。
S是d*d的矩阵,计算量很大,幸运的是有一种快速计算的方法,这里我们考虑
![](http://img.blog.csdn.net/20140409155258531?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VpMTM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
,一般情况下样本数目n原小于样本维数d,所以R的尺寸远小于散布矩阵S。
设是R的特征向量为
![](http://img.blog.csdn.net/20140409155349312?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VpMTM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
,则有
![](http://img.blog.csdn.net/20140409155506906?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VpMTM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
对上式两边同时左乘,得
![](http://img.blog.csdn.net/20140409155531140?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VpMTM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
说明
![](http://img.blog.csdn.net/20140409155602781?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3VpMTM0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
为散布矩阵S的特征值,至此,可以计算小矩阵R的特征向量来得到散布矩阵S的特征向量。
当计算出散布矩阵S的特征向量和特征值时,就可以对样本进行表示了。
假设计算的是前20个特征值和特征向量,那么样本就可以用这20个特征值对其进行表示,这也就是样本的主成份。
快速PCA计算的matlab实现代码如下:
function [ pcaA V] =fastPCA( A,k )
%输入:A------样本矩阵,每行为一个样本
% k------降维至k维
%输出:pcaA----降维后K维样本特征向量组成的矩阵,每行一个样本,列数k为降维后的样本特征维数
% V-------主成分分量
[r,c]=size(A);
%样本均值
meanVec = mean(A);
%计算协方差矩阵的转置 covMatT
Z=(A-repMat(meanVec,r,1));
covMatT =Z*Z';
%计算covMatT的前k个本征值和本征向量
[V D] = eigs(covMatT,k);
%得到协方差矩阵covMatT'的本征向量
V = Z'*V;
%本征向量归一化为单位本征向量
for i=1:k
V(:,i)=V(:,i)/norm(V(:,i));
end
pcaA = Z*V;
end
PCA是比较老的算法,但是可靠性挺好,对于我这种新手,练练手还是不错的。
下面开始对这些算法说一说我自己的理解,如果有不正确的地方还请各位牛人指点。
主成分分析(PCA)是多变量分析中一项很老的技术,源于通信理论中的K-L变换,它考虑的是对于d维空间中的n个向量X1,X2......Xn,如何在低维空间中进行表示,这需要对其空间进行变换。
变换具体的表示如下:
其中
即为对样本的一种近似表示,是样本的均值,
就是在d'维空间中的主成份分量,也就是经过PCA提取后的一组特征。
是这d'维空间的一组基。
这样
即为原样本在d'维空间的一种近似。
看到这,还不知道
和
是如何计算得到的,具体的推理过程就不细说了,想知道的可以自行查阅相关资料,我只写一下他们的计算公式。
是散布矩阵S的前d‘个特征向量,
是散布矩阵S的前d‘个特征值,而散布矩阵S为
,其中Z为样本矩阵X中的每个样本减去样本均值后得到的矩阵。
S是d*d的矩阵,计算量很大,幸运的是有一种快速计算的方法,这里我们考虑
,一般情况下样本数目n原小于样本维数d,所以R的尺寸远小于散布矩阵S。
设是R的特征向量为
,则有
对上式两边同时左乘,得
说明
为散布矩阵S的特征值,至此,可以计算小矩阵R的特征向量来得到散布矩阵S的特征向量。
当计算出散布矩阵S的特征向量和特征值时,就可以对样本进行表示了。
假设计算的是前20个特征值和特征向量,那么样本就可以用这20个特征值对其进行表示,这也就是样本的主成份。
快速PCA计算的matlab实现代码如下:
function [ pcaA V] =fastPCA( A,k )
%输入:A------样本矩阵,每行为一个样本
% k------降维至k维
%输出:pcaA----降维后K维样本特征向量组成的矩阵,每行一个样本,列数k为降维后的样本特征维数
% V-------主成分分量
[r,c]=size(A);
%样本均值
meanVec = mean(A);
%计算协方差矩阵的转置 covMatT
Z=(A-repMat(meanVec,r,1));
covMatT =Z*Z';
%计算covMatT的前k个本征值和本征向量
[V D] = eigs(covMatT,k);
%得到协方差矩阵covMatT'的本征向量
V = Z'*V;
%本征向量归一化为单位本征向量
for i=1:k
V(:,i)=V(:,i)/norm(V(:,i));
end
pcaA = Z*V;
end
相关文章推荐
- 基于ORL人脸库PCA特征提取之“基于主分量人脸重建”
- 基于PCA的人脸特征提取1
- 基于PCA的特征提取
- 基于PCA的人脸特征提取及人脸重建
- 图像基础8 图像分类——PCA 图像特征提取算法
- 短文本分析----基于python的TF-IDF特征词标签自动化提取
- 机器学习 —— 基础整理(四)特征提取之线性方法:主成分分析PCA、独立成分分析ICA、线性判别分析LDA
- 基于颜色的特征提取
- 数据挖掘—LDA,PCA特征提取降维与SVM多分类在人脸识别中的应用-数据集ORL
- 基于Python的卷积神经网络和特征提取
- 基于opencv的图像拼接(一): sift特征点提取
- 基于颜色特征提取
- PCA-特征提取
- 基于Python的卷积神经网络和特征提取
- 特征提取--基于局部二值模型(LBP)的特征提取
- Mel-Filter banks/MFCC特征提取(基于python)
- 基于MATLAB,运用PCA+SVM的特征脸方法人脸识别
- 短文本分析----基于python的TF-IDF特征词标签自动化提取
- 基于 vs2013 + caffe 的 人脸图像 vgg 特征提取
- 基于OpenCV的Gabor变换及特征提取