本文共 1033 字,大约阅读时间需要 3 分钟。
(一)简介
1.白化(whitening/sphering)的目的就是降低输入的冗余性;更正式的说,我们希望通过白化过程使得学习算法的输入具有如下性质:(1)特征之间相关性较低;(2)所有特征具有相同的方差。
2.常见的白化预处理有:(1)PCA白化;(2)ZCA白化;
(二)PCA白化
1.根据本人之前的博文《PCA算法》,可以知道对X的协方差矩阵分解后得到的特征向量U,可以使得数据:
满足特征之间相关性较低,也就是其协方差矩阵为对角线矩阵;
2.为了满足白化的条件(2),也就是所有特征具有相同的方差,PCA白化的做法是使用
作为缩放因子来缩放每个特征;也就是:
,其中的D是以
为对角元素的对角矩阵;
3.PCA白化后的数据特征之间相关性低,所有特征具有相同的单位方差,也就是数据的协方差矩阵为单位矩阵;
4.PCA白化的matlab代码:
X=rand(8,20); %原始数据8维20个样本
X=X-repmat(mean(X,2),1,size(X,2)); %zero-mean
C= X*X'/size(X,2); %求协方差矩阵
[E, Lamda] = eig(C); %求特征值以及特征向量
d=diag(Lamda); %将特征值从对角矩阵中抽取出来
D=diag(d.^-0.5); %构造对角线矩阵
Xwhiten=(E*D)'*X; %PCA白化
cor=Xwhiten*Xwhiten'/size(Xwhiten,2); %白化后的数据的协方差矩阵是单位矩阵
(三)ZCA白化
1.ZCA白化其实就是在PCA白化的基础上加多一个U,也就是
;
2.由于有时候特征值
有可能很小接近于0,因此这可能使数据上溢 (赋为大数值)或造成数值不稳定。因而在实践中,我们使用少量的正则化实现这个缩放过程,即在取平方根和倒数之前给特征值加上一个很小的常数;
3.ZCA白化的matlab代码:
X=rand(8,20);
X=X-repmat(mean(X,2),1,size(X,2));
C= X*X'/size(X,2);
[E, Lamda] = eig(C);
%epsilion=1e-5;
epsilion=0; %根据原始数据情况决定
d=diag(Lamda)+epsilion;
D=diag(d.^-0.5);
Xwhiten=E*D*E'*X;
cor=Xwhiten*Xwhiten'/size(Xwhiten,2);
转载地址:http://gftnx.baihongyu.com/