目录

  • 主成分分析原理
    • 线性变换
    • 方差,协方差,协方差矩阵
    • 主成分分析
  • PCA计算过程与性质
  • PCA与SVD
  • PCA白化和ZCA白化

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

主成分分析原理

线性变换

假设有两个向量,则这两个向量的内积为:
(a1,a2,...,an)⋅(b1,b2,...,bn)T=a1b1+a2b2+...+anbn(a_{1},a_{2},...,a_{n})\cdot (b_{1},b_{2},...,b_{n})^{T}=a_{1}b_{1}+a_{2}b_{2}+...+a_{n}b_{n}(a1​,a2​,...,an​)⋅(b1​,b2​,...,bn​)T=a1​b1​+a2​b2​+...+an​bn​
向量AAA与BBB的内积等于AAA到BBB的投影长度乘以BBB的模,当∣B∣=1|B|=1∣B∣=1时,内积表示AAA向BBB所在直线的投影标量(标量有正负);

在一直习惯的直角坐标系中,向量 (3,2)(3,2)(3,2) 隐式引入了定义:以 xxx 轴和 yyy 轴上正方向长度为 1 的向量为标准;向量 (3,2)(3,2)(3,2) 实际是说在 xxx 轴投影为 3 ,而 yyy 轴的投影为 2;即用(3,2)(3,2)(3,2)分别与(1,0),(0,1)(1,0),(0,1)(1,0),(0,1)内积,得到投影的标量为3和2;这反映了:准确描述向量,首先要确定一组基,然后给出向量在基所在的各个直线上的投影值


通常要求基为正交基,比如两个基q1,q2q_{1},q_{2}q1​,q2​,有q1⋅q2T=0q_{1}\cdot q_{2}^{T}=0q1​⋅q2T​=0


对于直角坐标系下的向量(3,2)(3,2)(3,2),现在想把它变换到新的基(12,12)(\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})(2​1​,2​1​)与(−12,12)(-\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})(−2​1​,2​1​),其投影为:

推广:如果有 mmm 个二维向量,只要将二维向量按列排成一个两行 mmm 列矩阵,然后用“基矩阵”乘以这个矩阵就可以得到了所有这些向量在新基下的值;我们可以把它写成通用的表示形式:

pip_{i}pi​是行向量,表示第 iii 个基,aja_{j}aj​是列向量,表示第 jjj 个数据;两个矩阵相乘的意义是将右边矩阵中的每一列向量 aja_{j}aj​ 变换到左边矩阵中以每一行向量为基所表示的空间中去。即一个矩阵可以表示一种线性变换

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

上面的线性变换表达式反映了,选择不同的基可以对同样一组数据给出不同的表示,如果基的数量少于向量本身的维数,则可以达到降维的效果。如果有一组 NNN 维向量,现在要将其降到 KKK 维,应该如何选择 KKK 个基才能最大程度保留原有的信息?

一种直观的看法是:希望投影后的投影值尽可能分散,因为如果重叠就代表有样本消失的风险,比如一根轴上的数据,如果数据分散在轴上,则代表包含信息更多;当数据全部集中在轴上某点,代表看待数据的方向不正确,导致遗漏了大部分数据信息;


以上描述即:在旋转轴(基)时,想要最大化每个数据点到轴的投影;等价于最小化数据到轴的距离;对于直角坐标中的二维数据,即找到一根轴(一维基)可以实现最大信息地表达原数据,这个轴即主成分,主成分其实就是原始基的线性组合


方差可以描述数据的分散程度,一个变量的方差可以看做是每个元素与变量均值的差的平方和的均值,即:
Var(a)=1m∑i=1m(ai−μ)2Var(a)=\frac{1}{m}\sum_{i=1}^{m}(a_{i}-\mu)^{2}Var(a)=m1​i=1∑m​(ai​−μ)2
考虑到计算的化简,可以将数据进行平移,使得数据的均值为0,方差为:
Var(a)=1m∑i=1mai2Var(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)Cov(a,b)=\frac{1}{m-1}\sum_{i=1}^{m}(a_{i}-\mu_{a})(b_{i}-\mu_{b})Cov(a,b)=m−11​i=1∑m​(ai​−μa​)(bi​−μb​)
对于处理到均值为0后的数据,协方差计算为:
Cov(a,b)=1m−1∑i=1maibi≈1m∑i=1maibiCov(a,b)=\frac{1}{m-1}\sum_{i=1}^{m}a_{i}b_{i}\approx \frac{1}{m}\sum_{i=1}^{m}a_{i}b_{i}Cov(a,b)=m−11​i=1∑m​ai​bi​≈m1​i=1∑m​ai​bi​
当协方差为 0 时,表示两个变量完全独立。为了让协方差为 0,我们选择第二个基时只能在与第一个基正交的方向上进行选择,因此最终选择的两个方向一定是正交的;

至此,可得到目标:将一组 NNN 维向量降为 KKK 维,其目标是选择 KKK 个单位正交基,使得原始数据变换到这组基上后,相同特征之间方差越大越好,不同特征之间协方差越小越好

