关闭

主成分分析-特征向量计算改进(1.1)

标签: matlab主成分分析人脸识别算法模式识别
1923人阅读 评论(0) 收藏 举报
分类:

一)对PCA协方差的改进  

    这两天运行着人脸识别的相关程序发现,当数据量一大的时候,比如一个样本集合,随便的就有12*6750等等,在求这个矩阵的协方差与特征向量的时候,按照上一篇的介绍:

主成分分析-简单人脸识别(二)

使用到里面的Cell_all = PCA(img,k) 函数,会发现一般运行时间都会很久,其实正常在求取大矩阵的协方差特征值与特征向量的时候确实会很麻烦,但是从数学推导上可以发现存在着快速求解的方法。一个变换原理介绍如下:

主成分分析PCA(Principal Component Analysis)介绍

在其中的第二点上就是推导变换的过程,这个过程使得求取矩阵的特征向量变快了不少。

正常情况下我们说协方差ST  = E{(xi-u)*(xi-u)T}  = X'X'T   它是一个ST是(m*n*(m*n)阶的矩阵所以计算它的特征向量比较复杂但是左如下变换后:


可以看到要计算XTX的特征值和特征向量δivi,然后就可以计算出XXT 特征值和特征向量δiXvi,而XTXN*N阶的矩阵相比(m*n*m*n)阶矩阵来说小不少,计算起来比较容易

据此我们把以前的PCA程序改为如下:

function [img_new,V] = PCA(img,k)
%reshape函数:改变句矩阵的大小,矩阵的总元素个数不能变
% img = double(img);
% tic;
[m,n] = size(img);  %取大小
img_mean = mean(img); %求每列平均值
img_mean_all = repmat(img_mean,m,1);%复制m行平均值至整个矩阵
Z = img - img_mean_all;
T=Z*Z';  %协方差矩阵  
[V,D] = eigs(T,k);%计算T中最大的前k个特征值与特征向量
V=Z'*V;         %协方差矩阵的特征向量  
for i=1:k       %特征向量单位化  
    l=norm(V(:,i));  
    V(:,i)=V(:,i)/l;  
end  
img_new = Z*V;  %低维度下的各个脸的数据
% toc;

相比以前的变化可以看到,主要是对中间的改变了下,以前的程序是这样的:

function [img_new,V] = PCA(img,k)
%reshape函数:改变句矩阵的大小,矩阵的总元素个数不能变
%img = [1,2;2,1;3,3;3,6;6,3];
% k = 2;
% img = double(img);
tic;
[m,n] = size(img);  %取大小
img_mean = mean(img); %求每列平均值
img_mean_all = repmat(img_mean,m,1);%复制m行平均值至整个矩阵
Z = img - img_mean_all;
T = Z'*Z;%协方差矩阵    
[V,D] = eigs(T,k);%计算T中最大的前k个特征值与特征向量
img_new = Z*V;  %低维度下的各个脸的数据
toc;

可以看到区别主要在T=Z*Z'; T = Z'*Z;以及后面的一点内容,这就是上述原理的部分。为了比较两者性能到底差多少,这里分别使用改与未改的来观察,使用matlab计时器tictoc如下:

改之前:

>> [img_new,V] = PCA(ImgData,10);

时间已过 3.235867 秒。

改之后:

>> [img_new,V] = PCA(ImgData,10);

时间已过 0.012895 秒。

当后面的10变为50或者100,那么第一种方法求取的时间将会超过100多秒,等不住了。但是这个改变的前提是后面的k=10必须小于矩阵的行与列数,这就带来一个不足,比如如果来个样本集合为12*6750的时候,这个k最大只能是12了,也就是说最大只能降维到12,想在大一些就不可以了,但是第一种情况最大可以降维到6750维。也就是说改进的降维最大数为样本的数量(这里为12)。但是一般样本会很多,应该会超过你需要降维的维数。

    会想到这种快速改进的区别是看到一篇不同的博客,研究半天才知道

Matlab PCA+SVM人脸识别(一)


二)关于样本脸的重建

就这上面给的一篇博客中最后一点写到关于如何去重建的原始图像的程序,感觉有点明白且做了下,感觉挺有意思的。

运行人脸识别(二)中的程序

>>ImgData = imgdata();

导入人脸数据,出来ImgData12*6750的矩阵,运行改进的PCA程序,

>>[img_new,V] = PCA(ImgData,12);

这个时候最大只能降到12维了,不知道够不够,但是样本量就这么多,先这么着看看吧。得到降维后的矩阵与特征向量,假如这里来重建第一副图像,取

Img1 = img_new(1,:);

这里img1就变成了1*12的数列,假设就是[1 2 3 4 5 6 7 8 9 10 11 12];

