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;