前言

PCA降维的核心思想在于: 将原始数据映射到低维度的正交基底上,映射之后的数据能最大限度的分开,即协方差矩阵要对角化。

实际操作时发现:依赖矩阵的正交变换,将原始数据XXX的协方差矩阵对角化。对角化之后特征值对应的特征向量就是我们要求的新的基底。

无论是PCA的核心思想还是推导过程其实都很简单,如果对PCA的细节不懂,通常是基础知识掌握的不够,同时对矩阵正交变换的几何意义了解不够。

因此,本文首先把PCA需要掌握的基础知识先介绍一遍 (这些基础知识包括:向量内积的几何意义,矩阵的正交变换,协方差,协方差矩阵),然后再简单推导PCA为什么就变成了矩阵对角化以及求特征向量的过程。最后给出PCA求解的基本步骤。

准备知识

向量的坐标表示和基变换

向量内积的几何意义

我们刚开始接触向量时,就学过向量内积的一种几何意义如下:A 与 B 的内积值等于 A 向 B 所在直线投影的标量大小。

即:

A=(x1,y1),B=(x2,y2)A⋅B=∣A∣∣B∣cos⁡(α)A=\left(x_{1}, y_{1}\right), \quad B=\left(x_{2}, y_{2}\right) A \cdot B=|A||B| \cos (\alpha) A=(x1​,y1​),B=(x2​,y2​)A⋅B=∣A∣∣B∣cos(α)

如下图:

基底

在我们常说的坐标系中,向量 (3,2) 其实隐式引入了一个定义:以 x 轴和 y 轴上正方向长度为 1 的向量为标准。向量 (3,2) 实际是说在 x 轴投影为 3 而 y 轴的投影为 2。注意投影是一个标量,所以可以为负。

所以,对于向量 (3, 2) 来说,如果我们想求它在 (1,0),(0,1)(1, 0), (0, 1)(1,0),(0,1) 这组基下的坐标的话,分别内积即可。当然,内积完了还是 (3, 2)。

基变换的矩阵表示

这里我们先做一个练习:对于向量 (3,2) 这个点来说,在 (12,12)\left(\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}}\right)(2​1​,2​1​) 和 (−12,12)\left(-\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}}\right)(−2​1​,2​1​) 这组基下的坐标是多少?

我们拿 (3,2) 分别与之内积,得到 (52,−12)\left(\frac{5}{\sqrt{2}},-\frac{1}{\sqrt{2}}\right)(2​5​,−2​1​) 这个新坐标。

我们可以用矩阵相乘的形式简洁的表示这个变换:

(1/21/2−1/21/2)(32)=(5/2−1/2)\left(\begin{array}{cc}1 / \sqrt{2} & 1 / \sqrt{2} \\ -1 / \sqrt{2} & 1 / \sqrt{2}\end{array}\right)\left(\begin{array}{l}3 \\ 2\end{array}\right)=\left(\begin{array}{c}5 / \sqrt{2} \\ -1 / \sqrt{2}\end{array}\right) (1/2​−1/2​​1/2​1/2​​)(32​)=(5/2​−1/2​​)

我们可以把它写成通用的表示形式:

(p1p2⋮pR)(a1a2⋯aM)=(p1a1p1a2⋯p1aMp2a1p2a2⋯p2aM⋮⋮⋱⋮pRa1pRa2⋯pRaM)\left(\begin{array}{c} p_{1} \\ p_{2} \\ \vdots \\ p_{R} \end{array}\right)\left(\begin{array}{llll} a_{1} & a_{2} & \cdots & a_{M} \end{array}\right)=\left(\begin{array}{cccc} p_{1} a_{1} & p_{1} a_{2} & \cdots & p_{1} a_{M} \\ p_{2} a_{1} & p_{2} a_{2} & \cdots & p_{2} a_{M} \\ \vdots & \vdots & \ddots & \vdots \\ p_{R} a_{1} & p_{R} a_{2} & \cdots & p_{R} a_{M} \end{array}\right) ⎝⎜⎜⎜⎛​p1​p2​⋮pR​​⎠⎟⎟⎟⎞​(a1​​a2​​⋯​aM​​)=⎝⎜⎜⎜⎛​p1​a1​p2​a1​⋮pR​a1​​p1​a2​p2​a2​⋮pR​a2​​⋯⋯⋱⋯​p1​aM​p2​aM​⋮pR​aM​​⎠⎟⎟⎟⎞​

