对输入数据,维度为2时,想要把数据降维1维:

数据的主方向就是旋转数据的第一维。因此,若想把这数据降到一维,可令:

数据已经进行预处理(零均值),使得每个特征具有相同的均值和方差。

PCA算法将寻找一个低维空间来投影我们的数据。从下图中可以看出,是数据变化的主方向,而 是次方向。

为更形式化地找出方向,我们首先计算出协方差矩阵,如下所示:

    就是协方差矩阵的主特征向量,而是次特征向量。(按照特征值得大小选取)

向量构成了一个新基,可以用来表示数据。那么就是样本点在维度上的投影的长度(幅值)。同样的,投影到维度上的幅值。

在本例中,可得的点图如下(取  ):

  

协方差:为了衡量两个数据的相关性,一个数据朝大于均值的方向走的趋势时,另一个数据如果朝小于均值的方向走,趋势相反,协方差值为负的,负相关;如果另一个数据同意朝大于均值的方向变化,协方差为正值,正相关。如果协方差值为0,不相关。

数据白化就是为降低训练数据的冗余,降低输入的冗余性

由前面的例子,特征的分布如下图所示:

  这个数据的协方差矩阵如下:

  是不相关的, 满足我们对白化结果的第一个要求 (特征间相关性降低)。为了使每个输入特征具有单位方差,我们可以直接使用作为缩放因子来缩放每个特征 。具体地,我们定义白化后的数据 如下:

  绘制出 ,我们得到:

这些数据现在的协方差矩阵为单位矩阵 。我们说,是数据经过PCA白化后的版本: 中不同的特征之间不相关并且具有单位方差。

拿图像为例,图像中的像素之间存在很强的相关性。(在图像处理中,一个像素与相邻像素的灰度值之间有联系,所以可以利用这一点进行图像压缩)。白化就是为了减少冗余也就是减少这种相关性。PCA白化在减少特征之间相关性的处理方法与PCA算法相同,找到一个新的基,将数据投影到新的基上,也就是将原始数据做旋转变化,达到减少相关性的目标。但PCA白化与PCA有一点不同,就是处理后的数据的方差为单位方差。主要是将主轴上的数据进行了缩放处理。

ZCA白化是在PCA白化后的数据基础上做处理,主要是对数据进行旋转,使数据比较好的接近原始数据,并没有减少数据特征之间的相关性。

PCA与白化,

就是对输入数据进行预处理,

前者对数据进行降维,后者对数据进行方差处理。

最新文章

  1. PHP入门教程-开发环境搭建
  2. 原生JavaScript实现滚动条
  3. js实现的新闻列表垂直滚动实现详解
  4. ASP.NET多线程下使用HttpContext.Current
  5. oracle行转列、列转行
  6. [转]Oracle学习笔记——权限管理
  7. IOC----LightInject
  8. AOT
  9. [转]看看国外的javascript题目,你能全部做对吗?
  10. java-多线程安全问题
  11. MapReduce过程(包括Shuffle)详解
  12. 推荐一个比crontab更好用的东西:crongo
  13. CF999E Reachability from the Capital来自首都的可达性
  14. PHP适配器模式
  15. 程序连接oracle数据库问题Cannot create PoolableConnectionFactory ...
  16. Release Notes for XE5
  17. StarRatingBar星星切换动画《IT蓝豹》
  18. Win_Server_2008 安装 Oracle_11g EM时上载EM资料失败
  19. [转]关闭WIN7“程序兼容性助理”
  20. windows同时使用python2和3

热门文章

  1. [转]能用HTML/CSS解决的问题就不要使用JS
  2. spring学习总结(一)_Ioc基础(中)
  3. BZOJ1468Tree——点分治
  4. HihoCoder - 1498 Diligent Robots
  5. linux screen 命令 :离线运行程序
  6. 探测.yml
  7. NOIp2017D2T2(luogu3959) 宝藏 (状压dp)
  8. GO调度模型的缺点
  9. Flash10 使用剪贴板得改变程序的写法了
  10. Java中Dom解析XML