PCA Whitening ZCA Whitening

来源:互联网 发布:暴风影音mac无法播放字幕 编辑:程序博客网 时间:2024/05/21 10:59

本篇文章主要内容来自于Andrew的书,链接为http://ufldl.stanford.edu/tutorial/unsupervised/PCAWhitening/

PCA

PCA也就是主成分分析,是用来降维的一种手段,它可以显著地提高算法的运行速度。
当你在处理图像的时候,输入通常是冗余的,这是因为图像中相邻的像素点往往是关联的,PCA可以用来将图像的原始输入近似为一个更低维度的输入,并且保证误差较小。

对于降维的一个直观理解如下图所示:
这里写图片描述
原始图像中数据是二维的,但是明显看出数据是近似于某种线性结构的。PCA可以将数据投影到一个一维子空间上。
这里写图片描述
定义矩阵:

Σ=1mi=1m(x(i))(x(i))T.

如果x的均值为0,则Σ就是x的协方差矩阵。
记Σ的特征向量为u1和u2,u1对应的特征值较大
http://cs229.stanford.edu/notes/cs229-notes10.pdf 有具体推导

对于各个维度上均值为0方差相等的输入x,首先计算Σ,之后将其特征向量存储在矩阵U中,需要注意的是U是正交阵。
我们可以将原始向量x进行旋转,得到

xrot=UTx=[uT1xuT2x]

这里写图片描述
如果我们想要将x降到k个维度,那么我们就选取Xrot的前k个元素。
我们同样可以利用矩阵U将降维后的数据进行还原。
这里写图片描述

那么,我们如何确定应该保留多少个元素呢?如果k太大,那么降维的程度很小,如果k太小,那么可能损失了大量的细节。这里给了一个指标

kj=1λjnj=1λj.

用来表示保留的variance程度。
对于图像来说,通常保留99%,有时也会保留90-98%.


图像上的PCA

如果在其他应用上采用PCA,那么你可能需要对每个特征分别处理,将各个特征的均值处理为0,方差为单位值,但是在图像上通常不这么做。

对于自然图像而言,对每一个像素单独估计均值和方差意义不大,这是因为图像上一部分的统计特性通常和其他部分类似(stationarity)。

为了使PCA较好地工作,我们需要两方面:

  1. 特征均值近似为0
  2. 不同的特征方差与其他特征类似

对于图像而言,即使我们不做方差归一化,第二条也可以满足。因此,我们通常不会做方差归一化处理(音频频谱,文本(BOW)也不做)
实际上,PCA返回的特征向量不随数据的缩放而变化。
我们所需要做的事情是均值归一化,
这里写图片描述
这里写图片描述
需要注意的是,对每个图像, 我们需要单独做以上两步。
如果你要处理其他的图片(非自然图片,如手写字,背景为白中里面有个单独的物体等),可能要采用其他的normalization


Whitening

白化的目的是:

  1. 特征相互之间的关联很小
  2. 特征有相同的方差

我们之前通过计算这里写图片描述使得特征间关系很小
这里写图片描述
计算得到的协方差矩阵为
这里写图片描述
对角两个值其实就是特征值。
为了使特征的方差为单位值,我们可以对特征进行缩放,得到白化后的值
这里写图片描述

这里写图片描述
这是,协方差矩阵为单位矩阵I。
如果你想要数据白化且维度比原始维度要小,那么你可以只保留这里写图片描述的前k个元素。当我们把PCA whitening和正则化结合时,这里写图片描述的后几个元素接近为0,可以去掉。


ZCA Whitening

实际上,这种使数据协方差矩阵为I的处理方法并不唯一,如果R是正交阵,也就是\textstyle RR^T = R^TR = I,那么这里写图片描述协方差矩阵也为I,
在ZCA白化中,我们选择R=U,定义
\textstyle R ,x_{\rm PCAwhite}

这里写图片描述

对于所有可能的R,这种旋转使得XzCAwhite尽可能接近原始输入数据x
当使用ZCA白化时,我们通常保留数据的全部n个维度,不去降维。

在实际使用PCA或者ZCA时,有一些特征值λ接近0,而我们在normalization时需要除以这里写图片描述,会使得数据不稳定。因此,我们通常会做一点regularization,也就是取一个很小的常数ε,通常为这里写图片描述

xPCAwhite,i=xrot,iλi+ϵ.

对于图像来说,添加ε可以轻微的对输入进行平滑,还可以减少一些像素的走样,可以提高学习的效果。
ZCA将数据从X映射到XzCAwhite,其实也是生物上眼睛处理图像的近似过程。