码迷,mamicode.com
首页 > 其他好文 > 详细

主成分分析(PCA)——以2维图像为例

时间:2014-08-11 18:04:42      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:深度学习   模式识别   deep learning   ufldl   压缩   

这一节不论是思想还是实现都比较容易。

主成分分析(PCA)就是模式识别里面说的K-L变换,思想是完全相同的。

详情可见我的博文:特征选择(三)-K-L变换

这里简单介绍几个概念。顺便贴出代码和效果图。

<span style="font-family:Times New Roman;font-size:14px;">xRot = zeros(size(x));
xRot=u'*x;
figure(2);
scatter(xRot(1, :), xRot(2, :));
title('xRot');</span>
得到原始图和主轴方向,如图1所示。

bubuko.com,布布扣

图1


PCA变换

就是要找到数据分布最大的方向,作为主轴方向,然后以这些主轴方向为基,旋转过去,就完成了数据的去相关性,这是因为此时数据的协方差矩阵成了对角阵。如图2所示。

xRot = zeros(size(x)); 
xRot=u'*x;
figure(2);
scatter(xRot(1, :), xRot(2, :));
title('xRot');

bubuko.com,布布扣

图2


PCA降维

如果我们只取了特征根最大的几个特征向量作为旋转矩阵,那么这就是PCA降维。如图3。

<span style="font-family:Times New Roman;font-size:14px;">k = 1; 
xHat = zeros(size(x));
xHat=u(:,1:k)*u(:,1:k)'*x;
figure(3);
scatter(xHat(1, :), xHat(2, :));
title('xHat');</span>

bubuko.com,布布扣

图3

 

PCA白化

我们不降维,而此基础上将数据左乘一个bubuko.com,布布扣,那么数据就按照各自主轴方向进行压缩拉伸,成了一个球形,这就是PCA白化。

epsilon = 1e-5;
xPCAWhite = zeros(size(x));
xPCAWhite=diag(1./(diag(s)+epsilon))*u'*x;
figure(4);
scatter(xPCAWhite(1, :), xPCAWhite(2, :));
title('xPCAWhite');

这里加了一个epsilon是因为有的特征根已经很小了,归一化的时候根号了一下,容易出现数据上溢。同时它还有消除噪声的作用。如图4。

bubuko.com,布布扣

图4

 

 ZCA白化

我们在PCA白化的基础上,左乘一个特征向量矩阵,数据的方向就会又转回去了。这就是ZCA白化,ZCA白化去除了数据的相关性、保留了最大限度原始数据的形式。是数据预处理的好方法。如图5。

xZCAWhite = zeros(size(x)); 
xZCAWhite=u*diag(1./(diag(s)+epsilon))*u'*x;
figure(5);
scatter(xZCAWhite(1, :), xZCAWhite(2, :));
title('xZCAWhite');

bubuko.com,布布扣

图5


欢迎参与讨论并关注本博客微博以及知乎个人主页后续内容继续更新哦~

转载请您尊重作者的劳动,完整保留上述文字以及文章链接,谢谢您的支持!

主成分分析(PCA)——以2维图像为例,布布扣,bubuko.com

主成分分析(PCA)——以2维图像为例

标签:深度学习   模式识别   deep learning   ufldl   压缩   

原文地址:http://blog.csdn.net/ycheng_sjtu/article/details/38492771

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!