PCA主成分分析

本文链接:https://blog.csdn.net/luoluonuoyasuolong/article/details/90711318

PCA 用来干什么?

PCA呀,用来做什么呢?这个很重要,PCA也有很多应用,可能我们之前听过用PCA做人脸识别,PCA做异常检测等等。但事实上PCA没有那么强大的功能,PCA能做的事其实很有限,那就是:降维。其他拓展应用都是在这基础上做了相应额工作。为什要降维呢?很明显,数据中有些内容没有价值,这些内容的存在会影响算法的性能,和准确性。

如上图,数据点大部分都分布在x2方向上,在x1方向上的取值近似相同,那么对于有些问题就可以直接将x1坐标的数值去掉,只取x2坐标的值即可。但是有些情况不能直接这样取,例如:

上图的数据分布在x1和x2方向都比较均匀,任一去掉一个坐标的数值可能对结果都会有很大的影响。这个时候就是PCA展现作用的时候了。黑色坐标系是原始坐标系,红色坐表系是我后面构建的坐标系,如果我的坐标系是红色的,那么这个问题是不是就和上面那个问题一样了,我只需要去掉y2坐标系的数据即可。实际上黑色坐标系和红色坐标系是等价的,差异仅仅是在空间中他们的基不同,黑色坐标系的基是我们最习惯的(1, 0), (0, 1),红色坐标系的基是(1, 1),(-1, -1),事实上,他们是等价的,只不过经常默认使用的就是黑色坐标系。主成分分析可以让数据的投影到那些数据分布比较分散的平面上,比如上图的y1,从而忽视y2的作用,进而达到降维的目的。

PCA 数学原理

为了达到目的,可以不择手段

上面我们说PCA可以将数据投影到分布分散的平面内,而忽略掉分布集中的平面。我们可以这样理解,如上面的图2,大部分数据投影到y1坐标系中的化,数据分布会比较分散,投影到x1、x2等其他坐标轴分布会相对集中,其中,投影到y2上面分布最集中。所以我们尽可能将数据转化到红色坐标系,然后去掉y2坐标。好了,问题描述完了,该想象怎样才能达到这样的目的。

任何形式的变化在数学上都可以抽象成一个映射,或者函数。好,现在我们需要构建一个函数f ( X m × n ) f(X_{m\times n})f(Xm×n​)使得这个函数可以将矩阵X m × n X_{m\times n}Xm×n​降维,矩阵X XX是原始数据,矩阵的每一行是一个样本的特征向量,即矩阵X m × n X_{m\times n}Xm×n​中有m个样本,每个样本有n个特征值。所以,所谓的降维,其实是减少n的数量。
假设降维后的结构为Z m × k Z_{m \times k}Zm×k​,其中k < n k < nk<n
那么PCA的数学表达可以这样表示:
Z m × k = f ( X m × n ) , k < n Z_{m\times k} = f(X_{m\times n}), k < nZm×k​=f(Xm×n​),k<n

这里可能比较抽象,我尽量说得有趣:

开始数学了,手段是数学

为了找到上面说的f ( x ) f(x)f(x)我们需要做一些工作,在线性空间中,矩阵可以表示为一种映射,所以上面的问题可以转化为寻找这样一个矩阵W WW,该矩阵可以实现上面的映射目的:
Z m × k = X m × n W n × k Z_{m\times k} = X_{m\times n}W_{n\times k}Zm×k​=Xm×n​Wn×k​
都进行转秩吧,看着舒服,一般映射是放在左边的:

Z k × m = W k × n X n × m Z_{k\times m} = W_{k\times n}X_{n\times m}Zk×m​=Wk×n​Xn×m​

现在假设我们要把矩阵的维数降为1,也就是最后每个样本只有一个属性,即k = 1 k=1k=1。
目标是使降维后的数据在那个坐标轴中的分布尽可能分散,数据的分布的离散程度我们用方差来衡量。
现在我们的目标:
z = w x z=wxz=wx

最大化新坐标轴上的方差,就是让数据更加分散:
max ⁡ w 1 m ∑ i m ( z i − z ˉ ) 2 s . t .      ∥ W ∥ 2 = 1 \max\limits_{w}\frac{1}{m}\sum\limits_{i}^{m}(z_i - \bar{z})^2 \newline s.t. \ \ \ \ \lVert W \rVert_2 = 1wmax​m1​i∑m​(zi​−zˉ)2s.t.    ∥W∥2​=1

