UFLDL之PCA与白化

参考资料:UFLDL教程tornadomeet的博客
个人代码:github地址

主成份分析与白化

PCA

1、PCA部分在Andrew Ng的Coursera公开课笔记中有涉及,链接点这里
2、由PCA部分,我们知道:

sigma = x * x' / m;
[U,S,V] = svd(sigma);
xRot = U'* x;
xTilde = U(:, 1:k)' * x;

选取U的前k个特征向量,转置后与x进行运算就可以得到PCA分析的结果了。白化是在此基础上进一步的预处理步骤。白化的目的是减少输入的冗余性,即降低特征之间的相关性并使所有特征具有相同的方差。
实际上,选取特征向量对x进行映射已经消除了不同特征之间的相关性,而方差相同可以通过特征值开根号作为缩放因子来实现,即:(x_{PCAwhite,i} = frac{x_{rot,i}}{sqrt{lambda + varepsilon}}),其中(varepsilon)是为了防止特征值过小而导致得到的结果太大,因此(varepsilon)一般取得很小。此时,U接近于单位矩阵。

ZCA

ZCA白化是:(x_{ZCAwhite} = R*x_{PCAwhite}),其中(R)必须满足(RR^T = R^TR = I),实现该变换的矩阵不唯一,为了简便,可以选取(R=U)
因此:

xPCAwhite = diag(1./sqrt(diag(S) + epsilon)) * U' * x;
xZCAwhite = U * diag(1./sqrt(diag(S) + epsilon)) * U' * x;

原文地址:https://www.cnblogs.com/lity/p/6030594.html