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

PCA

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

对于降维的一个直观理解如下图所示:

原始图像中数据是二维的,但是明显看出数据是近似于某种线性结构的。PCA可以将数据投影到一个一维子空间上。

定义矩阵:

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

\begin{align} \Sigma = \frac{1}{m} \sum_{i=1}^m (x^{(i)})(x^{(i)})^T. \end{align}
如果x的均值为0,则Σ就是x的协方差矩阵。
记Σ的特征向量为u1和u2,u1对应的特征值较大
http://cs229.stanford.edu/notes/cs229-notes10.pdf 有具体推导

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

xrot=UTx=[uT1xuT2x]

\begin{align} x_{\rm rot} = U^Tx = \begin{bmatrix} u_1^Tx \\ u_2^Tx \end{bmatrix} \end{align}

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

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

∑kj=1λj∑nj=1λj.

\begin{align} \frac{\sum_{j=1}^k \lambda_j}{\sum_{j=1}^n \lambda_j}. \end{align}
用来表示保留的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是正交阵,也就是,那么协方差矩阵也为I,
在ZCA白化中,我们选择R=U,定义

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

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

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

\begin{align} x_{\rm PCAwhite,i} = \frac{x_{\rm rot,i} }{\sqrt{\lambda_i + \epsilon}}. \end{align}

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

PCA Whitening ZCA Whitening相关推荐

  1. 白化(Whitening): PCA 与 ZCA (转)

    转自:findbill 本文讨论白化(Whitening),以及白化与 PCA(Principal Component Analysis) 和 ZCA(Zero-phase Component Ana ...

  2. 白化(Whitening): PCA白化 ZCA白化

    白化的目的: 白化是一种重要的预处理过程,其目的就是降低输入数据的冗余性,使得经过白化处理的输入数据具有如下性质: (i) 特征之间相关性较低,使数据的不同维度去相关: (ii) 所有特征具有相同的方 ...

  3. 深度学习入门教程UFLDL学习实验笔记三:主成分分析PCA与白化whitening

     深度学习入门教程UFLDL学习实验笔记三:主成分分析PCA与白化whitening 主成分分析与白化是在做深度学习训练时最常见的两种预处理的方法,主成分分析是一种我们用的很多的降维的一种手段,通 ...

  4. 白化Whitening

    白化操作的目的是让我们的减少冗余信息,准确来说通过白化操作我们有两个目的: 每个特征之间关联性更少 每个特征有相同的方差 对于第一个目的来说,我们可以通过熟悉的PCA来实现. PCA Principa ...

  5. 数据预处理之白化(Whitening transformation)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接: https://blog.csdn.net/hjimce/article/deta ...

  6. 浅谈白化(Whitening) 、PCA白化、ZCA白化

    白化 本节讨论白化(Whitening),以及白化与 PCA(Principal Component Analysis) 和 ZCA(Zero-phase Component Analysis) 的关 ...

  7. 白化(whitening)是什么?白化(whitening)与PCA(principle component analysis)的区别是什么?

    白化(whitening)是什么?白化(whitening)与PCA(principle component analysis)的区别是什么? 白化是一种重要的预处理过程,其目的就是降低输入数据的冗余 ...

  8. Deep learning:十一(PCA和whitening在二维数据中的练习)

    前言: 这节主要是练习下PCA,PCA Whitening以及ZCA Whitening在2D数据上的使用,2D的数据集是45个数据点,每个数据点是2维的.参考的资料是:Exercise:PCA in ...

  9. UFLDL教程:Exercise:PCA in 2D PCA and Whitening

    相关文章 PCA的原理及MATLAB实现 UFLDL教程:Exercise:PCA in 2D & PCA and Whitening python-A comparison of vario ...

最新文章

  1. matlab messagebox函数,[MATLAB]在C#中引用MATLAB函数
  2. jlink烧写Nor Flash时出错正确解决方法汇总:PC of target system has unexpected value after programming (2011
  3. 体验Spring的“依赖注入”的优点
  4. LeetCode Valid Sudoku
  5. mac懒人版_这些实用的Mac软件你迟早会用到,建议收藏!
  6. 5 CO配置-控制-一般控制-维护成本控制范围
  7. 【Elasticsearch】es 的配置集合
  8. ELF(Executable Linkable Format)文件存储格式
  9. 在VS 2010中查询和导航代码
  10. 金蝶ERP实现产品入库及委外加工冲减生产现场虚仓毛坯数(修正版07-05-10)
  11. ANSYS win10家庭版安装经验:
  12. 学英语尽量不要从背词汇表开始
  13. CSYZDay2模拟题解
  14. 栅栏CyclicBarrier
  15. springboot 实现长链接转短链接
  16. 辨别DVI接口连接线三种类型五种规格
  17. C++的类继承与类模板
  18. 理解杀毒软件的意义(完整---另加补充和总结)
  19. 用计算机弹123我爱你数字,数字谐音
  20. java sfc模拟器_Higan(sfc超精准模拟器)

热门文章

  1. php7序列化,PHP内核层解析反序列化漏洞
  2. 腾讯-算法工程师电话面试
  3. QComboBox样式设置——Qt
  4. 教你用PS制作创意分割海报,让海报更有新意
  5. 杂记-CredentialProvider(翻译)
  6. 文件上传个人bypass总结
  7. 极地旅行社[LCT]
  8. 钉钉消息会话管理,给钉钉传一个url的连接会话传递多个参数的问题
  9. Focusky教程 | 为什么导入PPT后有的图片没有显示?
  10. 如何在MathType中输入摄氏度符号