将上面的优化问题转化一下:
max ⁡ w 1 m ∑ i m ( z i − z ˉ ) 2 = max ⁡ w 1 m ∑ i m ( w x i − w x ˉ ) 2 = max ⁡ w 1 m ∑ i m ( w ( x i − x ˉ ) ) ( w ( x i − x ˉ ) ) T = max ⁡ w 1 m ∑ i m ( w ( x i − x ˉ ) ( x i − x ˉ ) T w T ) T = max ⁡ w 1 m w ∑ i m ( x i − x ˉ ) ( x i − x ˉ ) T w T max ⁡ w 1 m w C o v ( x ) w T \max\limits_{w}\frac{1}{m}\sum\limits_{i}^{m}(z_i - \bar{z})^2 \newline = \max\limits_{w}\frac{1}{m}\sum\limits_{i}^{m}(wx_i - w\bar{x})^2 \newline = \max\limits_{w}\frac{1}{m}\sum\limits_{i}^{m}(w(x_i - \bar{x}))(w(x_i - \bar{x}))^T \newline = \max\limits_{w}\frac{1}{m}\sum\limits_{i}^{m}(w(x_i - \bar{x})(x_i - \bar{x})^Tw^T)^T \newline = \max\limits_{w}\frac{1}{m}w\sum\limits_{i}^{m}(x_i - \bar{x})(x_i - \bar{x})^Tw^T \newline \max\limits_{w}\frac{1}{m}wCov(x)w^Twmax​m1​i∑m​(zi​−zˉ)2=wmax​m1​i∑m​(wxi​−wxˉ)2=wmax​m1​i∑m​(w(xi​−xˉ))(w(xi​−xˉ))T=wmax​m1​i∑m​(w(xi​−xˉ)(xi​−xˉ)TwT)T=wmax​m1​wi∑m​(xi​−xˉ)(xi​−xˉ)TwTwmax​m1​wCov(x)wT

最终的目标转化为:
max ⁡ w 1 m w C o v ( x ) w T s . t .    ∥ w ∥ 2 = 1 \max\limits_{w}\frac{1}{m}wCov(x)w^T \newline s.t. \ \ \lVert w\rVert _2 = 1wmax​m1​wCov(x)wTs.t.  ∥w∥2​=1
C o v ( x ) Cov(x)Cov(x)是矩阵x xx的协防差阵。
利用lagrange multiplier 方法求解上面问题

L = max ⁡ w 1 m w C o v ( x ) w T + α ( ∥ w ∥ 2 − 1 ) = max ⁡ w 1 m w C o v ( x ) w T + α ( w T w − 1 ) L = \max\limits_{w}\frac{1}{m}wCov(x)w^T + \alpha (\lVert w \rVert _2 -1 )\newline = \max\limits_{w}\frac{1}{m}wCov(x)w^T + \alpha (w^Tw - 1)L=wmax​m1​wCov(x)wT+α(∥w∥2​−1)=wmax​m1​wCov(x)wT+α(wTw−1)
这里解释一下为什么要限制∥ w ∥ 2 = 1 \lVert w \rVert_2 = 1∥w∥2​=1,如果不这样限制,那么问题
max ⁡ w 1 m w C o v ( x ) w T s . t .    ∥ w ∥ 2 = 1 \max\limits_{w}\frac{1}{m}wCov(x)w^T \newline s.t. \ \ \lVert w\rVert _2 = 1wmax​m1​wCov(x)wTs.t.  ∥w∥2​=1
直接取w = ( ∞ , ∞ , . . . , ∞ ) w = (\infty, \infty, ..., \infty)w=(∞,∞,...,∞)即可满足最大,那这样没有任何意义,所以这个限制条件是非常有用的。

通过求解 Lagrange 函数,得到结果为
C o v ( x ) w − α w = 0 Cov(x)w - \alpha w = 0Cov(x)w−αw=0

