DL四(预处理:主成分分析与白化 Preprocessing PCA and Whitening ) - robert_ai - 博客园

深度学习之8——数据预处理 - 知乎

深度学习中的白化预处理_Sirius_0的博客-CSDN博客

白化(Whitening):PCA vs. ZCA - Lee的白板报的个人空间 - OSCHINA - 中文开源技术交流社区

白化(预处理步骤)【转】 - osc_f1tgjw6d的个人空间 - OSCHINA - 中文开源技术交流社区

[转载]什么是白化(whitening)?

一、相关理论

1.1 白化介绍

白化(whitening)这个词,可能在深度学习领域比较常遇到,挺起来就是高大上的名词,然而其实白化是一个比PCA(Principal component analysis)稍微高级一点的算法而已,所以如果熟悉PCA,那么其实会发现这是一个非常简单的算法。

1.2 白化目的

白化的目的是去除输入数据的冗余信息。假设训练数据是图像,由于图像中相邻像素之间具有很强的相关性,所以用于训练时输入是冗余的;白化的目的就是降低输入的冗余性。

1.3 白化的性质

输入数据集 X X X,经过白化处理后,新的数据 X ′ X' X′满足两个性质:

  • 特征之间相关性较低(个人理解:输入的数据自动已经把纠缠解除)
  • 所有特征具有相同的方差(个人理解:为了在每个特征上都有比较均匀的分布)

1.4 白化 VS PCA

其实我们之前学的PCA算法中,可能PCA给我们的印象是一般用于降维操作。然而其实PCA如果不降维,而是仅仅使用PCA求出特征向量(特征向量必定是不相关的),然后把数据 X X X映射到新的特征空间,这样的一个映射过程,其实就是满足了我们白化的第一个性质:映射过程中除去特征之间的相关性。因此白化算法的实现过程,第一步操作就是PCA,求出新特征空间中的新坐标,然后再对新的坐标进行方差归一化操作。

二、算法概述

白化分为PCA白化、ZCA白化,下面主要讲解算法实现。这部分主要是学了UFLDL的深度学习《白化》教程。自己的一点概括总结,算法实现步骤如下:

1、PCA预处理

image-20210117105315781

上面图片,左图表示原始数据 X X X,对应坐标我们假设为 ( x 1 , x 2 ) (x_1,x_2) (x1​,x2​)然后我们通过协方差矩阵可以求得特征向量 u 1 ⃗ \vec{u_1} u1​ ​、 u 2 ⃗ \vec{u_2} u2​ ​,然后把每个数据点,投影到这两个新的特征向量,得到坐标 ( x r o t , 1 , x r o t , 2 ) (x_{rot,1},x_{rot,2}) (xrot,1​,xrot,2​)如下:

x rot  ( i ) = U T x ( i ) x_{\text {rot }}^{(i)}=U^{T} x^{(i)} xrot (i)​=UTx(i)
( x r o t , 1 x r o t , 2 ) = ( u 1 ⃗ u 2 ⃗ ) T ( x 1 x 2 ) \left(\begin{matrix}x_{rot,1}\\x_{rot,2}\end{matrix}\right)=\left(\begin{matrix}\vec{u_1}\\\vec{u_2}\end{matrix}\right)^T\left(\begin{matrix}x_{1}\\x_{2}\end{matrix}\right) (xrot,1​xrot,2​​)=(u1​ ​u2​ ​​)T(x1​x2​​)

image-20210117111637323

这就是所谓的PCA处理。

2、PCA白化

所谓的PCA白化是指对上面的PCA的新坐标,每一维的特征做一个标准差归一化处理。因为从上面我们看到在新的坐标空间中, ( x r o t , 1 , x r o t , 2 ) (x_{rot,1},x_{rot,2}) (xrot,1​,xrot,2​)两个坐标轴方向的数据明显标准差不同,因此我们接着要对新的每一维坐标做一个标注差归一化处理:
X PCAwhite  ′ ′ = X ′ std ⁡ ( X ′ ) X_{\text {PCAwhite }}^{\prime \prime}=\frac{X^{\prime}}{\operatorname{std}\left(X^{\prime}\right)} XPCAwhite ′′​=std(X′)X′​
当然你也可以采用下面的公式:
X PCAwhite  ′ ′ = X ′ λ i + ε X_{\text {PCAwhite }}^{\prime \prime}=\frac{X^{\prime}}{\sqrt{\lambda_{i}+\varepsilon}} XPCAwhite ′′​=λi​+ε ​X′​
X ′ X' X′为经过PCA处理的新PCA坐标空间,然后 λ i \lambda_i λi​就是第 i i i维特征对应的特征值(前面PCA得到的特征值), ε \varepsilon ε是为了避免除数为0。

img

3、ZCA白化

ZCA白化是在PCA白化的基础上,又进行处理的一个操作。具体的实现是把上面PCA白化的结果,又变换到原来坐标系下的坐标:

img

给人的感觉就像是在PCA空间做了处理完后,然后又把它变换到原始的数据空间。

image-20210117111402543

一些个人的想法

主要的问题就是跟直接进行归一化有什么不同

白化也有归一化的操作,只是它是对PCA投影之后坐标的归一化, 多了一个PCA投影的操作,这所带来的是坐标系的变换,可以理解为先变换到通过特征向量作为基底的坐标系,在此坐标系下进行之后的举出均值和方差的操作。

这样可以带来的效果其实是,因为变换到互相不相关的特征向量的基底之后,原始坐标被更加有特征的基底表示出来,那么在这个基底上投影的长度就反应为他的坐标,这个坐标在进行归一化就会变得更加离散均匀,不同分布。

举个例子假设原始坐标是在 X − Y X-Y X−Y域的,虽然 X − Y X-Y X−Y一定是不相关的,但是对于一个特征向量不是 X X X方向和 Y Y Y方向的分布来说,并不能在他的特征向量上进行投影长度也就是坐标域的万卷举出均值和方差归一。

LAST、参考文献:

机器学习(七)白化whitening_hjimce的专栏-CSDN博客

更多推荐