浅谈PCA到PCANet

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Anysky___/article/details/51044670

最近一直在看关于PCA有关的东西,PCA是最常用的线性子空间方法,常常用来进行特征提取,其本质是一个降维的过程,自从一篇文章《PCANet: A Simple Deep Learning Baseline for Image Classification》的发表,为大家提供新的研究思路。

一、主成分分析PCA

  在谈PCA之前,先来看看协方差矩阵的内容。

  在统计学的基本概念里,首先有一个含有n个样本的集合,则样本的均值、方差、标准差的计算公式如下:

  至于为什么是除以n-1,则是出于无偏估计,即能使我们以较小的样本集更好地逼近总体的标准差。这是一维的情况,如果在二维情况下,方差就变为了协方差,描述的是两个向量X和Y之间的相关性:

  但如果是高维情况呢?如X,Y,Z,这时就需要协方差矩阵来描述,它描述的是各维度之间的相关性。

  主成分分析设法将原来变量重新组合成一组新的互相无关的几个综合变量,同时根据实际需要从中可以取出几个较少的综合变量尽可能多地反映原来变量的信息,也是数学上用来降维的一种方法。在数学的角度来看,它实际只是一种映射:

其中x是原始数据,y是映射后的向量,w即映射矩阵,这里是x的协方差矩阵的特征向量,通常取前K个特征值所对应的特征向量。以一个含有10个样本的X矩阵为例,其中每个样本Xi都是50*1的列向量,其算法的计算步骤如下:

  (1)特征中心化:即每一维的样本都减去它的均值,此时X仍为50*10的矩阵

  (2)计算中心化后的协方差矩阵,得到矩阵C为50*50

  (3)计算C的特征值和特征矩阵:[V,D]=eig(C)

  (4)选取前K个特征值,构造映射矩阵。

这里有两点需要注意:

【注】1.在有些文章中对于协方差矩阵的求法有不同表述,C也被表述为X的转置乘以X,这里我做如下解释,假如在样本矩阵中,每一列代表一个样本,即50*10,则根据

的计算公式,得到C为50*50的协方差矩阵,则C的特征向量为50*1,再根据

得到符合的y为1*10;但假如在样本矩阵中,每一行代表一个样本,即10*50,则应根据

的计算公式,得到C为50*50的协方差矩阵,则C的特征向量为50*1,再根据

得到符合的y为10*1;即根据样本的排列顺序不同,协方差矩阵的求法不同。

   2.在假设K=1的情况下,假设输入样本为50*10,输出却为1*10,即降维的程度是1/50,其降维的程度与样本的维度与选取的特征向量个数有关。

二、Deep PCA

  在文章《Face Recognition Using Deep PCA》中提出了一种Deep PCA,实际是一种PCA的级联,即两层PCA,模型中利用第一层产生的信息再送入产生一个新的不同的表述,使之更具有识别力;为了去除数据间的相关性,模型在每层PCA前加入ZCA白化,其结构如图所示:

  从图中可以看出,原始数据经过第一层PCA,得到第一层的特征w1,再进入第二层的PCA,得到第二层的特征w2,最终两层的特征融合得到最终的分类结果。其大致算法如下

  (1)ZCA白化:ZCA白化的过程实际是去相关性的过程,它实际也是利用特征中心化后的协方差矩阵的特征向量来实现的,只是相比PCA白化,它更接近原始数据。

  (2)特征提取:特征提取的过程实际就是实现两层PCA的过程

   其中Z1和Z2分别是两层PCA的输出,f函数代表白化处理后的结果。Z2充分利用了第一层的表达去提取新的特征,如此,在对整体图像的把握上每一层都有新的不同的表达。

  (3)特征融合:Deep PCA将第一层和第二层的特征融合后作为提取到的特征,但只是进行了简单的级联,

  在我看来,有这样一个问题,由于Z2是根据Z1提取出来的,两者必然存在关联,或者说这样直接融合肯定会有数据冗余的存在,数据冗余的存在是否会影响性能?实际上不会,因为研究表明,对于多层网络结构而言,每层的特征均具有不同的意义,浅层信息更多的是表现的是图像的整体特证,而深层信息更多的表现的是图像的纹理特征,或者说是抽象信息。

三、 PCANet 

  到这里才到了这篇博客的重点:PCANet,来源于文献《PCANet: A Simple Deep Learning Baseline for Image Classification》?,在这篇文章中提出了一个用于图像分类的简单深度学习网络:PCANet。在这个框架中,首先通过PCA方法来学习多层滤波器核,然后使用二值化哈希编码以及块直方图特征来进行下采样和编码操作。相比于Deep PCA,虽然两个都是 PCA方法的两层级联,但效果已然大不同。

  (1)Deep PCA的每层滤波器核(映射核)只有一个,而PCANet有多个在文章中取L1=L2=8;即每层都是8个滤波核,最终对于每个样本会有64个表述,这也是导致PCANet的特征输出高达几十万维的原因之一。

  (2)Deep PCA在预处理时对图像进行白化处理,在输出时进行层间融合,这都是PCANet没有的内容;PCANet直接把第二层的输出送到输出模块,即使用二值化哈希编码以及块直方图特征来进行下采样和编码操作。

  (3)PCANet在进行数据采集时,虽也是直接对像素进行操作,但加入了块采样的操作,这样做有两个好处,一是加入了像素的邻域信息;二是升维,PCA方法不可避免的一个效果就是降维,然而PCANet在效果上并没有表现降维,反而数据增多了,而有用的数据越大,越利于分类。

  下面介绍的PCANet网络结构预算实现,其结构如下:

  这里代码以中设置的PCANet参数来解说这个结构。

  (1)预处理:预处理的过程就是块采样的过程,令输入的第i张图片为Ii,然后进行块采样,采样块大小设置为7*7,对每一个像素进行块采样,进行特征中心化后,得到第i张图片的输入数据:

   若m=n=64,在程序中显示为49*4064的矩阵。则总体的样本矩阵表示为

  (2)特征提取:特征提取的过程就是主成分分析的过程。包括求取协方差矩阵(49*49),选取前L1个特征值和特征向量。在这里L1=8是滤波器的数量,对应的PCA滤波器表示如下:

  这个方程的含义就是提取X的协方差矩阵的前L1个最大特征值对应的特征向量来组成特征映射矩阵。这里区别于Deep PCA的一点是没有将所有特征向量组合起来构成特征矩阵,而是单个重构成特征映射矩阵,因此这里会有8个滤波器,而不是一个。对于每一层的输出,采用了图像卷积的概念。对于每一幅图像来说,均有8个输出。

  在这里需要注意卷积之前要对样本进行边缘补0操作,以保证卷积前后样本大小相同,都是49*4096。第二层的结构与第一层完全相同,第二层的滤波器数L2=8

  第二层的输出后对应每个图像有64的表述。

  (3)输出层:输出层首先对输出矩阵进行二值化处理,使其只包含1和0;在此基础再进行哈希编码 ,使每个像素值都变为0-255之间的一个数,量化并加大各特征的差异。

  之后对于第一层的每个输出矩阵(8*N),将其分为B块,计算统计每个块的直方图信息,然后在将各个块的直方图特征进行级联,最终得到块扩展直方图特征:

  以上就是所有PCANet的内容,PCANet中不但没有降维,反而升维,输出数据达到几十万维,即使用最简单的k近邻分类器,也能达到较好的效果,这正是其强大之处。

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值