其中 pip_ipi​ 是一个行向量,表示第 iii 个基, aja_jaj​ 是一个列向量,表示第 jjj 个原始数据记录。实际上也就是做了一个向量矩阵化的操作。

上述分析给矩阵相乘找到了一种物理解释:

两个矩阵相乘的意义是将右边矩阵中的每一列向量变换到左边矩阵中以每一行行向量为基所表示的空间中去。也就是说矩阵相乘可以表示一种线性变换。

方差,协方差,协方差矩阵

方差

在一维数据中, 我们知道数据的分散程度,可以用数学上的方差来表述。一个变量aaa的方差可以看做是每个元素与变量均值的差的平方和的均值,即:

Var⁡(a)=1m∑i=1m(ai−μ)2\operatorname{Var}(a)=\frac{1}{m} \sum_{i=1}^{m}\left(a_{i}-\mu\right)^{2} Var(a)=m1​i=1∑m​(ai​−μ)2

为了方便处理,我们将每个变量的均值都化为 0 ,因此方差可以直接用每个元素的平方和除以元素个数表示:

Var⁡(a)=1m∑i=1mai2\operatorname{Var}(a)=\frac{1}{m} \sum_{i=1}^{m} a_{i}^{2} Var(a)=m1​i=1∑m​ai2​

协方差

现在把情况从一维扩展到高维。对于高维数据,我们用协方差进行约束,协方差可以表示两个变量的相关性,其公式为:

Cov⁡(a,b)=1m−1∑i=1m(ai−μa)(bi−μb)\operatorname{Cov}(a, b)=\frac{1}{m-1} \sum_{i=1}^{m}\left(a_{i}-\mu_{a}\right)\left(b_{i}-\mu_{b}\right) Cov(a,b)=m−11​i=1∑m​(ai​−μa​)(bi​−μb​)

为了方便计算,我们同样把两个随机变量a,b归一化到均值为0,则协方差可以表示为:

Cov⁡(a,b)=1m∑i=1maibi\operatorname{Cov}(a, b)=\frac{1}{m} \sum_{i=1}^{m} a_{i} b_{i} Cov(a,b)=m1​i=1∑m​ai​bi​

协方差矩阵

假设我们只有 aaa 和 bbb 两个变量,那么我们将它们按行组成矩阵 XXX (联想一下机器学习,对于XXX,每一列我们可以看成是一个样本,每一行可以看成是一种特征):

X=(a1a2⋯amb1b2⋯bm)X=\left(\begin{array}{llll} a_{1} & a_{2} & \cdots & a_{m} \\ b_{1} & b_{2} & \cdots & b_{m} \end{array}\right) X=(a1​b1​​a2​b2​​⋯⋯​am​bm​​)

我们假设XXX是按行归一化之后的变量,则协方差矩阵可以表示成 (对于更多行的情况,可以自己写一下):

1mXX⊤=(1m∑i=1mai21m∑i=1maibi1m∑i=1maibi1m∑i=1mbi2)=(Cov⁡(a,a)Cov⁡(a,b)Cov⁡(b,a)Cov⁡(b,b))\frac{1}{m} X X^{\top}=\left(\begin{array}{cc} \frac{1}{m} \sum_{i=1}^{m} a_{i}^{2} & \frac{1}{m} \sum_{i=1}^{m} a_{i} b_{i} \\ \frac{1}{m} \sum_{i=1}^{m} a_{i} b_{i} & \frac{1}{m} \sum_{i=1}^{m} b_{i}^{2} \end{array}\right)=\left(\begin{array}{cc} \operatorname{Cov}(a, a) & \operatorname{Cov}(a, b) \\ \operatorname{Cov}(b, a) & \operatorname{Cov}(b, b) \end{array}\right) m1​XX⊤=(m1​∑i=1m​ai2​m1​∑i=1m​ai​bi​​m1​∑i=1m​ai​bi​m1​∑i=1m​bi2​​)=(Cov(a,a)Cov(b,a)​Cov(a,b)Cov(b,b)​)

