【DeepCV】白化 whitening

Backto DeepCV


之前说过 PCA, PCA 构建新的特征(主成分),除去特征之间的相关性(正交)。whitening 就是在 PCA 的基础上,再进一步,使得所有的特征都具有相同的方差(normalization)。Normalization 的方式,当然还是通用的,除以标准差。

Step 0: 原始输入

在这里插入图片描述

Step 1: find PCs

在这里插入图片描述

Step 2: Apply PCA, transformation

在这里插入图片描述

Step 3: PCA whitening

好了,上 Normalization, X p w = X V a r ( X ) X''_{p-w} = \frac{X'}{\sqrt{Var(X')}} , 但是在 PCA 中呢,特殊地,实际运算中就是 X p w = X λ i + ϵ X''_{p-w} = \frac{X'}{\sqrt{\lambda_i + \epsilon}} 。然后 λ i λ_i 就是第 i i 维特征对应的特征值(前面pca得到的特征值), ϵ \epsilon 是为了避免除数为0。
在这里插入图片描述

Extra Step 4: ZCA whitening

在 PCA whitening 之上,还可以再进一步操作 – ZCA. PCA 把数据映射到新的特征空间里,ZCA 再变回到原始的空间里: Y z w = U Y p w Y'''_{z-w} = U*Y''_{p-w} . U 呢还是 SVD 分解的那个 U。

在这里插入图片描述

ZCA Whitening code:

def zca_whitening(inputs):
    sigma = np.dot(inputs, inputs.T)/inputs.shape[1] #inputs是经过归一化处理的,所以这边就相当于计算协方差矩阵
    U,S,V = np.linalg.svd(sigma) #奇异分解
    epsilon = 0.1                #白化的时候,防止除数为0
    ZCAMatrix = np.dot(np.dot(U, np.diag(1.0/np.sqrt(np.diag(S) + epsilon))), U.T)                     #计算zca白化矩阵
    return np.dot(ZCAMatrix, inputs)   #白化变换

Ref

猜你喜欢

转载自blog.csdn.net/baishuo8/article/details/88818084