PCA ,PCAWhitening ,ZCAWhitening

PCA ,PCAWhitening ,ZCAWhitening

白化的目的:

举例来说,假设训练数据是图像,由于图像中相邻像素之间具有很强的相关性,所以用于训练时输入是冗余的。白化的目的就是降低输入的冗余性;更正式的说,我们希望通过白化过程使得学习算法的输入具有如下性质:(i)特征之间相关性较低;(ii)所有特征具有相同的方差

一、Pca白化  PcaWhitening

(1)消除数据的相关性

介绍的主成分分析Pca中,通过转化矩阵U,把原始数据映射到新的数据上;即Xrot=U*X;原始数据X经过转换后,得到的新的矩阵Xrot的各个维数的数据之间的相关性已经被消除;Xrot的协方差矩阵为对角阵,即表示其各个数据维度间无相关性;

(2)所有特征具有相同的方差

为了使每个输入特征具有单位方差,我们可以直接使用作为缩放因子来缩放每个特征。

白化后数据现在的协方差矩阵为单位矩阵 I。我们说白化是数据经过PCA后在缩放的版本;白化后数据中不同的特征之间不相关并且具有单位方差。

二、Zca白化,ZcaWhitening

      最后要说明的是,使数据的协方差矩阵变为单位矩阵I的方式并不唯一。具体地,如果R是任意正交矩阵,即满足R*R'=I (说它正交不太严格, 可以是旋转或反射矩阵),那么经过R变换后的数据仍然具有单位协方差。在ZCA白化中,令R=U 。我们定义ZCA白化的结

果为:

可以证明,对所有可能的R,这种旋转使得Zca白化后的数据,尽可能地接近原始输入数据x。

三、正则化

实践中需要实现PCA白化或ZCA白化时,有时一些特征值在数值上接近于0,这样在缩放步骤时我们除以将导致除以一个接近0的值;这可能使数据上溢 (赋为大数值)或造成数值不稳定。因而在实践中,我们使用少量的正则化实现这个缩放过程,即在取平方根和倒数之前给特征值加上一个很小的常数:

当x在区间[-1,1]上时, 一般ε取值为 10-5。对图像来说, 这里加上ε,对输入图像也有一些平滑(或低通滤波)的作用。这样处理还能消除在图像的像素信息获取过程中产生的噪声,改善学习到的特征。

 

四:对图像应用主成分分析PCA on Images

为使PCA算法能有效工作,通常我们希望所有的特征都有相似的取值范围(并且均值接近于0)。如果你曾在其它应用中使用过PCA算法,你可能知道有必要单独对每个特征做预处理,即通过估算每个特征的均值和方差,而后将其取值范围规整化为零均值和单位方差。

在自然图像上进行训练时,对每一个像素单独估计均值和方差意义不大,因为(理论上)图像任一部分的统计性质都应该和其它部分相同,图像的这种特性被称作平稳性(stationarity)。具体而言,为使PCA算法正常工作,我们通常需要满足以下要求:

(1)特征的均值大致为0;

(2)不同特征的方差值彼此相似。

对于自然图片,即使不进行方差归一化操作,条件(2)也自然满足,故而我们不再进行任何方差归一化操作(对音频数据,如声谱,或文本数据,如词袋向量,我们通常也不进行方差归一化)。

实际上,PCA算法对输入数据具有缩放不变性,无论输入数据的值被如何放大(或缩小),返回的特征向量都不改变。更正式的说:如果将每个特征向量都乘以某个正数(即所有特征量被放大或缩小相同的倍数),PCA的输出特征向量都将不会发生变化。

既然我们不做方差归一化,唯一还需进行的规整化操作就是均值规整化,其目的是保证所有特征的均值都在0附近。根据应用,在大多数情况下,我们并不关注所输入图像的整体明亮程度。比如在对象识别任务中,图像的整体明亮程度并不会影响图像中存在的是什么物体。更为正式地说,我们对图像块的平均亮度值不感兴趣,所以可以减去这个值来进行均值规整化。

如果你处理的图像并非自然图像(比如,手写文字,或者白背景正中摆放单独物体),其他规整化操作就值得考虑了,而哪种做法最合适也取决于具体应用场合。但对自然图像而言,对每幅图像进行上述的零均值规整化,是默认而合理的处理。

 

PCA/Whitening部署

代码详解:

Step1:提取图片片段

x = sampleIMAGESRAW();

%1000个样本图片片段,每个片段有144个特征维度。

[m n]=size(x);

x=x-repmat(mean(x,1),m,1);

%分别对每个样本进行0均值处理。

Step2:主成分计算

xRot = zeros(size(x));

sigma=x*x'/n; %计算协方差矩阵

[u s v]=svd(sigma);%矩阵的svd分解,u为一个正交矩阵(矩阵的行和列,线性无关),每一列为一个特征向量,s为特征值矩阵,v为另一个正交矩阵;由于此处sigma为对称的协方差矩阵(对称的方阵)。所以此处u和v互为转制,即u=v’;

xRot=u'*x; %数据的变化,变换后,xRot无相关性。

 

Step3:主成分计算检验

covar = zeros(size(x, 1));%covar为相关系数矩阵

covar = (1./m)*xRot*xRot';%计算相关系数矩阵

figure('name','Visualisation of covariance matrix');

imagesc(covar);%imagesc函数可以可视化相关系数矩阵,主对角线以外的矩阵区域为0,对应蓝色;主对角线上,为一套从上到下逐渐变暗的斜线;特征值逐渐减小

 

Step4:提取主成分

k = 0;

ss = diag(s);%把特征值矩阵,向量化

k = length(ss((cumsum(ss)/sum(ss))<=0.99)); 

注释:

%其中cumsum(ss)求出的是一个累积向量,也就是说ss向量值的累加值

>> a=[1 2 3 4 5];

>> cumsum(a)=1     3    6    10    15

%(cumsum(a)/sum(a))<=0.6 ;一个向量,值为0或者1的向量,为1表示该元素满足条件,值为0表示不满足这个条件。

>> (cumsum(a)/sum(a))<=0.6=1     1    1     0     0

>> b=a((cumsum(a)/sum(a))<=0.6)=1     2    3

xHat = zeros(size(x)); 

xHat = u*[u(:,1:k)'*x;zeros(m-k,n)]; %提取前k个主成分

 

Step5:PCAWhitening

epsilon = 0.1;%正则系数

xPCAWhite = zeros(size(x));

xPCAWhite = diag(1./sqrt(diag(s)+epsilon))*u'*x; %方差归一化

 

Step6:ZCAWhitening

xZCAWhite = u*xPCAWhite;

 

结果分析,源码:http://www.cnblogs.com/tornadomeet/archive/2013/03/22/2975456.html

Andrew ng 教程:http://deeplearning.stanford.edu/wiki/index.php/Exercise:PCA_and_Whitening

posted @ 2015-11-14 16:02  菜鸡一枚  阅读(594)  评论(0编辑  收藏  举报