1. 一个小故事

本部分以知乎用户 论智
CrossValidated的人气答主 amoeba 的文章的翻译为基础,做了一定量的修改。 原文 Making sense of principal component analysis, eigenvectors & eigenvalues

amoeba设想了一个大家庭聚餐的场景,大家突然对PCA是怎么回事很感兴趣,于是你逐一向家庭成员(曾祖母,祖母,母亲,妻子,女儿)解释,每个人都比上一个人内行一点。

曾祖母:我听说你正研究P……C……A。我想知道它是什么……

你:呃,这只是一种总结某些数据的方法。看,桌子那边有一些红酒瓶。我们可以通过色泽、酒精度、年份等描述每瓶红酒。这样可以根据酒窖中每瓶红酒的不同特性编制一张完整的列表。但是其中很多属性是相关的,因此会出现一些冗余。因此我们可以通过更少的特性总结每瓶酒!这正是PCA做的。


祖母:很有趣!所以PCA会检查哪些特性是冗余的,然后丢弃它们?

你:问得好,奶奶!不,PCA并没有选择一些特性然后丢弃其余。相反,它创建一些特性,结果这些新特性能够很好地总结我们的红酒列表。当然,这些新特性是由旧特性构建的;例如,一个新特性可能通过计算年份减去酸度或其它类似的组合得出(我们称之为线性组合)。

母亲:嗯,听起来不错,但我还没有很了解透彻。你说的“总结”红酒列表的新PCA特性具体指什么?

你:对于这个问题,我猜我可以给出两个不同的答案。第一个答案是寻找一些在所有红酒中很不相同的属性(特性)。事实上,想象你得到了一个对于大多数红酒而言都一样的特性。那帮助不大,对不对?红酒和红酒之间很不一样,而你的新属性让它们看起来都差不多了!这肯定是一个错误的总结。相反,PCA寻找能尽可能体现红酒差异的属性。

第二个答案是寻找一些属性,这些属性允许你预测,或者说“重建”原本的红酒特性。想象你得出了一个和原本的特性没什么关系的属性;如果你仅仅使用这一新属性,你不可能重建原本的特性!这也不是一个好的总结。所以PCA寻找能够尽可能重建原始特性的属性。

妻子:但是,亲爱的,这两个PCA的“目标”听起来可不一样,为什么它们会是等效的?

你:嗯。也许我应该画一点东西,这样会更形象一些(你拿了一张纸巾,然后开始涂鸦)。让我们挑选两个红酒特性,也许是颜色浓淡和酒精含量——我不知道它们是否相关,但是让我们想象它们是相关的。不同红酒的散点图可能是这样的:

这一片“红酒云”中的每个点代表一种特定的红酒。你可以看到,两种属性(x轴和y轴)是相关的。在这片红酒云的中央画一条直线,将所有点投影到这条直线上,我们可以构建一个新属性。这一新属性将由w1w_1w1​x+w2w_2w2​y的线性组合定义,每条线对应w1w_1w1​和w2w_2w2​的特定值。

接下来看好了——下面是不同的直线上的投影会是怎么样的(红点是蓝点的投影):

正如我之前所说的,PCA会根据两种不同的“最佳”的标准找到“最佳”的直线。首先,这条线上的差异应该最大化。注意观察当直线旋转的时候,红点是如何“散布”(我们称之为“方差”)的;你能看到它们何时最大化了吗?其次,如果我们基于新特性(红点的位置)重建原本的两个特性(蓝点的位置),连接红线的长度将给出重建误差。注意观察当直线旋转的时候,红线的长度是如何改变的;你能看到它们的总长度何时最小化了吗?

如果你注视上面的动画有一会儿的话,你会注意到“最大方差”和“最小误差”将同时达到,也就是当直线指向我在红酒云两侧标出的品红色短线时。这一直线对应于PCA将构建的新红酒属性。

顺便说下,PCA代表“主成分分析”(principal component analysis),而这个新属性称为“第一主成分”。同时,我们通常不说“属性”(property)或“特性”(characteristic),而说“特征”(feature)或“变量”(variable)。

女儿:爸爸好厉害!我想我知道为什么这两个目标产生一样的结果?本质上这是因为勾股定理,不是吗?我还听说PCA多少和本征向量、本征值有点关系;图中它们在哪里呢?