令C o v ( x ) = S Cov(x) = SCov(x)=S,S w − α w = 0 Sw - \alpha w = 0Sw−αw=0正好是特征值的定义,也就是α \alphaα是矩阵S SS的特征值,w ww是矩阵S SS的特征向量。但是特征值那么多,w ww到底是那个特征值呢?
max ⁡ w 1 m w S w T = max ⁡ w w T S T w = max ⁡ w w T α w = α max ⁡ w w T w = α \max\limits_{w}\frac{1}{m}wSw^T \newline = \max\limits_{w}w^TS^Tw \newline = \max\limits_{w}w^T\alpha w \newline = \alpha \max\limits_{w}w^Tw \newline = \alphawmax​m1​wSwT=wmax​wTSTw=wmax​wTαw=αwmax​wTw=α

所以,要想最大化那个问题,就需要找到最大特征值。
同样道理,如果是需要将数据映射为2维数据,还是求解上述的最大化方差,但是需要加一个约束条件:w 1 ⋅ w 2 = 0 w_1\cdot w_2 = 0w1​⋅w2​=0,同样的思路,最终求解出w 2 w_2w2​是第二大特征值对应的特征向量。更高维的计算以此类推。

经过上面一番推理,我们知道了PCA的原理,但是要记住PCA用途很广,但需要记住不是什么时候都可以用到PCA的,由证明过程我们知道PCA其实是有很多限制的。比如,可以做PCA降维的前提必须保证数据是线性分布的,如果数据不是线性的,比如下图这样的

数据分布不是线性的,用PCA效果可能就不会很理想。

PCA 用编程实现的流程

经过上面原理的推倒我们可以总结一下,真正进行PCA实际操作的时候都要经过哪些步骤?

  1. 整理原始矩阵X m × n X_{m\times n}Xm×n​
  2. 求原始矩阵X m × n X_{m \times n}Xm×n​的协防差阵S m × m = C o v ( X ) S_{m\times m}=Cov(X)Sm×m​=Cov(X)
  3. 求解协防差阵的特征值和特征向量。
  4. 选取最大的K KK(人为给定)个特征值所对应的特征向量组成构成矩阵W n × k W_{n\times k}Wn×k​
  5. 直接进行矩阵计算Z m × k = X m × n W n × k Z_{m\times k} = X_{m\times n}W_{n\times k}Zm×k​=Xm×n​Wn×k​

流程很明确,那具体的编程要怎么做呢?难点在哪?

难点1:协防差矩阵的计算

假设原始矩阵为X m × n X_{m\times n}Xm×n​,原始矩阵的各个属性的均值向量为X ˉ \bar{X}Xˉ
协防差距阵的计算如下:
C o v ( X ) = 1 m ( X − X ˉ ) T ( X − X ˉ ) Cov(X) = \frac{1}{m}(X-\bar{X})^T(X-\bar{X})Cov(X)=m1​(X−Xˉ)T(X−Xˉ)
这样用程序就非常好实现了。

难点2:特征值和特征向量的求解

特征值和特征向量这里的内容比较多,虽然有很多算法可以计算特征值和特征向量,但是其背后的数学原理着实有点复杂,记得有本书叫矩阵论,特征值和特征向量的计算方法和原理都可以在上面找到,惭愧的是,我也搞不懂。听说有什么QR算法、Jocobi方法、SVD等,似乎是一些矩阵分解的理论。这个还需要再好好学学才能继续吹牛,所以现在不能随便吹。

PCA等价于只包含一个隐层的神经网络

李宏毅老师的视频里用另外一种视角解释PCA,但是我觉得还是没有听明白,具体的关系,我觉得是老师没讲明白,其中最难以理解的就是x − x ˉ x-\bar{x}x−xˉ和x ^ \hat{x}x^计算重构误差,为什么??

所以这个理论还有待挖掘。

PCA和AutoEncoder的关系

  1. PCA限制多,要求数据是线性分布的,AutoEncoder可以解决非线性降维问题
    《Reducing the Dimensionality of Data with Neural Networks》这篇论文中有详细介绍:
    下面是论文中实验的结果:

同样的数据,第一个图是PCA降维到2-D平面上的结果,第二个图是AutoEncoder降维到2-D平面上的结果。从结果中也可以明显的看出AutoEncoder降维后对数据的分布仍然有明显的区分,而PCA的结果却有点令人失望,好象是揉成了一团。

  1. PCA理论基础更强,AutoEncoder可解释性差
    AutoEncoder通过挖掘潜在特性提高模型性能,但这些模糊的特性或许会对知识发现的结果产生不良影响。

  2. PCA计算速度更快,AutoEncoder好不好,需要做实验验证

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值