PCA(Principal Component Analysis) 是一种常见的数据分析方式,常用于高维数据的降维,可用于提取数据的主要特征分量。

维数灾难

维数灾难(Curse of Dimensionality):通常是指在涉及到向量的计算的问题中,随着维数的增加,计算量呈指数倍增长的一种现象。

在机器学习中,随着数据集维数的增加,数据的计算量将呈几何倍数增加,同时样本间的距离会远远增大,这将导致样本数据失去其意义。

为了减少计算量、增加准确度,我们有必要按照一定的规则去除一些维度 (特征),这便是降维算法。PCA 算法就是机器学习中的典型降维算法。

PCA

基变换

二维坐标系

考虑二维坐标 (3, 2),它有什么数学意义?

如果仔细思考,二维坐标的两个值实际上是在 x 轴和 y 轴上的投影。

这里的 x 轴单位方向 (1,0) 和 y 轴单位方向 (0,1) 就是所谓的一组基。

基变换矩阵

如果把上面的例子通过矩阵表示:
(1001)(32)=(32)\begin{pmatrix} 1 & 0 \\ 0 & 1 \\ \end{pmatrix} \begin{pmatrix} 3 \\ 2 \\ \end{pmatrix}= \begin{pmatrix} 3 \\ 2 \\ \end{pmatrix} (10​01​)(32​)=(32​)
那如果基不是坐标轴呢?

比如一组基为:
(12,12),(−12,12)(\frac{1}{\sqrt2},\frac{1}{\sqrt2}),(-\frac{1}{\sqrt2},\frac{1}{\sqrt2}) (2​1​,2​1​),(−2​1​,2​1​)
此时通过矩阵运算:
(1212−1212)(32)=(52−12)\begin{pmatrix} \frac{1}{\sqrt2}&\frac{1}{\sqrt2} \\ -\frac{1}{\sqrt2}&\frac{1}{\sqrt2} \\ \end{pmatrix} \begin{pmatrix} 3 \\ 2 \\ \end{pmatrix}= \begin{pmatrix} \frac{5}{\sqrt2} \\ -\frac{1}{\sqrt2} \\ \end{pmatrix} (2​1​−2​1​​2​1​2​1​​)(32​)=(2​5​−2​1​​)
便可以得到该组基下的坐标:
(52,−12)(\frac{5}{\sqrt2},-\frac{1}{\sqrt2}) (2​5​,−2​1​)
把上面的矩阵写成一般形式:
(p11p12…p1np21p22…p2n⋮⋮⋱⋮pr1pr2…prn)(a11a12…a1ma21a22…a2m⋮⋮⋱⋮an1an2…anm)\begin{pmatrix} p_{11}&p_{12}&\dots&p_{1n}\\ p_{21}&p_{22}&\dots&p_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ p_{r1}&p_{r2}&\dots&p_{rn}\\ \end{pmatrix} \begin{pmatrix} a_{11}&a_{12}&\dots&a_{1m}\\ a_{21}&a_{22}&\dots&a_{2m}\\ \vdots&\vdots&\ddots&\vdots\\ a_{n1}&a_{n2}&\dots&a_{nm}\\ \end{pmatrix} ⎝⎜⎜⎜⎛​p11​p21​⋮pr1​​p12​p22​⋮pr2​​……⋱…​p1n​p2n​⋮prn​​⎠⎟⎟⎟⎞​⎝⎜⎜⎜⎛​a11​a21​⋮an1​​a12​a22​⋮an2​​……⋱…​a1m​a2m​⋮anm​​⎠⎟⎟⎟⎞​

=(P1P2⋮PR)(A1A2…AM)=(P1A1P1A2…P1AMP2A1P2A2…P2AM⋮⋮⋱⋮PRA1PRA2…PRAM)=\begin{pmatrix} P_1\\ P_2\\ \vdots\\ P_R\\ \end{pmatrix} \begin{pmatrix} A_1&A_2&\dots&A_M \end{pmatrix}= \begin{pmatrix} P_1A_1&P_1A_2&\dots&P_1A_M\\ P_2A_1&P_2A_2&\dots&P_2A_M\\ \vdots&\vdots&\ddots&\vdots\\ P_RA_1&P_RA_2&\dots&P_RA_M\\ \end{pmatrix} =⎝⎜⎜⎜⎛​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​ 是一组行向量,表示一个基
  • AiA_iAi​ 是一组列向量,表示一个坐标 (样本)

