PCA是实验中很常用的工具,一般用来做降维,它的实现有很多很多种,其中牵涉相当多的细节,笔者在实现PCA时常常有困惑,为什么查到的各种代码总有一些不同的trick,有时候对样本提前归一化?有时候又要减均值?这些操作对于PCA降维效果到底有什么影响?这篇文章从PCA白化入手,探究这些trick背后的原因。

1 Whitening (白化)

白化1有两种,一种是PCA Whitening,一种是ZCA Whitening,它主要目标是降低数据的冗余性,我们希望通过白化过程使得学习算法的输入具有如下性质:

  • 特征之间相关性较低;
  • 所有特征具有相同的方差。

2 Standardize(标准化)

标准化有多种实现方式,其目标是使数据均值为0,方差为1,使得不同维度的特征具有同等重要性。因为不同维度的特征代表的信息不同,数值变化范围会有较大差异,如果统一衡量将可能影响判断。

在PCA中融入standardize就是PCA whitening。

2.1 举例说明Standardize重要性

那么standardize有什么好处?看一个来自StackExchange的例子2:

用一个特征来描述一棵树,它是二维的,第一维是高度height,第二维是切面周长girth,我们要根据这个二维特征,来推断一棵树的体积volume是low还是high(设大于20为high)。
我们分以下三种情况来分析:

2.1.1 Different measure

先看一种比较极端的情况,让height的单位是mile,girth的单位是feet,1mile=5280feet=1.6km,也就是说,height的值将是很小的小数,我们假设height取值范围是[0,0.05],而girth的值取值范围可以假设为[20,50],一个树的height那一维的特征从0.04变为0.05,相对于girth已经可以小的忽略不计了,但是它在自己的取值范围上变化了15\frac15,从直观上看这是必须考虑的,所以我们要增大这种数值小,数值范围小的特征的影响。

分析主成分

                       Comp.1         Comp.2
Standard deviation   3.0871086    1.014551e-03
Loadings:  tree.height                 -1    tree.girth     1

画图分析,其中灰色的low/high指的是volume,红线height和girth的走势是根据loading画出的,loading指的是原始特征在component上保留的方差,可以看出,height的方差主要反映在component2上,girth的方差反映在component1上,而由于height的重要性被girth完全压制,故在图中可以看到,volume的low/high完全靠girth来决定,girth越大,volume越大,height的信息完全没有起到作用。而我们知道事实上,一棵树的体积肯定跟高度是有关系的。

2.1.2 Same measure without standarized

进一步地,让height和girth单位一致,即都是feet。

分析其主成分:

                       Comp.1         Comp.2
Standard deviation   6.5088696   2.5407042
Loadings:  tree.height  -0.956    0.293 tree.girth   -0.293   -0.956

从图中可以看出,height的红线较长,代表volume对height较敏感。因为component1的方差大,即变化范围大,而原始数据height那一维的数据的方差较多地反映在component1上,因此height起到较大影响。这是因为一棵树的height变化范围比girth变化范围大。但是实际上,根据树的体积计算公式,我们知道,树的girth应该起较大作用。

V∝girth2×height

V \propto girth^2 \times height

2.1.3 Standarized

至此,来看看standardize的结果。

分析其主成分:

                       Comp.1         Comp.2
Standard deviation   0.2275561   0.06779544
Loadings:  tree.height  0.203     -0.979tree.girth   0.979   0.203

由图可以看出,girth对volume的判断起到较大作用,符合客观事实。

3 PCA whitening

假设我们已经通过公式SU=LU\mathbf {SU}= \mathbf {LU} 计算得到了PCA的主成份:L\mathbf L的对角线元素是特征值由大到小排列,U\mathbf U是特征值对应的特征向量,S\mathbf S是原始数据x\mathbf x的协方差矩阵。

下式就是PCA whitening操作,计算yn\mathbf y_n是第n个样本白化的结果。

yn=L−1/2UT(xn−x¯)

\mathbf y_n = \mathbf L^{-1/2} \mathbf U^T(\mathbf x_n - \mathbf {\bar x})
下式验证白化后的数据方差为1.

1N∑n=1NynyTn=1N∑n=1NL−1/2UT(xn−x¯)(xn−x¯)TUL−1/2=L−1/2UTSUL−1/2=L−1/2LL−1/2=I.

