为您推荐:
精华内容
最热下载
问答
  • 3星
    2.85MB weixin_42696333 2021-09-10 19:45:30
  • PCA 各位,久违了~ 什么是PCA? 什么是PCA呢?这是一个问题,什么样的问题?简单而又复杂的问题,简单是因为百度一下就会出现一大堆的解释,复杂是因为它里面蕴含的内容还是很多的,值得我们仔细研究研究。 PCA 取...

    PCA

    各位,久违了~

    什么是PCA?

    什么是PCA呢?这是一个问题,什么样的问题?简单而又复杂的问题,简单是因为百度一下就会出现一大堆的解释,复杂是因为它里面蕴含的内容还是很多的,值得我们仔细研究研究。

    PCA 取自其英文的三个单词的首字母:Principle component analysis。中文名字:主成分分析。恐怕大家很早就知道PCA是个什么东东,并且还用过matlab、python、C++等语言的各类机器学习算法包中的PCA函数进行数据处理。即便是没有自己写过这个PCA的程序可能也看过好多博客告诉我们:首先预处理数据,然后计算矩阵X的协防差阵。然后计算协防差阵的特征值和特征向量,最后根据特征值和特征向量建立一个映射矩阵…吧喇叭啦,一大堆的东西。然后感觉用编程实现这个过程应该也不是很难吧,然后就觉得自己会了PCA了,哈哈。

    坦白说,上面是我的经历,并不是别人的经历,所以很惭愧,这个经历并不是很好,说实话,经过上面的经历我其实还是不知道什么是主成分分析,PCA对我来讲只是一个名字而已。但是为什么今天要写这篇文章呢?这是有原因的,因为之前看视频的时候发现视频中老师在讲PCA,重要的是老师不单单讲计算过程,而且讲了其中的原理。遗憾的是当时没听懂,也可能是当时睡着了,管他呢。最近写东西的时候遇到了和这个PCA相关的AutoEncoder,和学长交流的时候学长非常耐心地回答了我各种疑问,然后我知道了有AutoEncoder这个东西的存在,因为在这之前,我一直在考虑PCA。我靠,又跑题了,回归问题:什么是PCA? 如果想记住这个名字的话很容易:三个字母PCA,po ci a 。如果想知道具体的内容和原理,往下看,当然,书本上,视频里都有,只不过我不能保证比下面的内容有趣。

    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 X X是原始数据,矩阵的每一行是一个样本的特征向量,即矩阵 X m × n X_{m\times n} Xm×n中有m个样本,每个样本有n个特征值。所以,所谓的降维,其实是减少n的数量。
    假设降维后的结构为 Z m × k Z_{m \times k} Zm×k,其中 k < n k < n k<n
    那么PCA的数学表达可以这样表示:
    Z m × k = f ( X m × n ) , k < n Z_{m\times k} = f(X_{m\times n}), k < n Zm×k=f(Xm×n),k<n

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

    开始数学了,手段是数学

    为了找到上面说的 f ( x ) f(x) f(x)我们需要做一些工作,在线性空间中,矩阵可以表示为一种映射,所以上面的问题可以转化为寻找这样一个矩阵 W W W,该矩阵可以实现上面的映射目的:
    Z m × k = X m × n W n × k Z_{m\times k} = X_{m\times n}W_{n\times k} Zm×k=Xm×nWn×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×nXn×m

    现在假设我们要把矩阵的维数降为1,也就是最后每个样本只有一个属性,即 k = 1 k=1 k=1
    目标是使降维后的数据在那个坐标轴中的分布尽可能分散,数据的分布的离散程度我们用方差来衡量。
    现在我们的目标:
    z = w x z=wx z=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 = 1 wmaxm1im(zizˉ)2s.t.    W2=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^T wmaxm1im(zizˉ)2=wmaxm1im(wxiwxˉ)2=wmaxm1im(w(xixˉ))(w(xixˉ))T=wmaxm1im(w(xixˉ)(xixˉ)TwT)T=wmaxm1wim(xixˉ)(xixˉ)TwTwmaxm1wCov(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 = 1 wmaxm1wCov(x)wTs.t.  w2=1
    C o v ( x ) Cov(x) Cov(x)是矩阵 x x x的协防差阵。
    利用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=wmaxm1wCov(x)wT+α(w21)=wmaxm1wCov(x)wT+α(wTw1)
    这里解释一下为什么要限制 ∥ w ∥ 2 = 1 \lVert w \rVert_2 = 1 w2=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 = 1 wmaxm1wCov(x)wTs.t.  w2=1
    直接取 w = ( ∞ , ∞ , . . . , ∞ ) w = (\infty, \infty, ..., \infty) w=(,,...,)即可满足最大,那这样没有任何意义,所以这个限制条件是非常有用的。

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

    C o v ( x ) = S Cov(x) = S Cov(x)=S S w − α w = 0 Sw - \alpha w = 0 Swαw=0正好是特征值的定义,也就是 α \alpha α是矩阵 S S S的特征值, w w w是矩阵 S S S的特征向量。但是特征值那么多, w w w到底是那个特征值呢?
    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 = \alpha wmaxm1wSwT=wmaxwTSTw=wmaxwTαw=αwmaxwTw=α

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

    经过上面一番推理,我们知道了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 K K(人为给定)个特征值所对应的特征向量组成构成矩阵 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×nWn×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(XXˉ)T(XXˉ)
    这样用程序就非常好实现了。

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

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

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

    李宏毅老师的视频里用另外一种视角解释PCA,但是我觉得还是没有听明白,具体的关系,我觉得是老师没讲明白,其中最难以理解的就是 x − x ˉ x-\bar{x} xxˉ 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好不好,需要做实验验证

    参考资料:

    1. 李宏毅机器学习:PCA
    2. Reducing the Dimensionality of Data with Neural Networks

    掌管天堂的空之王者,于地狱唱响容光之歌!

    展开全文
    luoluonuoyasuolong 2019-05-31 10:10:31
  • 5星
    1.26MB flame11012078 2014-04-21 19:51:27
  • 原帖地址:http://blog.codinglabs.org/articles/pca-tutorial.html PCA(Principal Component Analysis)是一种常用的数据分析方法。...网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程...

    原帖地址:http://blog.codinglabs.org/articles/pca-tutorial.html

    PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中的原理。这篇文章的目的是介绍PCA的基本数学原理,帮助读者了解PCA的工作机制是什么。

    当然我并不打算把文章写成纯数学文章,而是希望用直观和易懂的方式叙述PCA的数学原理,所以整个文章不会引入严格的数学推导。希望读者在看完这篇文章后能更好的明白PCA的工作原理。

    数据的向量表示及降维问题

    一般情况下,在数据挖掘和机器学习中,数据被表示为向量。例如某个淘宝店2012年全年的流量及交易情况可以看成一组记录的集合,其中每一天的数据是一条记录,格式如下:

    (日期, 浏览量, 访客数, 下单数, 成交数, 成交金额)

    其中“日期”是一个记录标志而非度量值,而数据挖掘关心的大多是度量值,因此如果我们忽略日期这个字段后,我们得到一组记录,每条记录可以被表示为一个五维向量,其中一条看起来大约是这个样子:

    image

    注意这里我用了转置,因为习惯上使用列向量表示一条记录(后面会看到原因),本文后面也会遵循这个准则。不过为了方便有时我会省略转置符号,但我们说到向量默认都是指列向量。

    我们当然可以对这一组五维向量进行分析和挖掘,不过我们知道,很多机器学习算法的复杂度和数据的维数有着密切关系,甚至与维数呈指数级关联。当然,这里区区五维的数据,也许还无所谓,但是实际机器学习中处理成千上万甚至几十万维的情况也并不罕见,在这种情况下,机器学习的资源消耗是不可接受的,因此我们必须对数据进行降维。

    降维当然意味着信息的丢失,不过鉴于实际数据本身常常存在的相关性,我们可以想办法在降维的同时将信息的损失尽量降低。

    举个例子,假如某学籍数据有两列M和F,其中M列的取值是如何此学生为男性取值1,为女性取值0;而F列是学生为女性取值1,男性取值0。此时如果我们统计全部学籍数据,会发现对于任何一条记录来说,当M为1时F必定为0,反之当M为0时F必定为1。在这种情况下,我们将M或F去掉实际上没有任何信息的损失,因为只要保留一列就可以完全还原另一列。

    当然上面是一个极端的情况,在现实中也许不会出现,不过类似的情况还是很常见的。例如上面淘宝店铺的数据,从经验我们可以知道,“浏览量”和“访客数”往往具有较强的相关关系,而“下单数”和“成交数”也具有较强的相关关系。这里我们非正式的使用“相关关系”这个词,可以直观理解为“当某一天这个店铺的浏览量较高(或较低)时,我们应该很大程度上认为这天的访客数也较高(或较低)”。后面的章节中我们会给出相关性的严格数学定义。

    这种情况表明,如果我们删除浏览量或访客数其中一个指标,我们应该期待并不会丢失太多信息。因此我们可以删除一个,以降低机器学习算法的复杂度。

    上面给出的是降维的朴素思想描述,可以有助于直观理解降维的动机和可行性,但并不具有操作指导意义。例如,我们到底删除哪一列损失的信息才最小?亦或根本不是单纯删除几列,而是通过某些变换将原始数据变为更少的列但又使得丢失的信息最小?到底如何度量丢失信息的多少?如何根据原始数据决定具体的降维操作步骤?

    要回答上面的问题,就要对降维问题进行数学化和形式化的讨论。而PCA是一种具有严格数学基础并且已被广泛采用的降维方法。下面我不会直接描述PCA,而是通过逐步分析问题,让我们一起重新“发明”一遍PCA。

    向量的表示及基变换

    既然我们面对的数据被抽象为一组向量,那么下面有必要研究一些向量的数学性质。而这些数学性质将成为后续导出PCA的理论基础。

    内积与投影

    下面先来看一个高中就学过的向量运算:内积。两个维数相同的向量的内积被定义为:

    image

    内积运算将两个向量映射为一个实数。其计算方式非常容易理解,但是其意义并不明显。下面我们分析内积的几何意义。假设A和B是两个n维向量,我们知道n维向量可以等价表示为n维空间中的一条从原点发射的有向线段,为了简单起见我们假设A和B均为二维向量,则image。则在二维平面上A和B可以用两条发自原点的有向线段表示,见下图:

    好,现在我们从A点向B所在直线引一条垂线。我们知道垂线与B的交点叫做A在B上的投影,再设A与B的夹角是a,则投影的矢量长度为image,其中image是向量A的模,也就是A线段的标量长度。

    注意这里我们专门区分了矢量长度和标量长度,标量长度总是大于等于0,值就是线段的长度;而矢量长度可能为负,其绝对值是线段长度,而符号取决于其方向与标准方向相同或相反。

    到这里还是看不出内积和这东西有什么关系,不过如果我们将内积表示为另一种我们熟悉的形式:

    image

    现在事情似乎是有点眉目了:A与B的内积等于A到B的投影长度乘以B的模。再进一步,如果我们假设B的模为1,即让|B|=1|B|=1,那么就变成了:

    image

    也就是说,设向量B的模为1,则A与B的内积值等于A向B所在直线投影的矢量长度!这就是内积的一种几何解释,也是我们得到的第一个重要结论。在后面的推导中,将反复使用这个结论。

    下面我们继续在二维空间内讨论向量。上文说过,一个二维向量可以对应二维笛卡尔直角坐标系中从原点出发的一个有向线段。例如下面这个向量:

    在代数表示方面,我们经常用线段终点的点坐标表示向量,例如上面的向量可以表示为(3,2),这是我们再熟悉不过的向量表示。

    不过我们常常忽略,只有一个(3,2)本身是不能够精确表示一个向量的。我们仔细看一下,这里的3实际表示的是向量在x轴上的投影值是3,在y轴上的投影值是2。也就是说我们其实隐式引入了一个定义:以x轴和y轴上正方向长度为1的向量为标准。那么一个向量(3,2)实际是说在x轴投影为3而y轴的投影为2。注意投影是一个矢量,所以可以为负。

    更正式的说,向量(x,y)实际上表示线性组合:

    image

    不难证明所有二维向量都可以表示为这样的线性组合。此处(1,0)和(0,1)叫做二维空间中的一组基。

    所以,要准确描述向量,首先要确定一组基,然后给出在基所在的各个直线上的投影值,就可以了。只不过我们经常省略第一步,而默认以(1,0)和(0,1)为基。

    我们之所以默认选择(1,0)和(0,1)为基,当然是比较方便,因为它们分别是x和y轴正方向上的单位向量,因此就使得二维平面上点坐标和向量一一对应,非常方便。但实际上任何两个线性无关的二维向量都可以成为一组基,所谓线性无关在二维平面内可以直观认为是两个不在一条直线上的向量。

    例如,(1,1)和(-1,1)也可以成为一组基。一般来说,我们希望基的模是1,因为从内积的意义可以看到,如果基的模是1,那么就可以方便的用向量点乘基而直接获得其在新基上的坐标了!实际上,对应任何一个向量我们总可以找到其同方向上模为1的向量,只要让两个分量分别除以模就好了。例如,上面的基可以变为image

    现在,我们想获得(3,2)在新基上的坐标,即在两个方向上的投影矢量值,那么根据内积的几何意义,我们只要分别计算(3,2)和两个基的内积,不难得到新的坐标为image。下图给出了新的基以及(3,2)在新基上坐标值的示意图:

    另外这里要注意的是,我们列举的例子中基是正交的(即内积为0,或直观说相互垂直),但可以成为一组基的唯一要求就是线性无关,非正交的基也是可以的。不过因为正交基有较好的性质,所以一般使用的基都是正交的。

    基变换的矩阵表示

    下面我们找一种简便的方式来表示基变换。还是拿上面的例子,想一下,将(3,2)变换为新基上的坐标,就是用(3,2)与第一个基做内积运算,作为第一个新的坐标分量,然后用(3,2)与第二个基做内积运算,作为第二个新坐标的分量。实际上,我们可以用矩阵相乘的形式简洁的表示这个变换:

    image

    太漂亮了!其中矩阵的两行分别为两个基,乘以原向量,其结果刚好为新基的坐标。可以稍微推广一下,如果我们有m个二维向量,只要将二维向量按列排成一个两行m列矩阵,然后用“基矩阵”乘以这个矩阵,就得到了所有这些向量在新基下的值。例如(1,1),(2,2),(3,3),想变换到刚才那组基上,则可以这样表示:

    image

    于是一组向量的基变换被干净的表示为矩阵的相乘。

    一般的,如果我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果

    数学表示为:

    image

    其中image是一个行向量,表示第i个基,image是一个列向量,表示第j个原始数据记录。

    特别要注意的是,这里R可以小于N,而R决定了变换后数据的维数。也就是说,我们可以将一N维数据变换到更低维度的空间中去,变换后的维度取决于基的数量。因此这种矩阵相乘的表示也可以表示降维变换。

    最后,上述分析同时给矩阵相乘找到了一种物理解释:两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去。更抽象的说,一个矩阵可以表示一种线性变换。很多同学在学线性代数时对矩阵相乘的方法感到奇怪,但是如果明白了矩阵相乘的物理意义,其合理性就一目了然了。

    协方差矩阵及优化目标

    上面我们讨论了选择不同的基可以对同样一组数据给出不同的表示,而且如果基的数量少于向量本身的维数,则可以达到降维的效果。但是我们还没有回答一个最最关键的问题:如何选择基才是最优的。或者说,如果我们有一组N维向量,现在要将其降到K维(K小于N),那么我们应该如何选择K个基才能最大程度保留原有的信息?

    要完全数学化这个问题非常繁杂,这里我们用一种非形式化的直观方法来看这个问题。

    为了避免过于抽象的讨论,我们仍以一个具体的例子展开。假设我们的数据由五条记录组成,将它们表示成矩阵形式:

    image

    其中每一列为一条数据记录,而一行为一个字段。为了后续处理方便,我们首先将每个字段内所有值都减去字段均值,其结果是将每个字段都变为均值为0(这样做的道理和好处后面会看到)。(个人补充:用PCA之前需要去均值)

    我们看上面的数据,第一个字段均值为2,第二个字段均值为3,所以变换后:

    image

    我们可以看下五条数据在平面直角坐标系内的样子:

    现在问题来了:如果我们必须使用一维来表示这些数据,又希望尽量保留原始的信息,你要如何选择?

    通过上一节对基变换的讨论我们知道,这个问题实际上是要在二维平面中选择一个方向,将所有数据都投影到这个方向所在直线上,用投影值表示原始记录。这是一个实际的二维降到一维的问题。

    那么如何选择这个方向(或者说基)才能尽量保留最多的原始信息呢?一种直观的看法是:希望投影后的投影值尽可能分散。

    以上图为例,可以看出如果向x轴投影,那么最左边的两个点会重叠在一起,中间的两个点也会重叠在一起,于是本身四个各不相同的二维点投影后只剩下两个不同的值了,这是一种严重的信息丢失,同理,如果向y轴投影最上面的两个点和分布在x轴上的两个点也会重叠。所以看来x和y轴都不是最好的投影选择。我们直观目测,如果向通过第一象限和第三象限的斜线投影,则五个点在投影后还是可以区分的。

    下面,我们用数学方法表述这个问题。

    方差

    上文说到,我们希望投影后投影值尽可能分散,而这种分散程度,可以用数学上的方差来表述。此处,一个字段的方差可以看做是每个元素与字段均值的差的平方和的均值,即:

    image

    由于上面我们已经将每个字段的均值都化为0了,因此方差可以直接用每个元素的平方和除以元素个数表示:

    image

    于是上面的问题被形式化表述为:寻找一个一维基,使得所有数据变换为这个基上的坐标表示后,方差值最大。

    协方差

    对于上面二维降成一维的问题来说,找到那个使得方差最大的方向就可以了。不过对于更高维,还有一个问题需要解决。考虑三维降到二维问题。与之前相同,首先我们希望找到一个方向使得投影后方差最大,这样就完成了第一个方向的选择,继而我们选择第二个投影方向。

    如果我们还是单纯只选择方差最大的方向,很明显,这个方向与第一个方向应该是“几乎重合在一起”,显然这样的维度是没有用的,因此,应该有其他约束条件。从直观上说,让两个字段尽可能表示更多的原始信息,我们是不希望它们之间存在(线性)相关性的,因为相关性意味着两个字段不是完全独立,必然存在重复表示的信息。

    数学上可以用两个字段的协方差表示其相关性,由于已经让每个字段均值为0,则:

    image

    可以看到,在字段均值为0的情况下,两个字段的协方差简洁的表示为其内积除以元素数m。

    当协方差为0时,表示两个字段完全独立。为了让协方差为0,我们选择第二个基时只能在与第一个基正交的方向上选择。因此最终选择的两个方向一定是正交的。

    至此,我们得到了降维问题的优化目标:将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)

    协方差矩阵

    上面我们导出了优化目标,但是这个目标似乎不能直接作为操作指南(或者说算法),因为它只说要什么,但根本没有说怎么做。所以我们要继续在数学上研究计算方案。

    我们看到,最终要达到的目的与字段内方差及字段间协方差有密切关系。因此我们希望能将两者统一表示,仔细观察发现,两者均可以表示为内积的形式,而内积又与矩阵相乘密切相关。于是我们来了灵感:

    假设我们只有a和b两个字段,那么我们将它们按行组成矩阵X:

    image

    然后我们用X乘以X的转置,并乘上系数1/m:

    image

    奇迹出现了!这个矩阵对角线上的两个元素分别是两个字段的方差,而其它元素是a和b的协方差。两者被统一到了一个矩阵的。

    根据矩阵相乘的运算法则,这个结论很容易被推广到一般情况:

    设我们有m个n维数据记录,将其按列排成n乘m的矩阵X,设image,则C是一个对称矩阵,其对角线分别个各个字段的方差,而第i行j列和j行i列元素相同,表示i和j两个字段的协方差

    协方差矩阵对角化

    根据上述推导,我们发现要达到优化目前,等价于将协方差矩阵对角化:即除对角线外的其它元素化为0,并且在对角线上将元素按大小从上到下排列,这样我们就达到了优化目的。这样说可能还不是很明晰,我们进一步看下原矩阵与基变换后矩阵协方差矩阵的关系:

    设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵,设Y=PX,则Y为X对P做基变换后的数据。设Y的协方差矩阵为D,我们推导一下D与C的关系:

    image

    现在事情很明白了!我们要找的P不是别的,而是能让原始协方差矩阵对角化的P。换句话说,优化目标变成了寻找一个矩阵P,满足image是一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述优化条件

    至此,我们离“发明”PCA还有仅一步之遥!

    现在所有焦点都聚焦在了协方差矩阵对角化问题上,有时,我们真应该感谢数学家的先行,因为矩阵对角化在线性代数领域已经属于被玩烂了的东西,所以这在数学上根本不是问题。

    由上文知道,协方差矩阵C是一个是对称矩阵,在线性代数上,实对称矩阵有一系列非常好的性质:

    1)实对称矩阵不同特征值对应的特征向量必然正交。

    2)设特征向量λ重数为r,则必然存在r个线性无关的特征向量对应于λ,因此可以将这r个特征向量单位正交化。

    由上面两条可知,一个n行n列的实对称矩阵一定可以找到n个单位正交特征向量,设这n个特征向量为image,我们将其按列组成矩阵:

    image

    则对协方差矩阵C有如下结论:

    image

    其中Λ为对角矩阵,其对角元素为各特征向量对应的特征值(可能有重复)。

    以上结论不再给出严格的数学证明,对证明感兴趣的朋友可以参考线性代数书籍关于“实对称矩阵对角化”的内容。

    到这里,我们发现我们已经找到了需要的矩阵P:

    image

    P是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是C的一个特征向量。如果设P按照Λ中特征值的从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Y。

    至此我们完成了整个PCA的数学原理讨论。在下面的一节,我们将给出PCA的一个实例。

    算法及实例

    为了巩固上面的理论,我们在这一节给出一个具体的PCA实例。

    PCA算法

    总结一下PCA的算法步骤:

    设有m条n维数据。

    1)将原始数据按列组成n行m列矩阵X

    2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值

    3)求出协方差矩阵image

    4)求出协方差矩阵的特征值及对应的特征向量

    5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P

    6)image即为降维到k维后的数据

    实例

    这里以上文提到的

    image

    为例,我们用PCA方法将这组二维数据其降到一维。

    因为这个矩阵的每行已经是零均值,这里我们直接求协方差矩阵:

    image

    然后求其特征值和特征向量,具体求解方法不再详述,可以参考相关资料。求解后特征值为:

    image

    其对应的特征向量分别是:

    image

    其中对应的特征向量分别是一个通解,c1和c2可取任意实数。那么标准化后的特征向量为:

    image

    因此我们的矩阵P是:

    image

    可以验证协方差矩阵C的对角化:

    image

    最后我们用P的第一行乘以数据矩阵,就得到了降维后的表示:

    image

    降维投影结果如下图:

    进一步讨论

    根据上面对PCA的数学原理的解释,我们可以了解到一些PCA的能力和限制。PCA本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,也就是让它们在不同正交方向上没有相关性。

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

    最后需要说明的是,PCA是一种无参数技术,也就是说面对同样的数据,如果不考虑清洗,谁来做结果都一样,没有主观参数的介入,所以PCA便于通用实现,但是本身无法个性化的优化。

    希望这篇文章能帮助朋友们了解PCA的数学理论基础和实现原理,借此了解PCA的适用场景和限制,从而更好的使用这个算法。

    展开全文
    zhu_wendao 2019-05-07 16:42:30
  • qq_35802251 2020-02-11 13:53:35
  • 主成分分析(Principal Component Analysis,PCA)是最常用的一种数据降维方法。顾名思义,PCA就是找出原始数据中最主要的方面来表示原始数据,可以获得比原始输入维度更低的表示。具体来说,假设原始数据X={x(1),x...

      主成分分析(Principal Component Analysis,PCA)是最常用的一种数据降维方法。顾名思义,PCA就是找出原始数据中最主要的方面来表示原始数据,可以获得比原始输入维度更低的表示。具体来说,假设原始数据 X={x(1),x(2),,x(m)} X = { x ( 1 ) , x ( 2 ) , … , x ( m ) } x(i) x ( i ) d d 维向量,我们现在希望将每个样本x(i) d d 维降到d维( d<d d ′ < d ),并且希望新的 d d ′ 维数据能尽可能代表原始数据。显然,数据降维之后肯定会有数据损失,如何将这个损失降到最小就是PCA要解决的问题了。

    1. PCA的直观理解

      我们不妨先考虑这样一个问题:对于正交属性空间中的样本点,如何用一个超平面对所有样本进行恰当的表达?

      首先我们要明确什么叫做“恰当的表达”。以上图为例,左图中的二维数据中样本几乎都是沿着 x2=x1 x 2 = x 1 方向分布, x1 x 1 x2 x 2 存在着很明显的相关性,样本点在 x1 x 1 x2 x 2 两个方向变化幅度相当,所以如果要区分各个样本点, x1 x 1 x2 x 2 缺一不可,缺少其中一个都有可能出现丢失大量数据的情况。如果我们将原始坐标系旋转 45 45 ∘ ,得到右图坐标系 (z1,z2) ( z 1 , z 2 ) ,现在样本点几乎沿着 z1 z 1 方向分布了,在 z2 z 2 方向不同样本点几乎没有差别,因此去掉 z2 z 2 也影响不大。这里 z1 z 1 其实就对应这数据的第一个主要成分,我们用 z1 z 1 就能表达绝大部分数据。
      然后再回到本节开始的问题,如果存在这样的超平面,那么它大概存在什么样的性质呢?从上图中的例子我们归纳:
      (1) 最近重构性:样本点到这个超平面的距离都足够近
      (2) 最大可分性:样本点在这个超平面上的投影能尽可能分开
      其实用一句话总结就是,PCA学习了一种元素之间彼此没有线性相关的表示。从上图中也可以看出,相比 (x1,x2) ( x 1 , x 2 ) 坐标系表达, (z1,z2) ( z 1 , z 2 ) 坐标系两个轴的相关性明显低得多甚至可以忽略。基于上面的最近重构性和最大可分性,可以得到PCA两种不同的等价推导。

    2. PCA推导

      假设 m m d维数据 (x(1),x(2),,x(m)) ( x ( 1 ) , x ( 2 ) , … , x ( m ) ) 都已经进行了中心化,即 mi=1x(i)=0 ∑ i = 1 m x ( i ) = 0 。经过投影变换后得到的新坐标系为 {w1,w2,,wd} { w 1 , w 2 , … , w d } ,其中 wi w i 是标准正交基, wi2=1,wTiwj=0(ij) ‖ w i ‖ 2 = 1 , w i T w j = 0 ( i ≠ j ) 。如果我们将数据从 d d 维降到d维,即丢弃新坐标系中的部分坐标,则样本点 x(i) x ( i ) 在新坐标系中的投影为 z(i)=(z(i)1,z(i)2,,z(i)d) z ( i ) = ( z 1 ( i ) , z 2 ( i ) , … , z d ′ ( i ) ) ,其中 z(i)j=wTjx(i) z j ( i ) = w j T x ( i ) x(i) x ( i ) 在低维新坐标系下第 j j 维的坐标。那么新坐标z(i)和旧坐标 x(i) x ( i ) 的映射关系为

    z(i)=WTx(i)(1) (1) z ( i ) = W T x ( i )
    其中 W W d个标准正交基组成的矩阵。如果基于 z(i) z ( i ) 来重构 x(i) x ( i ) ,有
    x^(i)=j=1dz(i)jwj=Wz(i)(2) (2) x ^ ( i ) = ∑ j = 1 d ′ z j ( i ) w j = W z ( i )

    最近重构性推导

      最近重构性是指样本点到这个超平面的距离足够近,即通过主成分重构得到的 x^(i) x ^ ( i ) 和原始样本点 x(i) x ( i ) 的距离尽可能小。也可以从另外一个角度理解:降维后的数据要尽可能接近原始数据。考虑整个训练集,重构得到的 x^(i) x ^ ( i ) 和原始样本点 x(i) x ( i ) 的距离平方和为

    i=1mx^(i)x(i)22=i=1mWz(i)x(i)22=i=1m(Wz(i))T(Wz(i))2i=1m(Wz(i))Tx(i)+i=1mx(i)Tx(i)=i=1mz(i)TWTWz(i)2i=1mz(i)TWTx(i)+i=1mx(i)Tx(i)=i=1mz(i)Tz(i)2i=1mz(i)Tz(i)+i=1mx(i)Tx(i)=i=1mz(i)Tz(i)+i=1mx(i)Tx(i)=tr(WTi=1m(x(i)x(i)T)W)+i=1mx(i)Tx(i)=tr(WTXXTW)+i=1mx(i)Tx(i) ∑ i = 1 m ‖ x ^ ( i ) − x ( i ) ‖ 2 2 = ∑ i = 1 m ‖ W z ( i ) − x ( i ) ‖ 2 2 = ∑ i = 1 m ( W z ( i ) ) T ( W z ( i ) ) − 2 ∑ i = 1 m ( W z ( i ) ) T x ( i ) + ∑ i = 1 m x ( i ) T x ( i ) = ∑ i = 1 m z ( i ) T W T W z ( i ) − 2 ∑ i = 1 m z ( i ) T W T x ( i ) + ∑ i = 1 m x ( i ) T x ( i ) = ∑ i = 1 m z ( i ) T z ( i ) − 2 ∑ i = 1 m z ( i ) T z ( i ) + ∑ i = 1 m x ( i ) T x ( i ) = − ∑ i = 1 m z ( i ) T z ( i ) + ∑ i = 1 m x ( i ) T x ( i ) = − t r ( W T ∑ i = 1 m ( x ( i ) x ( i ) T ) W ) + ∑ i = 1 m x ( i ) T x ( i ) = − t r ( W T X X T W ) + ∑ i = 1 m x ( i ) T x ( i )
    因此最小化 mi=1x^(i)x(i)22 ∑ i = 1 m ‖ x ^ ( i ) − x ( i ) ‖ 2 2 等价于下面的约束优化问题:
    argminWtr(WTXXTW), s.t. WTW=I(3) (3) arg ⁡ min W − t r ( W T X X T W ) ,   s . t .   W T W = I
    这个问题想必大家很熟悉了,用拉格朗日乘子法可得对应的拉格朗日函数为
    L(W,λ)=tr(WTXXTW)+λ(WTWI)(4) (4) L ( W , λ ) = − t r ( W T X X T W ) + λ ( W T W − I )
    然后就化为对偶问题
    maxλminWL(W,λ) max λ min W L ( W , λ )
    L(W,b) L ( W , b ) W W 求导,得:
    2XXTW+2λW=0
    整理一下,即
    XXTW=λW(5) (5) X X T W = λ W
    然后这不就是特征值的定义式吗?所以只需要对协方差矩阵 WTW W T W 进行特征值分解,并将求得的特征值排序 λ1λ2λd λ 1 ≥ λ 2 ≥ ⋯ ≥ λ d ,再取前 d d ′ 个特征值对应的向量构成 W=(w1,w2,,wd) W ∗ = ( w 1 , w 2 , … , w d ′ ) ,这就是PCA的解。

    最大可分性推导

      下面再来看一下最大可分性怎么推导出PCA。样本点在超平面上投影尽可能分开等价于投影后样本点的方差最大化。投影后样本点的方差为 mi=1WTx(i)x(i)TW ∑ i = 1 m W T x ( i ) x ( i ) T W ,于是优化目标可以写为

    argmaxWtr(WTXXTW), s.t. WTW=I(6) (6) arg ⁡ max W t r ( W T X X T W ) ,   s . t .   W T W = I
    不难发现,这个优化目标和(3)是等价的,所以也能得到(5)的结论。下面就不赘述了。

    3. PCA算法流程

      先梳理一下PCA的算法流程,然后最后再来讨论一下PCA的性质。
      假设原始数据 X={x(1),x(2),,x(m)} X = { x ( 1 ) , x ( 2 ) , … , x ( m ) } x(i) x ( i ) d d 维向量,我们现在希望将每个样本x(i) d d 维降到d维( d<d d ′ < d )。
    输入: d d 维数据集X={x(1),x(2),,x(m)},要降到的维数 d d ′
    输出:降维后的数据集 X X ′
    Step1: 对所有样本进行中心化

    x(i)=x(i)1mj=1mx(j) x ( i ) = x ( i ) − 1 m ∑ j = 1 m x ( j )
    Step2: 计算样本的协方差矩阵 XTX X T X (严格来说协方差矩阵还有一个 1m1 1 m − 1 的常数项,不过不影响结果,可以省去);
    Step3: 对协方差矩阵 XTX X T X 进行特征值分解/奇异值分解,得到特征值 λi λ i 及其对应的特征向量 wi w i i=1,2,,d i = 1 , 2 , … , d
    Step4: 取前 d d ′ 大个特征值对应的特征向量 (w1,w2,,wd) ( w 1 , w 2 , … , w d ′ ) ,标准化后构成特征向量矩阵 W W
    Step5: 根据特征向量矩阵W计算出原始数据 x(i) x ( i ) 在特征空间中的投影 z(i) z ( i )
    z(i)=WTx(i) z ( i ) = W T x ( i )
    从而得到原始数据在特征空间中的降维表示 X=(z(1),z(2),,z(m)) X ′ = ( z ( 1 ) , z ( 2 ) , … , z ( m ) ) 。如果需要基于 z(i) z ( i ) 来重构 x(i) x ( i ) ,可以根据这个式子来(其实就是将上一个等式都左乘一个 WT W T 的逆)
    x^(i)=j=1dz(i)jwj=Wz(i) x ^ ( i ) = ∑ j = 1 d ′ z j ( i ) w j = W z ( i )

      关于低维空间维度 d d ′ 的选择,通常情况下是用户事先指定的;或对不同 d d ′ 进行交叉验证然后选择最优的;或设置一个重构阈值 t t ,然后选取使下式成立的最小d值:
    di=1λidi=1λit ∑ i = 1 d ′ λ i ∑ i = 1 d λ i ≥ t

    4. PCA的性质

    • PCA降维舍弃的这部分信息往往是必要的:一方面,舍弃这部分信息之后能使样本的采样密度增大,这正是降维的重要动机;另一方面,当数据受噪声影响时,最小的特征值所对应的特征向量往往和噪声有关,舍弃它们在一定程度上有去噪的效果。
    • PCA另一个重要特性是能将数据变换为元素之间彼此不想关的表示,可以消除数据中未知变化因素。所以PCA也是一种数据白化的技术。
    • z(i)=WTx(i) z ( i ) = W T x ( i ) 可知,高维空间到低维空间的函数映射是线性的,但是在许多现实任务中,可能需要非线性映射才能找到恰当的低维嵌入。这时我们可以用SVM中提到的核技巧来引入非线性。
    展开全文
    qq_16137569 2018-08-29 11:03:25
  • Daker_Huang 2019-03-05 11:40:43
  • 5KB qq_38248958 2018-10-26 22:18:09
  • happyxghero 2019-06-19 21:24:18
  • 221KB dchw66 2021-10-08 21:38:54
  • hahameier 2020-05-20 15:05:18
  • ws_developer 2018-08-13 17:45:08
  • ycj9090900 2016-11-26 00:47:13
  • chenaiyanmie 2018-03-13 20:50:30
  • qq_24946843 2018-09-27 19:52:02
  • qq_39967296 2019-05-24 21:50:15
  • program_developer 2018-06-09 15:08:25
  • sibiantai555 2018-05-21 16:02:18
  • shuai_xuandada 2021-01-27 13:34:52
  • jzwong 2017-09-25 15:53:23
  • jteng 2015-07-26 15:29:55
  • shine19930820 2017-04-30 23:27:22
  • 103KB qq_36596540 2020-04-12 21:01:55
  • 2.52MB feitianxue123123 2011-05-26 13:48:00
  • qq_31821675 2018-09-08 11:29:32
  • IT_flying625 2020-04-05 23:21:41
  • sjtu_edu_cn 2015-10-13 11:10:21
  • qq_40587575 2018-08-06 22:06:13
  • weixin_43351473 2020-03-22 15:06:41

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,462
精华内容 8,184
关键字:

pca原理