最大可分性

最大可分性是 PCA 算法的原则,即:

  • 样本尽可能分散
  • 样本之间尽可能不相关

为此,可以考虑两个数学概念:

  • 方差,衡量数据的偏离程度。为使样本分散,方差应尽可能大。

Var(a)=1m∑i=1m(ai−μ)2Var(a)=\frac1m\sum_{i=1}^m(a_i-\mu)^2 Var(a)=m1​i=1∑m​(ai​−μ)2

  • 协方差,衡量两组数据的相关性。为使样本之间不相关,协方差应尽可能小。

Cov(a,b)=1m∑i=1m(ai−μa)(bi−μb)Cov(a,b)=\frac{1}{m}\sum_{i=1}^m(a_i-\mu_a)(b_i-\mu_b) Cov(a,b)=m1​i=1∑m​(ai​−μa​)(bi​−μb​)

去中心化

为了简化计算,可以事先将均值作为坐标轴的中心。这样一来,均值都为 0,公式可简化为:
Var(a)=1m∑i=1mai2Var(a)=\frac1m\sum_{i=1}^ma_i^2 Var(a)=m1​i=1∑m​ai2​

Cov(a,b)=1m∑i=1maibiCov(a,b)=\frac{1}{m}\sum_{i=1}^ma_ib_i Cov(a,b)=m1​i=1∑m​ai​bi​

协方差矩阵

如果有 a 和 b 两组数据,排列成矩阵:
X=(a1a2…amb1b2…bm)X=\begin{pmatrix} a_1&a_2&\dots&a_m\\ b_1&b_2&\dots&b_m\\ \end{pmatrix} X=(a1​b1​​a2​b2​​……​am​bm​​)
则有
1mXXT=(1m∑i=1mai2∑i=1maibi1m∑i=1mbiai∑i=1mbi2)\frac1mXX^T=\begin{pmatrix} \frac1m\sum_{i=1}^ma_i^2&\sum_{i=1}^ma_ib_i\\ \frac1m\sum_{i=1}^mb_ia_i&\sum_{i=1}^mb_i^2\\ \end{pmatrix} m1​XXT=(m1​∑i=1m​ai2​m1​∑i=1m​bi​ai​​∑i=1m​ai​bi​∑i=1m​bi2​​)

=(Var(a)Cov(a,b)Cov(b,a)Var(b))=\begin{pmatrix} Var(a)&Cov(a,b)\\ Cov(b,a)&Var(b)\\ \end{pmatrix} =(Var(a)Cov(b,a)​Cov(a,b)Var(b)​)

这样两个变量的方差和协方差就被统一在矩阵里。

如果有 n 组数据,同样可以得到一个 n 维的协方差矩阵,这个矩阵可以反映任意一组数据的分散程度和任意两组数据的相关性。

矩阵对角化

考虑最大可分性,我们的目标是找到一组基,使得原矩阵经过基变换后的协方差 (非对角线元素) = 0,而方差 (对角线上的元素) 从大到小排列 (左上最大),因为基变换时如果要降维,越下方的基越不会被考虑到,其权重应尽量小。

设原始数据矩阵 X 对应协方差矩阵为 C=1mXXTC=\frac1mXX^TC=m1​XXT.

设 Y = PX,其中 P 是一组基组成的矩阵,则 Y 是 X 在 P 上做基变换得到的矩阵。

设 Y 的协方差矩阵为 D=1mYYTD=\frac1mYY^TD=m1​YYT.

要如何得到 P 呢?

可以推导:
D=1mYYT=1m(PX)(PX)T=1mPXXTPTD=\frac1mYY^T=\frac1m(PX)(PX)^T=\frac1mPXX^TP^T D=m1​YYT=m1​(PX)(PX)T=m1​PXXTPT