你:哈哈不愧是我的女儿!从数学上说,我们通过每个红点到红酒云中心的均方根距离来衡量红点的散布;正如你所知的,这叫做方差。另一方面,整体的重建误差通过相应的红线的均方根距离来衡量。然而由于红线和黑线间的角度永远是90度,两个量之和等于红酒云中心与每个蓝点的均方根距离;这正是勾股定理。当然,这些均方跟距离不依赖于黑线的朝向,因此方差越高,误差就越低(因为两者之和是常数)。这里有一个以上含糊论证的准确版本。

你可以把黑线想象成硬质杆,然后把红线想象成弹簧。弹簧的势能和它的长度平方成正比(物理学上这称为胡克定律),所以杆将调整自己的朝向以最小化这些平方距离的总和。我做了一个关于它的模拟,加上了一点摩擦力。


关于本征向量和本征值。你知道协方差矩阵吧;在我的例子中它是一个2x2的矩阵
[1.070.630.630.64]\left[ \begin{matrix} 1.07 & 0.63 \\ 0.63 & 0.64 \\ \end{matrix} \right] [1.070.63​0.630.64​]
这意味着x变量的方差是1.07,而y变量的方差是0.64,它们之间的协方差是0.63。由于这是一个对称正方矩阵,给定它的本征向量,选用一个新的直角坐标系可以使其对角化(这称为谱定理)。对角上的值就是对应的本征值。在这个新坐标系中,协方差矩阵是对角化的,看起来大概是这样:

[1.52000.19]\left[ \begin{matrix} 1.52 & 0 \\ 0 & 0.19 \\ \end{matrix} \right] [1.520​00.19​]

这意味着,现在点之间的相关性为零。很明显,投影的方差将由特征值的加权平均决定。因此,选择第一组坐标轴上的投影将达到最大可能方差(1.52)。由此得出,第一主成分的方向由协方差矩阵的第一个本征向量指定.

你也可以在旋转的图像上观察到这一点,图像上有一条与黑色直线正交的灰色直线;它们一起组成了一个旋转坐标系。试着留意在这一旋转坐标系中,何时蓝点变得不相关。答案仍然是黑色直线指向品红色的短线的时候。现在我可以告诉你我如何找到这两根短线的:它们标记了协方差矩阵的第一个本征向量的方向,在这个例子中是(0.81, 0.58)

2. 再举个例子

听了上面这个故事,相信大家现在对 PCA 有了一个初步的了解,
总结一下 PCA 的步骤:
设有m条n维数据。
1)将原始数据按列组成n行m列矩阵X
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)求出协方差矩阵 C=1mXXTC=\frac{1}{m}XX^\mathsf{T}C=m1​XXT
4)求出协方差矩阵的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)Y=PXY=PXY=PX 即为降维到k维后的数据。

再举个例子加深下印象:

