博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
matlab实现zca去白化,白化算法
阅读量:5868 次
发布时间:2019-06-19

本文共 1033 字,大约阅读时间需要 3 分钟。

(一)简介

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);

转载地址:http://gftnx.baihongyu.com/

你可能感兴趣的文章