想想这些数列是怎么来的?比如1就是原始样本矩阵乘以第一主成分特征向量所得,那么重构后就得包括是1*V1,同理重构后的数据也得包括2*V2,等等。

这样就可以把相应位置的数据累加起来就是原始样本在该位置的值。程序与显示如下:

[m,n] = size(ImgData);  %取大小
img_mean = mean(ImgData); %求每列平均值  1*6750
for i = 1:12
    img_mean = img_mean + img_new(1,i)*V(:,i)';
    B=reshape(img_mean,90,75);
    subplot(2,6,i);imshow(B,[]);
end

运行后的结果为:


照片显示从一次两次一直到12次的重建过程,效果是越来越好吧。



0
0
查看评论

降维——PCA(主成分分析)

降维技术使得我们可以用低维向量表示高维向量。PCA是降维技术的一种,它的思想是,把一个高维向量投影到低维子空间中,子空间基的选择原则是尽量使得投影前不同的向量在投影后依旧不同。接下来,我们就具体介绍PCA的工作原理。
  • l294265421
  • l294265421
  • 2016-09-15 00:25
  • 1505

特征抽取方式——主成分分析(Principal components analysis)

在这一篇之前的内容是《Factor Analysis》,由于非常理论,打算学完整个课程后再写。在写这篇之前,我阅读了PCA、SVD和LDA。这几个模型相近,却都有自己的特点。本篇打算先介绍PCA,至于他们之间的关系,只能是边学边体会了。PCA以前也叫做Principal factor analysi...
  • ivanyoung66
  • ivanyoung66
  • 2013-05-20 13:00
  • 900

主成分分析(PCA)原理详解

机器学习中有关特征选择的问题,其实就是要剔除和类标签无关的特征,去除噪声或者冗余。在这种情况下,需要一种特征降维的方法来减少特征数,减少噪音和冗余,减少过度拟合的可能性。PCA的思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征。这k维特征称为主成分,是重新构造出来的k维特征,而不...
  • zhongkelee
  • zhongkelee
  • 2015-03-04 19:40
  • 73336

主成分分析的计算方法

主成分分析(Principal Component Analysis,PCA),是通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。
  • zxd1754771465
  • zxd1754771465
  • 2017-06-19 15:40
  • 646

主成分分析PCA的数学原理

作者:张洋 PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中的原...
  • qq_26593881
  • qq_26593881
  • 2016-05-16 16:04
  • 1053

浅谈对主成分分析(PCA)算法的理解

以前对PCA算法有过一段时间的研究,但没整理成文章,最近项目又打算用到PCA算法,故趁热打铁整理下PCA算法的知识。本文观点旨在抛砖引玉,不是权威,更不能尽信,只是本人的一点体会。 主成分分析(PCA)是多元统计分析中用来分析数据的一种方法,它是用一种较少数量的特征对样本进行描述以达到降低特征...
  • passball
  • passball
  • 2014-04-18 17:45
  • 67840

机器学习---降维之PCA主成分分析法

机器学习之降维,PCA主成分分析法。
  • u011470552
  • u011470552
  • 2017-02-04 13:15
  • 1412

PCA主成分分析实现降维

转载于 一、简介         PCA(Principal Components Analysis)即主成分分析,是图像处理中经常用到的降维方法,大家知道,我们在处理有关数字图像处理方面的问题时,比如经常用的图像的查询问题,在一个几万或者几...
  • EThomas_CHS
  • EThomas_CHS
  • 2017-03-23 21:46
  • 355

主成分分析(PCA)算法的简单推导和实例

问题1:为什么要降维?    我们在处理实际问题的时候,进行特征提取过程中,提取的特征维数太多经常会导致特征匹配时过于复杂,消耗计算资源。   问题2:降维的方法有哪些? 特征降维一般分为两类:特征提取和特征抽取。特征选择就是简单的从高纬度的特征中选择其中一个子集来作为...
  • weixin_37824397
  • weixin_37824397
  • 2017-03-10 13:49
  • 1862

主成分分析法及特征值的含义

主成分分析法是一种非常适用,又相对简单的数据处理的方法。它是利用降维的方法,将数据表示的信息的主要成分提取出来,所以叫做主成分分析法。  从它的作用可以看出来,它的运用非常的广泛:  1. 显而易见,由于它可以提取主要的信息成分,所以它可以用来过滤掉信号的噪声。 2.它...
  • lucylove3943
  • lucylove3943
  • 2014-12-02 22:45
  • 9016
    个人资料
    • 访问:744453次
    • 积分:7681
    • 等级:
    • 排名:第3323名
    • 原创:94篇
    • 转载:4篇
    • 译文:27篇
    • 评论:749条
    个人简介
    武汉 华中科技大学; 关注:图像处理、计算机视觉、人工智能、机器学习等领域;
    微信公众号
    最新评论