\frac1N\sum_{n=1}^N \mathbf y_n \mathbf y_n^T = \frac1N \sum_{n=1}^N \mathbf L^{-1/2} \mathbf U^T(\mathbf x_n - \mathbf {\bar x})(\mathbf x_n - \mathbf {\bar x})^T \mathbf U \mathbf L^{-1/2} = \mathbf L^{-1/2} \mathbf U^T \mathbf {S U} \mathbf L^{-1/2} = \mathbf L^{-1/2} \mathbf L \mathbf L^{-1/2} = \mathbf I.
下图 3中:左边是原始数据,中间是standardize的结果,右边是PCA whitening的结果,我们可以看到数据散开,主成份没有明显的长短轴,差异性被进一步挖掘。


  1. 白化介绍 ↩
  2. Standardize的解释 ↩
  3. 《Pattern Recognition and Machine Learning》 ↩

数据标准化与PCA白化原理探索相关推荐

  1. 浅谈白化(Whitening) 、PCA白化、ZCA白化

    白化 本节讨论白化(Whitening),以及白化与 PCA(Principal Component Analysis) 和 ZCA(Zero-phase Component Analysis) 的关 ...

  2. 深度之眼Pytorch打卡(九):Pytorch数据预处理——预处理过程与数据标准化(transforms过程、Normalize原理、常用数据集均值标准差与数据集均值标准差计算)

    前言   前段时间因为一些事情没有时间或者心情学习,现在两个多月过去了,事情结束了,心态也调整好了,所以又来接着学习Pytorch.这篇笔记主要是关于数据预处理过程.数据集标准化与数据集均值标准差计算 ...

  3. PCA的原理及MATLAB实现

    相关文章 PCA的原理及MATLAB实现 UFLDL教程:Exercise:PCA in 2D & PCA and Whitening python-A comparison of vario ...

  4. matlab pca和逆pca函数,PCA的原理及MATLAB实现

    关于PCA原理可以直接参考下面的文章 深入理解PCA PCA是经常用来减少数据集的维数,同时保留数据集中对方差贡献最大的特征来达到简化数据集的目的. PCA的原理就是将原来的样本数据投影到一个新的空间 ...

  5. 【机器学习】专题学习丨2. 数据标准化 Normalization丨

    好的资料 类型 文献 1. Normalization Techniques in Training DNNs: Methodology, Analysis and Application Githu ...

  6. PCA主成分分析原理及分析实践详细介绍

    自己的博客在Github上,访问不多.这篇文章竟然被别人发了出来,还是贴到CSDN上,更方便检索吧. 原文:<http://blog.genesino.com/2016/10/PCA/> ...

  7. 主成分分析(PCA)原理及R语言实现

    在生物信息分析中,PCA.t-SNE和diffusionMap其实是一类东西. StatQuest: Principal Component Analysis (PCA) clearly explai ...

  8. 主成分分析(PCA)原理与推导

    主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一.在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用.一般我们提到降维最容易想到的算法就 ...

  9. 主成分分析(PCA)原理和鲁棒主成分分析(RPCA)详解

    主成分分析(PCA)原理和鲁棒主成分分析(RPCA)详解 1.相关背景 在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律.多变量大数据集无疑会为研究和应用 ...

最新文章

  1. ASP.NET2.0打通文件图片处理任督二脉【月儿原创】
  2. Oracle 归档错误案例
  3. NO.80 禅道使用分享第九期:测试部门缺陷管理的新需求
  4. tensorflow object detection API 使用记录2
  5. Ubuntu安装桌面环境
  6. edoc2中标电子文件管理标准ERMS制定项目
  7. 亚信安全发布《2022年网络安全发展趋势及十大威胁预测》
  8. python setup.py install 出错_python setup.py install 失败
  9. 微信小程序生成分享图片踩坑大计划
  10. Android开发中listView的item无法获取焦点
  11. beeline常用命令
  12. c语言设计无纸化考试系统多少钱,无纸化考试系统解决方案
  13. mac数字键盘错乱_电脑键盘输入字母数字错乱怎么回事
  14. 白盒测试--数据流测试
  15. 公众号欢迎各位大佬投稿
  16. java半球最多_多是东半球最全的RxJava使用场景小结
  17. 计算机辅助审计技术实训心得体会,审计实训心得体会(精选3篇)
  18. Python获取秒级时间戳与毫秒级时间戳
  19. python关键词对联_对联数据
  20. 为什么有争议的王坚把阿里云做起来了?

热门文章

  1. uni-app获取设备的唯一标识
  2. 王学岗Kotlin协程(三)---协程的上下文与协程的异常处理
  3. python小游戏——跑酷小恐龙代码开源
  4. 讲一个玩 HASS 一年的故事
  5. vue3相比vue2效率提升在哪些方面?
  6. 魅族手机CUP浮点运算测试BUG
  7. [二维区间DP?] Atcoder ARC004E. Salvage Robots
  8. 国内交互智能平板品类首创者希沃联手倍市得,进一步蓄力品牌发展势能
  9. 前端——Form表单
  10. iOS逆向开发,突破微信强制升级,让低版本的iPhone也能正常使用