=P1mXXTPT=PCPT=P\frac1mXX^TP^T=PCP^T =Pm1​XXTPT=PCPT

原问题就相当于寻找一个矩阵 P,满足 PCPTPCP^TPCPT 是一个对角矩阵,并且对角元素从大到小排列。

注意到协方差矩阵是实对称对称,而实对称矩阵具有优秀的性质:

  • 实对称矩阵不同特征值对应的特征向量必然正交
  • 实对称矩阵一定可以相似对角化
  • 若实对称矩阵具有 k 重特征值λ0λ_0λ0​,必有 k 个线性无关的特征向量

因此,一个 n×nn\times nn×n 的实对称矩阵一定有 n 个单位正交的特征向量 e1,e2,…,ene_1,e_2,\dots,e_ne1​,e2​,…,en​.

若组成矩阵
E=(e1e2…en)E=\begin{pmatrix} e_1&e_2&\dots&e_n \end{pmatrix} E=(e1​​e2​​…​en​​)
则有
ETCE=Λ=(λ1λ2⋱λn)E^TCE=\Lambda=\begin{pmatrix} \lambda_1&&&\\ &\lambda_2&&\\ &&\ddots&\\ &&&\lambda_n\\ \end{pmatrix} ETCE=Λ=⎝⎜⎜⎛​λ1​​λ2​​⋱​λn​​⎠⎟⎟⎞​
则我们要求的 P,就是 ETE^TET

根据特征值从大到小,将特征向量从上到下排列。则 P=ETP=E^TP=ET 的前 k 行与原始数据矩阵 X 进行基变换,就得到了降维后的矩阵 Y.

PCA 的步骤

  • 将原始数据按列组成 $n\times m $ 的矩阵 X
  • 对 X 去中心化,即去除均值
  • 求出协方差矩阵 C=1mXXTC=\frac1mXX^TC=m1​XXT
  • 求出协方差矩阵的特征值和对应的特征向量 e1,e2,…,ene_1,e_2,\dots,e_ne1​,e2​,…,en​
  • 将特征向量按对应特征值大小从上到下按行排成矩阵 E
  • 取 E 的前 k 行作为矩阵 P
  • 进行基变换 Y=PXY=PXY=PX 实现降维

举例

X1X_1X1​ X2X_2X2​ X3X_3X3​
2 0 -1.4
2.2 0.2 -1.5
2.4 0.1 -1
1.9 0 -1.2

首先求出三个维度 (特征) 的均值:
Var(X1)=2.125Var(X_1)=2.125 Var(X1​)=2.125

Var(X2)=0.075Var(X_2)=0.075 Var(X2​)=0.075

Var(X3)=−1.275Var(X_3)=-1.275 Var(X3​)=−1.275

去中心化处理:

X1X_1X1​ X2X_2X2​ X3X_3X3​
-0.125 -0.075 -0.125
0.075 0.125 -0.225
0.275 0.025 0.275
-0.225 -0.075 0.075

此时各维度的均值被化为 0.

得到矩阵:
X=(−0.125−0.075−0.1250.0750.125−0.2250.2750.0250.275−0.225−0.0750.075)X=\begin{pmatrix} -0.125&-0.075&-0.125\\ 0.075&0.125&-0.225\\ 0.275&0.025&0.275\\ -0.225&-0.075&0.075\\ \end{pmatrix} X=⎝⎜⎜⎛​−0.1250.0750.275−0.225​−0.0750.1250.025−0.075​−0.125−0.2250.2750.075​⎠⎟⎟⎞​

计算协方差矩阵:
C=13XTXC=\frac13X^TX C=31​XTX

C =0.0492    0.0142    0.01920.0142    0.0092   -0.00580.0192   -0.0058    0.0492

求出协方差矩阵的特征值和对应的特征向量:

V =-0.7300   -0.5747    0.3700-0.1071   -0.4385   -0.8924-0.6750    0.6910   -0.2585D =0.0690         0         00    0.0369         00         0    0.0016