协方差矩阵可以统一方差与协方差的表达,对于一组变量{x1,x2,...,xnx_{1},x_{2},...,x_{n}x1​,x2​,...,xn​},协方差矩阵为:
C=(cij)n×n,cij=Cov(xi,xj)C=(c_{ij})_{n\times n},c_{ij}=Cov(x_{i},x_{j})C=(cij​)n×n​,cij​=Cov(xi​,xj​)
主对角线上的元素即为变量的方差,其余元素为协方差;

假设有 mmm 个 nnn 维数据,将其排列成矩阵 Xn,mX_{n,m}Xn,m​,设:
C=1mXXTC=\frac{1}{m}XX^{T}C=m1​XXT
则 CCC 是一个协方差矩阵,协方差矩阵是一个实对称矩阵;

主成分分析

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

目标即为获得 PPP,使 DDD 的对角线元素尽可能大,非对角线元素尽可能小;矩阵特征值分解可以实现矩阵对角化(将非对角线元素化为0),对 CCC 进行特征值分解;


实现对角阵的特征值分解可以使用SVD的特殊形式EVD,SVD回顾 其他算法-SVD奇异值分解


再根据特征值大小排序(特征值大小反映了特征向量的重要程度),从所有特征向量中选择前 KKK 行组成低维基 PPP

PCA计算过程与性质

假设有 mmm 个 nnn 维数据,PCA 的计算过程如下:

  • 将原始数据排列成矩阵 Xn,mX_{n,m}Xn,m​
  • 对XXX的每一行进行零均值化,即减去这一行对应的均值
  • 计算协方差矩阵 C=1mXXTC=\frac{1}{m}XX^{T}C=m1​XXT
  • EVD(SVD)分解协方差矩阵,即计算特征值与特征向量
  • 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前 KKK 行组成矩阵 PPP
  • 用Y=PXY=PXY=PX,得到降维后的数据YYY

PCA具有以下性质:

  • 缓解维度灾:PCA 通过舍去一部分信息之后能使维数降低,可以缓解维度灾;
  • 降噪:当数据受到噪声影响时,最小特征值对应的特征向量往往与噪声有关,将它们舍弃能在一定程度上起到降噪的效果;
  • 过拟合:PCA 保留了主要信息,但这个主要信息只是针对训练集的,而且这个主要信息未必是重要信息。有可能舍弃了一些看似无用的信息,但是这些看似无用的信息恰好是重要信息,只是在训练集上没有很大的表现,所以 PCA 也可能会加剧过拟合;
  • 特征独立:PCA 不仅将数据压缩到低维,它也使得降维之后的数据各特征相互独立;

PCA与SVD

PCA与SVD是两种不同的定义,两种算法都广泛用于数据降维;

在Sklearn中的PCA实际上是SVD,原因在于:当样本维度很高时,协方差矩阵计算太慢,另外,PCA其实和SVD的压缩效果相差不大;

PCA白化和ZCA白化

数据白化预处理是一种常见的数据预处理方法,作用是去除样本数据的冗余信息,即降低特征之间的相关性;白化分为PCA白化和ZCA白化;

PCA白化建立在PCA的部分内容上,PCA白化不需要进行降维,假设有 mmm 个 nnn 维数据,则PCA白化过程为:

  • 将原始数据排列成矩阵 Xn,mX_{n,m}Xn,m​
  • 对XXX的每一行进行零均值化,即减去这一行对应的均值
  • 计算协方差矩阵 C=1mXXTC=\frac{1}{m}XX^{T}C=m1​XXT
  • EVD(SVD)分解协方差矩阵,即计算特征值与特征向量
  • 将特征向量按对应特征值大小从上到下按行排列成矩阵,取所有行组成矩阵 UUU
  • 用X′=UXX'=UXX′=UX,得到去除特征相关性后的数据X′X'X′
  • 缩放数据X′X'X′:XPCAwhite,i=Xi′λiX_{PCAwhite,i}=\frac{X'_{i}}{\sqrt{\lambda_{i}}}XPCAwhite,i​=λi​​Xi′​​,其中,i∈i\ini∈{1,2,...,n1,2,...,n1,2,...,n},λi\lambda_{i}λi​为协方差矩阵分解时对角阵的第iii个特征值

XPCAwhiteX_{PCAwhite}XPCAwhite​即PCA白化处理后的数据,ZCA白化是在PCA白化后,将结果变换回原来的坐标系,使白化后的数据更接近原始数据,同时确保去除特征相关性,ZCA白化如下:
XZCAwhite=UTXPCAwhiteX_{ZCAwhite}=U^{T}X_{PCAwhite}XZCAwhite​=UTXPCAwhite​


特征值分解:A=QΣQTA=Q\Sigma Q^{T}A=QΣQT,QQQ为标准正交阵(满足QTQ=QQT=IQ^{T}Q=QQ^{T}=IQTQ=QQT=I),Σ\SigmaΣ为对角阵