下图是一个二维数据的分布情况。我们可以发现,当Cov(a,b)越大,则数据分布越窄。

PCA的基本原理

设原始数据矩阵 XXX 对应的协方差矩阵为 CCC,而 PPP 是一组基按行组成的矩阵,设 Y=PXY=PXY=PX,则 YYY 为 XXX 对 PPP 做基变换后的数据。设 YYY 的协方差矩阵为 DDD,则 DDD 与 CCC 的关系如下:

D=1mYYT=1m(PX)(PX)T=1mPXXTPT=P(1mXXT)PT=PCPT\begin{aligned} D &=\frac{1}{m} Y Y^{T} \\ &=\frac{1}{m}(P X)(P X)^{T} \\ &=\frac{1}{m} P X X^{T} P^{T} \\ &=P\left(\frac{1}{m} X X^{T}\right) P^{T} \\ &=P C P^{T} \end{aligned} D​=m1​YYT=m1​(PX)(PX)T=m1​PXXTPT=P(m1​XXT)PT=PCPT​

这样我们就看清楚了,我们要找的 PPP 是能让原始协方差矩阵对角化的 PPP。换句话说,优化目标变成了寻找一个矩阵 PPP,满足 PCPTP C P^{T}PCPT 是一个对角矩阵,并且对角元素按从大到小依次排列,那么 PPP 的前 KKK 行就是要寻找的基,用 PPP 的前 KKK 行组成的矩阵乘以 XXX 就使得 XXX 从 NNN 维降到了 KKK 维并满足上述优化条件。

求解步骤

设有 mmm 条 nnn 维数据。

  1. 将原始数据按列组成 nnn 行 mmm 列矩阵 XXX
  2. 将 XXX 的每一行进行零均值化,即减去这一行的均值
  3. 求出协方差矩阵 C=1mXX⊤C=\frac{1}{m} X X^{\top}C=m1​XX⊤
  4. 求出协方差矩阵的特征值及对应的特征向量
  5. 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前 kkk 行组成矩阵 PPP
  6. Y=PXY=PXY=PX 即为降维到 kkk 维后的数据

性质

  1. 缓解维度灾难:PCA 算法通过舍去一部分信息之后能使得样本的采样密度增大(因为维数降低了),这是缓解维度灾难的重要手段;

  2. 降噪:当数据受到噪声影响时,最小特征值对应的特征向量往往与噪声有关,将它们舍弃能在一定程度上起到降噪的效果;

  3. 过拟合:PCA 保留了主要信息,但这个主要信息只是针对训练集的,而且这个主要信息未必是重要信息。有可能舍弃了一些看似无用的信息,但是这些看似无用的信息恰好是重要信息,只是在训练集上没有很大的表现,所以 PCA 也可能加剧了过拟合;

  4. 特征独立:PCA 不仅将数据压缩到低维,它也使得降维之后的数据各特征相互独立;

参考文献

[1] 【机器学习】降维——PCA(非常详细)

[2] PCA Is Not Feature Selection

[3] https://en.wikipedia.org/wiki/Principal_component_analysis

[4] https://en.wikipedia.org/wiki/Covariance_matrix