特征值从大到小:
λ1=0.0690,λ2=0.0369,λ3=0.0016\lambda_1=0.0690,\lambda_2=0.0369,\lambda_3=0.0016 λ1​=0.0690,λ2​=0.0369,λ3​=0.0016
分别对应特征向量:
e1=(−0.7300−0.1071−0.6750),e2=(−0.5747−0.43850.6910),e3=(0.3700−0.8924−0.2585)e_1=\begin{pmatrix} -0.7300\\ -0.1071\\ -0.6750\\ \end{pmatrix}, e_2=\begin{pmatrix} -0.5747\\ -0.4385\\ 0.6910\\ \end{pmatrix}, e_3=\begin{pmatrix} 0.3700\\ -0.8924\\ -0.2585\\ \end{pmatrix} e1​=⎝⎛​−0.7300−0.1071−0.6750​⎠⎞​,e2​=⎝⎛​−0.5747−0.43850.6910​⎠⎞​,e3​=⎝⎛​0.3700−0.8924−0.2585​⎠⎞​
取前 k 个特征向量,假设 k=2k = 2k=2,则有基变换矩阵 P:
P=(e1Te2T)=(−0.7300−0.1071−0.6750−0.5747−0.43850.6910)P=\begin{pmatrix} e_1^T\\ e_2^T\\ \end{pmatrix} =\begin{pmatrix} -0.7300&-0.1071&-0.6750\\ -0.5747&-0.4385&0.6910\\ \end{pmatrix} P=(e1T​e2T​​)=(−0.7300−0.5747​−0.1071−0.4385​−0.67500.6910​)
进行基变换 YT=PXTY^T=PX^TYT=PXT:
Y=(0.18370.0184−0.22000.0576−0.38910.02100.12170.2140)Y=\begin{pmatrix} 0.1837&0.0184\\ -0.2200&0.0576\\ -0.3891&0.0210\\ 0.1217&0.2140\\ \end{pmatrix} Y=⎝⎜⎜⎛​0.1837−0.2200−0.38910.1217​0.01840.05760.02100.2140​⎠⎟⎟⎞​
降维前后效果 (降维前为蓝色,降维后为红色):

取前 k 个特征向量,假设 k=2k = 2k=2,则有基变换矩阵 P:
P=(e1Te2T)=(−0.7300−0.1071−0.6750−0.5747−0.43850.6910)P=\begin{pmatrix} e_1^T\\ e_2^T\\ \end{pmatrix} =\begin{pmatrix} -0.7300&-0.1071&-0.6750\\ -0.5747&-0.4385&0.6910\\ \end{pmatrix} P=(e1T​e2T​​)=(−0.7300−0.5747​−0.1071−0.4385​−0.67500.6910​)
进行基变换 YT=PXTY^T=PX^TYT=PXT:
Y=(0.18370.0184−0.22000.0576−0.38910.02100.12170.2140)Y=\begin{pmatrix} 0.1837&0.0184\\ -0.2200&0.0576\\ -0.3891&0.0210\\ 0.1217&0.2140\\ \end{pmatrix} Y=⎝⎜⎜⎛​0.1837−0.2200−0.38910.1217​0.01840.05760.02100.2140​⎠⎟⎟⎞​
降维前后效果 (降维前为蓝色,降维后为红色):