其他算法-PCA主成分分析相关推荐

  1. 机器学习经典算法之PCA主成分分析

    PCA主成分分析法简介 主成分分析算法(PCA)是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中,并期望在所投影的维度上数据的信息量最大(方差最大),以此使用较少的数 ...

  2. pca各个向量之间的相关度_机器学习十大经典算法之PCA主成分分析

    PCA主成分分析法简介 主成分分析算法(PCA)是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中,并期望在所投影的维度上数据的信息量最大(方差最大),以此使用较少的数 ...

  3. 07_数据降维,降维算法,主成分分析PCA,NMF,线性判别分析LDA

    1.降维介绍 保证数据所具有的代表性特性或分布的情况下,将高维数据转化为低维数据. 聚类和分类都是无监督学习的典型任务,任务之间存在关联,比如某些高维数据的分类可以通过降维处理更好的获得. 降维过程可 ...

  4. PCA主成分分析算法专题【Python机器学习系列(十五)】

    PCA主成分分析算法专题[Python机器学习系列(十五)] 文章目录 1. PCA简介 2. python 实现 鸢尾花数据集PCA降维 3. sklearn库实现 鸢尾花数据集PCA降维案例    ...

  5. [学习笔记] [机器学习] 8. 聚类算法(聚类算法:K-means、K-means++;聚类算法评估;特征降维:特征选择(Pearson相关系数、Spearman相关系数)、PCA主成分分析)

    视频链接 数据集下载地址:无需下载 1. 聚类算法简介 学习目标: 掌握聚类算法实现过程 知道 K-means 算法原理 知道聚类算法中的评估模型 说明 K-means 的优缺点 了解聚类中的算法优化 ...

  6. 【数学与算法】PCA主成分分析(降维)的通俗理解

    1.PCA降维 PCA主成分分析简单的理解,就是把某物的很多个能直接获取到的特征,经过变换得到很多个新特征,这些新特征对该物体来说,有的影响很大,有的影响很小,只需要使用这些影响大的新特征,舍弃很多影 ...

  7. 统计学习方法第十六章作业:PCA主成分分析算法 代码实现

    PCA主成分分析 import numpy as np class PCA:def __init__(self,x,R=None):self.x = np.array(x)self.dim = sel ...

  8. 机器学习算法-PCA降维技术

    机器学习算法-PCA降维 一.引言 在实际的数据分析问题中我们遇到的问题通常有较高维数的特征,在进行实际的数据分析的时候,我们并不会将所有的特征都用于算法的训练,而是挑选出我们认为可能对目标有影响的特 ...

  9. pca 主成分分析_超越普通PCA:非线性主成分分析

    pca 主成分分析 TL;DR: PCA cannot handle categorical variables because it makes linear assumptions about t ...

最新文章

  1. Java中BigDecimal工具类(支持空值运算版)
  2. MyBatis查询两个字段,返回Map,一个字段作为key,一个字段作为value的实现
  3. 年月日_C++计算输入的年月日是这一年的第几天
  4. VTK:PolyData之WeightedTransformFilter
  5. 远程办公首日企业通讯软件崩溃、紧急扩容,云办公怎么了?
  6. OllyDbg笔记-初识PE文件(nag窗口破解)
  7. js基础知识汇总12
  8. android默认壁纸的历史,Android 默认壁纸 简单分析
  9. Java 中的十大排序算法
  10. 来自ThoughtWorks肖然的推荐
  11. 微信群成员活跃度测试软件,微信群活跃度最佳人数是多少?
  12. STM32F103_study50_The punctual atoms(STM32 General timer basic principle )
  13. 左右广告悬浮框html,js 左右悬浮对联广告特效代码
  14. 法卡斯定理(Fakars' Lemma)
  15. JSP界面——背景图片
  16. css涟漪光圈扩散_CSS3动画之:水波涟漪般的定位样式
  17. 篮球与计算机技术,浅析计算机技术应用对高校篮球教学的作用与影响
  18. POJ 2942 Knights of the Round Table (奇圈+点双联通)
  19. 关于调用阿里云短信服务接口实现短信验证码的过程
  20. Java中apple导入那个包_在Java中,由Java编泽器自动导入而无需在程序中用import导入的包是()。A.java.appletB.java.awtC.j...

热门文章

  1. Java 未死,依然很牛逼!
  2. 想读Spring源码?先从这篇「 极简教程」开始
  3. 面对疫情,在家办公的程序员如何突围
  4. 暴风前员工替冯鑫惋惜,是公司的老白兔员工害了他
  5. 说实话你现在有多少存款?清华北大毕业生晒出了自己的收入
  6. 想要准备阿里/百度/腾讯/美团的面试?了解一下
  7. 5、找出100到1000内的不含9的素数,存到result.txt文件中
  8. 转帖:那个神一样的大爷
  9. 二叉树-对称的二叉树(递归法)
  10. 字符串相关的类String