(−1−1020−20011)\begin{pmatrix} -1 & -1 & 0 & 2 & 0 \\ -2 & 0 & 0 & 1 & 1 \end{pmatrix} (−1−2​−10​00​21​01​)
为例,我们用PCA方法将这组二维数据其降到一维。

  1. 因为这个矩阵的每行已经是零均值,这里我们直接求协方差矩阵:
    C=15(−1−1020−20011)(−1−2−10002101)=(65454565)C=\frac{1}{5}\begin{pmatrix} -1 & -1 & 0 & 2 & 0 \\ -2 & 0 & 0 & 1 & 1 \end{pmatrix}\begin{pmatrix} -1 & -2 \\ -1 & 0 \\ 0 & 0 \\ 2 & 1 \\ 0 & 1 \end{pmatrix}=\begin{pmatrix} \frac{6}{5} & \frac{4}{5} \\ \frac{4}{5} & \frac{6}{5} \end{pmatrix} C=51​(−1−2​−10​00​21​01​)⎝⎜⎜⎜⎜⎛​−1−1020​−20011​⎠⎟⎟⎟⎟⎞​=(56​54​​54​56​​)

  2. 然后求其特征值和特征向量。求解后特征值为:
    λ1=2,λ2=2/5\lambda_1=2,\lambda_2=2/5λ1​=2,λ2​=2/5
    其对应的特征向量分别是:
    c1(11),c2(−11)c_1\begin{pmatrix} 1 \\ 1 \end{pmatrix},c_2\begin{pmatrix} -1 \\ 1 \end{pmatrix} c1​(11​),c2​(−11​)
    其中对应的特征向量分别是一个通解,c1c_1c1​和c2c_2c2​可取任意实数。那么标准化后的特征向量为:
    (1/21/2),(−1/21/2)\begin{pmatrix} 1/\sqrt{2} \\ 1/\sqrt{2} \end{pmatrix},\begin{pmatrix} -1/\sqrt{2} \\ 1/\sqrt{2} \end{pmatrix} (1/2​1/2​​),(−1/2​1/2​​)

  3. 因此我们的矩阵P是:
    P=(1/21/2−1/21/2)P=\begin{pmatrix} 1/\sqrt{2} & 1/\sqrt{2} \\ -1/\sqrt{2} & 1/\sqrt{2} \end{pmatrix} P=(1/2​−1/2​​1/2​1/2​​)
    可以验证协方差矩阵C的对角化:
    PCPT=(1/21/2−1/21/2)(6/54/54/56/5)(1/2−1/21/21/2)=(2002/5)PCP^\mathsf{T}=\begin{pmatrix} 1/\sqrt{2} & 1/\sqrt{2} \\ -1/\sqrt{2} & 1/\sqrt{2} \end{pmatrix}\begin{pmatrix} 6/5 & 4/5 \\ 4/5 & 6/5 \end{pmatrix}\begin{pmatrix} 1/\sqrt{2} & -1/\sqrt{2} \\ 1/\sqrt{2} & 1/\sqrt{2} \end{pmatrix}=\begin{pmatrix} 2 & 0 \\ 0 & 2/5 \end{pmatrix} PCPT=(1/2​−1/2​​1/2​1/2​​)(6/54/5​4/56/5​)(1/2​1/2​​−1/2​1/2​​)=(20​02/5​)

  4. 最后我们用P的第一行乘以数据矩阵,就得到了降维后的表示:
    Y=(1/21/2)(−1−1020−20011)=(−3/2−1/203/2−1/2)Y=\begin{pmatrix} 1/\sqrt{2} & 1/\sqrt{2} \end{pmatrix}\begin{pmatrix} -1 & -1 & 0 & 2 & 0 \\ -2 & 0 & 0 & 1 & 1 \end{pmatrix}=\begin{pmatrix} -3/\sqrt{2} & -1/\sqrt{2} & 0 & 3/\sqrt{2} & -1/\sqrt{2} \end{pmatrix} Y=(1/2​​1/2​​)(−1−2​−10​00​21​01​)=(−3/2​​−1/2​​0​3/2​​−1/2​​)

降维投影结果如下:

3. 结语

PCA 作为使用最广泛的数据降维算法,其主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。

但它也存在一些限制,例如它虽可以很好的解除线性相关,但是对于高阶相关性就没有办法了;对于存在高阶相关性的数据,可以考虑Kernel PCA,通过Kernel函数将非线性相关转为线性相关。另外,PCA假设数据各主特征是分布在正交方向上,如果在非正交方向上存在几个方差较大的方向,PCA的效果就大打折扣了。

想了解 PCA 的数学原理,强烈建议大家阅读参考资料的第三篇文章,相信大家也会收获颇丰。

参考资料:
[1] 论智翻译文
[2] PCA的数学原理
[3] 主成分分析(PCA)原理详解