【机器学习自学笔记7】主成分分析(PCA)相关推荐

  1. 机器学习系列笔记六:主成分分析PCA[下]

    机器学习系列笔记六:主成分分析PCA[下] 文章目录 机器学习系列笔记六:主成分分析PCA[下] scikit-learn中的PCA 基本使用 进阶操作 对比实验 设置合理的n_components ...

  2. 【机器学习自学笔记4】朴素贝叶斯分类器

    title: [机器学习自学笔记4]朴素贝叶斯分类器 date: 2020-10-29 18:34:29 categories: 机器学习 tags: 机器学习 概率论 贝叶斯分类是一类分类算法的总称 ...

  3. 基于Java机器学习自学笔记(第81-87天:CNN卷积神经网络的入门到全代码编写)

    注意:本篇为50天后的Java自学笔记扩充,内容不再是基础数据结构内容而是机器学习中的各种经典算法.这部分博客更侧重于笔记以方便自己的理解,自我知识的输出明显减少,若有错误欢迎指正! 目录 1. CN ...

  4. 基于 Java 机器学习自学笔记 (第63-65天:集成学习之AdaBoost)

    注意:本篇为50天后的Java自学笔记扩充,内容不再是基础数据结构内容而是机器学习中的各种经典算法.这部分博客更侧重于笔记以方便自己的理解,自我知识的输出明显减少,若有错误欢迎指正! 目录 一.关于集 ...

  5. 基于 Java 机器学习自学笔记 (第61-62天:ID3决策树)

    注意:本篇为50天后的Java自学笔记扩充,内容不再是基础数据结构内容而是机器学习中的各种经典算法.这部分博客更侧重于笔记以方便自己的理解,自我知识的输出明显减少,若有错误欢迎指正! 目录 一.关于决 ...

  6. 吴恩达机器学习 EX7 第二部分 主成分分析(PCA)

    2 主成分分析 主成分分析通过协方差矩阵提取数据的主要成分,如90%的成分,通常用户数据压缩和数据可视化(维度降低方便可视化) 2.1 导入模块和数据 该部分通过将二维数据压缩成一维数据演示主成分分析 ...

  7. 吴恩达|机器学习作业7.1.主成分分析(PCA)

    7.1.主成分分析对人脸图像降维 1)题目: 在这个练习中,你将运用主成分分析(PCA)来实现降维.首先,你将用一个二维的样本集来实验,从而对PCA如何运行的有一个直观的感受,然后再在一个更大的由50 ...

  8. 百面机器学习 自学笔记

    第一章   特征工程 ①②③④⑤⑥⑦⑧⑨ 1.常用特征归一化 特征归一化 ①线性函数归一化(Min-Mac Scaling):对原始数据进行线性变换,使结果映射到[0,1]的范围,实现对原始数据的等比 ...

  9. 机器学习读书笔记之10 - PCA

    通常在特征提取过程中,会遇到一个很严重的问题,那就是特征维度过多,实际上这些特征对于 表示和分类的贡献度不同,那么哪些特征是重要的?哪些是次要的呢? 这时轮到PCA出场了(想必早已名声在外),PCA即 ...

最新文章

  1. 结构光测距相位差_ROHM确立新型VCSEL模块技术 有助于提高测距精度
  2. 源码推荐:基于uni-app前端框架,开源版本还开源免费商用
  3. modelsim读取文件中的数据_modelsim中的文件操作—— 大数据测试
  4. python语言命名规定首字符不能是_python标识符命名规范原理解析
  5. 使用Subversion进行版本控制 附录A
  6. 6.042 Mathematics for Computer Science
  7. [20170623]利用传输表空间恢复数据库2.txt
  8. 《软件工程(第4版?修订版)》—第2章2.9节本章对研究人员的意义
  9. 坐标轨迹计算_【老杨讲坛】737NG无系留最大风速限制的插值计算
  10. 探秘联想台北研发中心 扒一扒system x是如何炼成的?
  11. eclipse java字体 太小,如何在Eclipse for Java文本编辑器中更改字体大小?
  12. bytes和string 与 “w“/“r“ “wb“/“rb“的对应关系
  13. Eclipse代码自动生成
  14. 高级shell编程讲解
  15. java的swing案例
  16. ThinkPHP6敏捷后台开发框架
  17. uib-datepicker-popup使用
  18. 第三方支付回调地址代理转发
  19. 戴尔服务器找不到启动项,一个可以解决戴尔笔记本重装系统找不到引导或硬盘启动项方法...
  20. 出国计算机相关专业,加拿大计算机相关专业解析

热门文章

  1. 流感传染(C程序设计进阶第2周)
  2. Telegram为TON网络推出新的编程语言
  3. 仿滴滴打车地图选点(包含地图选点,离线地图,导航路线)
  4. 网络编程基础 - m
  5. 快速入门FTP服务器:手把手教你搭建
  6. 50个好用的前端工具,建议收藏!
  7. Sangria:PLONK + Folding
  8. 【淘宝SEO技巧】深度揭秘淘宝搜索排名算法模型
  9. 如何获取国外动态住宅ip并使用?
  10. swift MT报文处理相关资料