机器学习系列(8):主成分分析(PCA)及白化(ZCA)

主成分分析(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

3. 协方差矩阵 以及 百科协方差

4. 特征值分解

5. tornadomeet之PCA(简单,清晰)

6. Alex 的博文,科普PCA,角度很新颖 (值得看!)

 

你可能感兴趣的:(基础算法,机器学习)