初识主成分分析 (PCA)相关推荐

  1. 主成分分析(PCA)简介

    主成分分析(Principal Components Analysis, PCA)是一个简单的机器学习算法,可以通过基础的线性代数知识推导. 假设在Rn空间中我们有m个点{x(1),-,x(m)},我 ...

  2. 223.主成分分析PCA

    主成分分析 PCA 本节作者:刘华,中国科学技术大学 版本1.0.3,更新日期:2020年6月18日 什么是PCA(Principal Component Analysis) 相关背景 在许多领域的研 ...

  3. R语言主成分分析PCA和因子分析EFA、主成分(因子)个数、主成分(因子)得分、主成分(因子)旋转(正交旋转、斜交旋转)、主成分(因子)解释

    R语言主成分分析PCA和因子分析EFA.主成分(因子)个数.主成分(因子)得分.主成分(因子)旋转(正交旋转.斜交旋转).主成分(因子)解释 目录

  4. Python数据集可视化:抽取数据集的两个特征进行二维可视化、主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用)

    Python数据集可视化:抽取数据集的两个特征进行二维可视化.主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用) 目录 Python数据集可视化:抽取数据集的两个特征进行二维可 ...

  5. R主成分分析PCA示例

    R主成分分析PCA示例 目录 R主成分分析PCA示例 主成分分析(Principal components analysis) 加载数据 计算主成分(Principal

  6. 深度学习入门教程UFLDL学习实验笔记三:主成分分析PCA与白化whitening

     深度学习入门教程UFLDL学习实验笔记三:主成分分析PCA与白化whitening 主成分分析与白化是在做深度学习训练时最常见的两种预处理的方法,主成分分析是一种我们用的很多的降维的一种手段,通 ...

  7. 降维(一)----说说主成分分析(PCA)的源头

    降维系列: 降维(一)----说说主成分分析(PCA)的源头 降维(二)----Laplacian Eigenmaps --------------------- 前一篇文章中介绍了主成分分析.PCA ...

  8. 主成分分析(PCA)深入剖析+Matlab模拟

    1.降维引发的思考 对于现在维数比较多的数据,我们首先需要做的就是对其进行降维操作.降维,简单来说就是说在尽量保证数据本质的前提下将数据中的维数降低.降维的操作可以理解为一种映射关系,例如函数z=f( ...

  9. 独立成分分析 ( ICA ) 与主成分分析 ( PCA ) 的区别

    1.前言 参考资料:https://www.zhihu.com/question/28845451 书上写的是: 1. 主成分分析假设源信号间彼此非相关,独立成分分析假设源信号间彼此独立. 2. 主成 ...

  10. lda 吗 样本中心化 需要_机器学习 —— 基础整理(四):特征提取之线性方法——主成分分析PCA、独立成分分析ICA、线性判别分析LDA...

    本文简单整理了以下内容: (一)维数灾难 (二)特征提取--线性方法 1. 主成分分析PCA 2. 独立成分分析ICA 3. 线性判别分析LDA (一)维数灾难(Curse of dimensiona ...

最新文章

  1. php数组重复值销毁,如何从PHP中删除数组中的重复值
  2. CentOS最小化系统,怎么安装图形界面
  3. 【程序人生】不想一辈子做底层码农?快来看看这十条箴言
  4. 【干货】H3C如何配置VLAN-trunk 二层隔离技术?
  5. [Leedcode][JAVA][第46题][全排列][回溯算法]
  6. (1)JavaScript入门
  7. leetcode题解131-分割回文串
  8. 阿里矢量图可根据样式修改颜色
  9. FPGA实现cameralink解码
  10. dev c++缺省源
  11. oracle pq distribute,详解Oracle hints PQ_DISTRIBUTE
  12. 弦外雨,晚风急 吹皱芳华太无情
  13. inter处理器(CPU)的分类
  14. 7.2判断是否手机端进行访问页面
  15. Ramnit 蠕虫分析
  16. 你认识5G物联网关键器件FBG吗
  17. ! LaTeX Error: File xxx.sty not found-统一解决办法
  18. 嵌入式开发常用英语单词--你知多少?
  19. 免杀技术有一套(免杀方法大集结)(Anti-AntiVirus)
  20. 帝国cms根据标题生成标题图片插件

热门文章

  1. 国际短信通道短信后台软件路由流程—移讯云短信系统
  2. 软考中高项学员:2016年4月6日作业
  3. EBS 销售订单登记提示错误 ORA-00604 LPX-00225
  4. SQLite3 数据库全文搜索 - SQL Server - 红黑联盟
  5. matlab 输出两列,Matlab绘制两列正弦波的叠加
  6. CSS实现兼容浏览器的文字阴影效果
  7. 如何用计算机算电路,如何利用基础门电路进行加法计算和触发器
  8. 2020COSMO时尚盛典即将闪耀启幕
  9. SDS之BlockChain Storage系列:3、为什说区块链存储是下一个热点 (上)
  10. Windows 注册表(Registry) 学习