1、介紹
這篇博客主要介紹如何白化(Whiten)符合正態分佈的數據。在許多數據處理技術(如主成分分析、獨立成分分析)之前,必須進行數據白化。
我們將一個d維均值爲$\mu$,協方差矩陣爲$\Sigma$的高斯隨機變量$X$($X \in R^d$)的概率密度函數表示爲
2、白化變換(Whitening Transform)
對於均值向量爲$\mu$, 協方差矩陣爲$\Sigma$的多元高斯隨機變量$X$,我們想要將其變換成另一個隨機變量,它的協方差矩陣爲單位陣。這表明我們新的隨機變量的各個成分是不相關的,並且方差爲1.這個變換的過程成爲白化。這個過程可以分解成兩個步驟:1、對$X$的各個成分進行去相關。產生的數據可以看成是從一個協方差矩陣爲對角陣的分佈得到的。2、我們必須對各個成分進行縮放(scale),使其方差爲1.
出於多種原因,強制統計獨立性很有用。例如,在存在於多個維度的數據的概率模型中,當維度在統計上獨立時,聯合分佈(可能非常複雜且難以描述)可以分解爲許多更簡單分佈的乘積。強制所有尺寸具有單位方差也很有用。例如,縮放所有變量以使其具有相同的方差將對每個維度都具有同等重要性。
假如我們有數據矩陣$X$, 由n個K維的觀測值組成($X \in R^{K \times n}$), 並且$X$已經中心化($X$的每一行已經減去其均值).協方差矩陣爲
$\Sigma = Cov(X) = \mathbb E[X X^T]$
其中\mathbb E[X X^T] \approx \frac{X X^T}{n}
顯然,協方差矩陣$\Sigma$是對稱正定的(直接用定義可證明)。我們對協方差矩陣進行特徵值分解
$\Sigma = \Phi\Lambda{\Phi}^{-1}$
其中$\Lambda$是$\Sigma$特徵值組成的對角陣,$\Phi$的第i列向量是$\Lambda$從左上到右下第i個特徵值對應的特徵向量。另外$\Phi$的列向量是正交的,因此
${\Phi}^{-1} = {\Phi}^{T}$
我們令$Y={\Phi}^{T}X$,由於
這表明,我們可以通過左乘協方差矩陣對應特徵向量組成矩陣的轉置將$X$變換成不相關的變量。
令$W=\Lambda^{-\frac{1}{2}Y=\Lambda^{-\frac{1}{2}\Phi^TX$, 由於
表明此時的W就是白化後的數據,即對原始數據先左乘協方差矩陣特徵向量組成的矩陣進行去相關操作,再在左乘特徵值對角陣的開根進行縮放(scale)操作。
3、例子
(matlab)
1 n = 1000; 2 convx = [10,-6;-6,5]; 3 mu = [0,0]; 4 5 S = mvnrnd(mu,convx,n)'; % 產生(2,1000)的樣本 6 7 [phi, lam] = eig(convx); % 特徵值分解,phi每一列是一個基向量 8 9 Y = phi' * S; %decorrelate 10 11 W = sqrt(lam) \ Y; %scale 12 13 figure; 14 subplot(131); 15 plot(S(1,:), S(2,:),'b.'); 16 axis square, grid 17 xlim([-10 10]);ylim([-10 10]); 18 title('original data'); 19 subplot(132); 20 plot(Y(1,:), Y(2,:),'b.'); 21 axis square, grid 22 xlim([-10 10]);ylim([-10 10]); 23 title('decorrelated data'); 24 subplot(133); 25 plot(W(1,:), W(2,:),'b.'); 26 axis square, grid 27 xlim([-10 10]);ylim([-10 10]); 28 title('whiten');
得到的圖:
4、色彩化變換(Coloring transform)
色彩化變換是白化變換的逆變換,假設有數據矩陣$W$, 由n個K維的觀測值組成($W \in R^{K \times n}$), W各列的向量各維是獨立同分布的,單位方差。我們要將其變換爲制定具有一定均值$\mu_1$和協方差矩陣$\Sigma_1$的高斯變量X。
對協方差矩陣進行特徵值分解:$\Sigma_1 = \Phi\Lambda{\Phi}^{-1}$。
同理:
$X=\PhiY=\Phi\Lambda^{\frac{1}{2}W$
結合白化和色彩化變換,將白化後的數據,經過色彩化變換到符合另一分佈的數據。
5、例子:
1 clc;clear all;close all; 2 n = 1000; 3 convx = [10,-6;-6,5]; 4 mu = [0,0]'; 5 6 S = mvnrnd(mu,convx,n)'; 7 [phi, lam] = eig(convx); 8 9 Y = phi' * S; 10 11 W = sqrt(lam) \ Y; 12 13 mu1 = [3, 3]; 14 conv = [1, 0.9;0.9, 3]; 15 [p, l] = eig(conv); 16 Y_1 = sqrt(l) * W; 17 18 S_ = p * Y_1; 19 S_r = S_ + mu1'; 20 21 figure; 22 subplot(151); 23 plot(S(1,:), S(2,:),'b.'); 24 axis square, grid 25 xlim([-10 10]);ylim([-10 10]); 26 title('original data'); 27 subplot(152); 28 plot(Y(1,:), Y(2,:),'b.'); 29 axis square, grid 30 xlim([-10 10]);ylim([-10 10]); 31 title('decorrelated data'); 32 subplot(153); 33 plot(W(1,:), W(2,:),'b.'); 34 axis square, grid 35 xlim([-10 10]);ylim([-10 10]); 36 title('whiten'); 37 subplot(154); 38 plot(Y_1(1,:), Y_1(2,:),'b.'); 39 axis square, grid 40 xlim([-10 10]);ylim([-10 10]); 41 title('scaled Y'); 42 subplot(155); 43 plot(S_r(1,:), S_r(2,:),'b.'); 44 axis square, grid 45 xlim([-10 10]);ylim([-10 10]); 46 title('colored X');
參考文獻:
1、https://theclevermachine.wordpress.com/2013/03/30/the-statistical-whitening-transform/
3、http://sofasofa.io/forum_main_post.php?postid=1003324
4、https://stats.stackexchange.com/questions/326587/whitening-decorrelation-why-does-it-work
5、https://hadrienj.github.io/posts/Preprocessing-for-deep-learning/