机器学习基础:主成分分析(Machine Learning Fundamentals: PCA)相关推荐

  1. 机器学习概要(MACHINE LEARNING SUMMARY)

    机器学习概要(MACHINE LEARNING SUMMARY) 监督学习 回归分析与线性回归 1.例如营业额预测,传统算法必须知道计算公式,机器学习可以帮你找到核心的函数关系式,利用它推算未来预测结 ...

  2. Kaggle课程 — 机器学习进阶 Intermediate Machine Learning

    Kaggle课程 - 机器学习进阶 Intermediate Machine Learning 1.简介 1.1 先决条件 2.缺失值 2.1 简介 2.2 三种方法 2.3 一个例子 2.3.1 定 ...

  3. 图机器学习(Graph Machine Learning)- 第二章 图机器学习简介 Graph Machine Learning

    第二章 图机器学习简介 Graph Machine Learning 文章目录 第二章 图机器学习简介 Graph Machine Learning 前言 1. 环境要求Technical requi ...

  4. 对抗机器学习(Adversarial Machine Learning)发展现状

    目录 1. 了解对手 1. 1 攻击目标(Goal) 1. 2 知识储备(Knowledge) 1.3 能力限制(Capability) 1.4 攻击策略(Strategy) 2. 学会主动 2.1 ...

  5. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...

    机器学习实战(Machine Learning in Action)学习笔记----06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习 作者:米仓山下 时 ...

  6. 林轩田机器学习技法(Machine Learning Techniques)笔记(一)

    终于到机器学习技法了,接下来还是尽量保持每章完结就立刻更吧..基石没有保持写完就更,现在回头不知道自己在写啥,看笔记感觉写得一塌糊涂,感觉翻车了.慢慢改进吧. 听说技法挺难的,贴一下大神博客来加持一发 ...

  7. 机器学习肝炎预测模型machine learning for hepatitis prediction model

    作者Toby,来自机器学习肝炎预测模型 肝炎是由细菌.病毒.寄生虫.酒精.药物.化学物质.自身免疫等多种致病因素引起的肝脏炎症的统称.儿童及成年人均可患病,病毒感染导致的病毒性肝炎较为常见. 由于过度 ...

  8. 林轩田机器学习技法(Machine Learning Techniques)笔记(三)

    感觉边写边记还不错hhh(感觉之前就剪剪图,写在记事本里打算之后再贴上去,实在是太蠢了⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄) 林轩田机器学习技法(Machine Learning Techniques)笔记 ...

  9. 吴恩达Coursera, 机器学习专项课程, Machine Learning:Advanced Learning Algorithms第三周编程作业...

    吴恩达Coursera, 机器学习专项课程, Machine Learning:Advanced Learning Algorithms第三周所有jupyter notebook文件: 吴恩达,机器学 ...

  10. 吴恩达Coursera, 机器学习专项课程, Machine Learning:Advanced Learning Algorithms第二周编程作业...

    吴恩达Coursera, 机器学习专项课程, Machine Learning:Advanced Learning Algorithms第二周所有jupyter notebook文件: 吴恩达,机器学 ...

最新文章

  1. 表中重复记录的一些常用脚本
  2. stm32非操作系统开发和带uCos的开发的区别,及一些解析
  3. 【Android NDK 开发】Visual Studio 2019 使用 CMake 开发 JNI 动态库 ( 动态库编译配置 | JNI 头文件导入 | JNI 方法命名规范 )
  4. 全局变量用常量初始化----C和C++的不同
  5. 用stm32开发时是直接买现成的开发板还是芯片?开发板学习,芯片硬件设计
  6. 大数据标签获取处理步骤_大数据处理分为哪些步骤
  7. C++学习笔记:(七)C语言实现面向对象编程
  8. 【编程珠玑】内联函数和宏
  9. WPF调用OCX控件
  10. flask-script插件
  11. python pdb查看变量值_如何用pdb进行python调试
  12. python设计模式之Borg模式
  13. 介绍一款好玩且开源的机器人仿真软件Webots
  14. 解除谷歌浏览器默认禁止音频自动播放
  15. 普中科技51单片机-单核-A2开发板实现简易计算器功能(矩阵键盘操作+数码管显示)
  16. 用扫码枪收款钱到哪里_微信官方收款音箱,智能语音播报器,不受来电和信息干扰,老板不在也能正常播报,0费率无需蓝牙,面送赠送流量,真正的摆摊神器...
  17. 程序员新电脑常用软件安装
  18. 梯形图转化c语言,PLC梯形图转换成STL程序
  19. CKEditor/FCKEditor 使用-CKEditor(FCKeditor)精简版大全
  20. 《Security of GPS/INS based On-road Location Tracking Systems》论文翻译

热门文章

  1. 深入理解计算机系统(1.3)------操作系统的抽象概念
  2. 详解没有dSYM文件 如何解析iOS崩溃日志
  3. The most impressed error
  4. 【转】彻底删除打印机
  5. 20180925-1 每周例行报告
  6. vim ,vi总是卡死,终于找到原因了。
  7. jquery常用选择器和常用方法
  8. [转] Spring注解@Component、@Repository、@Service、@Controller区别
  9. POJ 1398 Complete the sequence! ★ (差分)
  10. Programming WCF Services翻译笔记(八)