主成分分析(PCA)是一种数据降维算法。白化主要是降低输入特征的冗余性。
假设X 是m*n的矩阵,由n个样本(m维特征)组成。现要对X 进行线性变换为另一个矩阵Y,使得Y消除了X各特征的相关性,即Y的协方差矩阵为对角矩阵(YY'为对角矩阵)。
X变换到Y的线性变换公式为:
Y=PX (1)
则,
YY’=PX(PX)’=PXX’P’ (2)
对XX’进行特征值分解,则
XX’=QDQ-1 (3)
(Q为XX’的特征矩阵,D为特征值对角矩阵)
然而(XX’)’=XX’,则
XX’是对称矩阵,且Q为正交矩阵,即Q’= Q-1,或者QQ’=E
综合:
YY’=PQDQ’P’=PQD(PQ)’
If P=Q-1,
PQ=E
则 YY’=D
总之,
Y=Q-1X=Q’X
如果对Y进行白化操作,则Y的协方差矩阵就为单位矩阵。
例如,特征值λ1 ,λ2…λn , 白化操作即相当1/λi (i=1-n).
function [V,E,D] = pca(X)
% do PCA on image patches
%
% INPUT variables:
% X matrix with image patches as columns
%
% OUTPUT variables:
% V whitening matrix
% E principal component transformation (orthogonal)
% D variances of the principal components
% Calculate the eigenvalues and eigenvectors of the new covariance matrix.
covarianceMatrix = X*X'/size(X,2);
[E, D] = eig(covarianceMatrix);
% Sort the eigenvalues and recompute matrices
[dummy,order] = sort(diag(-D));
E = E(:,order);
d = diag(D);
dsqrtinv = real(d.^(-0.5));
Dsqrtinv = diag(dsqrtinv(order));
D = diag(d(order));
V = Dsqrtinv*E';
参考:
1. UFLDL之PCA
2. UFLDL之ZCA
4. 特征值分解
5. tornadomeet之PCA(简单,清晰)
6. Alex 的博文,科普PCA,角度很新颖 (值得看!)