matlab实现zca去白化,白化算法

(一)简介

1.白化(whitening/sphering)的目的就是降低输入的冗余性;更正式的说,我们希望通过白化过程使得学习算法的输入具有如下性质:(1)特征之间相关性较低;(2)所有特征具有相同的方差。

2.常见的白化预处理有:(1)PCA白化;(2)ZCA白化;

(二)PCA白化

1.根据本人之前的博文《PCA算法》,可以知道对X的协方差矩阵分解后得到的特征向量U,可以使得数据:

0818b9ca8b590ca3270a3433284dd417.png满足特征之间相关性较低,也就是其协方差矩阵为对角线矩阵;

2.为了满足白化的条件(2),也就是所有特征具有相同的方差,PCA白化的做法是使用

0818b9ca8b590ca3270a3433284dd417.png作为缩放因子来缩放每个特征;也就是:

0818b9ca8b590ca3270a3433284dd417.png,其中的D是以

0818b9ca8b590ca3270a3433284dd417.png为对角元素的对角矩阵;

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,也就是

0818b9ca8b590ca3270a3433284dd417.png

2.由于有时候特征值

0818b9ca8b590ca3270a3433284dd417.png有可能很小接近于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);

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值