《文章翻译》PCA&SVD

Principle Component Analysis && Singular Value Decomposition

翻译自:forward data science

强烈推荐,理解PCA和SVD很有帮助

一. Intuition of PCA

1.1 去掉多余的特征

假设我们有房子的这些信息:价格(千美元)、面积、层数、户型。

图1-1

房子包含了四维的信息,我们无法在一幅图像中直观的显示出来。然而,如果你仔细的观察特征之间的联系,你将会注意到不是所有的特征都是同等重要的。

例如,你可以通过房子的层数去识别房子的价格(或对应哪个房子)吗?房子的层数是否帮助我们区分是哪个房子?房子的层数几乎相同,他们的方差很小,(sigma^2=0.2) 所以房子的层数不是非常有用。那房子的户型呢?他们值变化也不是很大,但是他们的方差却很大,(sigma^2=127),因此房子的户型可以很好的区别是哪个房子。

因此我们可以做一些事尽量的发掘特征,在不损失精度的情况下。目前,我们学习了各自的特征。那特征之间的相互联系是什么?如果你仔细看了上图1-1的特征,你会发现房子的价格粗略的等于房子面积的两倍。这是非常有用的信息,我们可以使用其中一个特征来取代代替另一个特征。这样两个特征之间的联系称为协方差。协方差越大,表明特征之间的相关性越强,也就是数据的冗余性很大。因此可以进行降维处理。

从之前的讨论可以明显的看出:

  • 特征高方差是好事,代表更多的信息
  • 特征之间高协方差是坏事,表明特征之间很多冗余

这就是PCA的目的:使得每个特征的方差都很大,使得特征之间的协方差都很小。当前我们无法用眼睛直观的感受,下文会详细描述。

1.2 魔幻展示

我们对PCA女士进行了一个简单采访-:

记者:请问您认为最完美的数据是什么样的?

PCA:下图所示

图1-2

这意味着-----数据可以降低到一个维度上。观测:(x_1)方向的方差比(x_2)方向的方差大很多,也就等于去除(x_2)方向的数据,不会破坏很多的数据信息。此外,(x_1)方向的数据是递增的,完全没有依靠(x_2)的数据,也就等于(x_1/x_2)的协方差很小。为什么PCA会觉得这样的数据很完美,因为她只需进行这样的操作:

图1-3

图1-4

明白怎么进行的处理很重要,(x_1)的数据比(x_2)的数据更重要,所以我们去除(x_2)的数据。也可以表达为,把数据像(x_1)进行投影。二维数据使用一维数据代替。

1.3 难例图解

记者:那您觉得什么的数据不是很完美呢?数据像什么样子?

PCA:每个东西都是完美的,只要你进行一些变换即可。像下面这幅图一样:

图1-4

PCA:上面的图有点困难,你觉得呢?尝试将头转动一下

图1-5

将图转动45°之后,现在的图也是将近完美的。这发生了什么事?PCA尝试找到一个轴,这个轴的方差越大越好。我们之前说(x_1)的特征,指的是在(x_1)方向的特征。然后,在旋转之后,(x_1)的特征代表的意义变了,不再是之前(x_1)方向的特征,具体含义不再重要(代表之前(x_1)(x_2)线性联合的特征)。因为旋转了45°,所以新轴和旧轴之间的关系是:(x_2=x_1)(x_1-x_2=0),新的轴设为(z_1/z_2):

[z_1 = x_1 - x_2 ]

[z_2 = x_1+x_2 ]

新的轴(z_1/z_2)代表了数据的主要成分(principle component),转换之后,数据和之前的数据基本一样,方差和协方差也类似。

很容易知道如何生成多于二维的数据,之前是投影到直线上,现在是投影到一个平面上,下面是以3D为展示投影关系。

图1-6

1.4 如何找到主成分线

具体不再此节中展示,后续SVD会进行详细展示

二. 概念介绍

2.1 內积(Dot、点积)

图2-1

点积的结果是,虚线上红色的长度。

这么简单的事情,但是具有非常大的应用范围。我可以告诉你,以后我们做的所有事情,都可以用一系列点积去表示,别感受惊讶。点积可以看做很多方面:

  • 像上面的图所示,可以表示一个向量 (b) 到向量 (a) 的投影长度
  • 向量 (a) 和向量 (b) 的靠近程度 (a cdot b = |a||b|cos heta)
  • 最短距离(上面式子)
  • (a)(b) 其中的一个分量

以上的点都差不多,都是通过一个公式可以展示出来。

举个例子,(a=(1,2))(b=(0.8,0.6)) :

图2-2

2.2 多维点积

图2-3

简要概述:多维矩阵点积,不做过多介绍。

2.3 反向求解

矩阵的一些性质,不做过多介绍

2.4 翻转矩阵

趣事:当逆陷入困境的时候,请问问你的猫。如果它像上面图像一样面对你,说明它想告诉你-----改变你的视角,你会发现很多有趣的事情。

我们以实际的数据进行描述,假设存在两个城市,有三天的数据,也就是 (X_{3*2}) 的矩阵,将这矩阵在二维平面进行作图。

上图并没有什么鼓舞人心的事,让我们换个视觉,像猫一样:

我们得到了不同于之前的一个矩阵,现在我们在三维空间进行绘图:

完全理解转换后的矩阵非常重要:

  • 新的矩阵以Day为轴,而之前的数据则相反
  • 新矩阵中每一行的数据是3D空间中的一个点
  • 新矩阵第一行的数据是由每一天形成的。。。
  • 如果我们有大于三天的数据,结果也是两个点。

到目前为止,我们画出一个唯一的平面,如果我们画出这个平面和原始的散点图,称之为:双重图。

2.5 新空间

现在,我们可以在新的双平面中进行探索一些特性。为了更好地理解,我们先看两个空间的联系:

声明#一: 方差就是红色箭头((x))和蓝色箭头((y))的长度。可以从左图来看,(x,y) 是等比例变换的,不存在协方差,只有方差的存在。

声明#二:协方差就是红色箭头((x))和蓝色箭头((y))的夹角。可以从左图来看,(y) 轴方差不变,(x) 轴方差变大,协方差改变。

2.6 具体公式

方差:

协方差:

这部分原作者介绍很多,比较容易理解,这里不进行整篇翻译。。。

补充:

  • 这里的数据都是经过中心化的,减去均值之后。
  • 方差协方差,可以简单的想成数据矩阵的变换
  • 这部分主要介绍了方差(数据)和协方差(矩阵)的求解方法。但是我们还是无法找到主要的特征方向(PCA),假设(A)(B)(C)三个特征,(sigma_A > sigma_B > sigma_C) ,我们无法直接(C) 特征去除,因为加入(A)(B)的相关性很大,得到的([A,B])矩阵没没有意义的。

三. PCA操作

3.1 明确目的

在没有进行明确定义之前,你无法解决如何找到最大方差的方向。也就说明我们必须明确定义什么是方差?从之前的章节中,我们知道如何求解方差和协方差,但是无法求解主方向,如果得到主方向,那么就知道主方向上的投影,计算投影的协方差即可。

注释:

之前说的(X)轴方向的特征,指的是沿着(X)方向的特征。

下面这幅图在之前出现过,这里再强调一下!之前的轴是(,x_2,x_2),新的轴是(,z_1,z_2) ,注意我们都是在找到主方向之后,才去计算方差和协方差的,然后再去除某个方差小的特征。我们不是在任意数据上都直接计算方差,比如下附图,我们没有直接使用(,x_1,x_2)去计算他们的方差,这没有意义。

图1-5

仔细的观察,我们注意到一点:假设我们找到了主方向,是不是数据在主方向上的投影就代表着数据本身?上图新轴中,(z_1) 轴的投影就是数据沿 (z_1) 方向的分布,也就是直接计算这个投影就是代表计算新数据的特征。请仔细体会!

前面我们知道投影长度的公式,假设有矩阵 (A),他的主方向是 (v),则投影长度为(p)

[p = Pcdot v ]

那么我们只需计算(A)矩阵在主方向上的投影(p)的方差即可,目的是寻找最大的方差:

3.2 探索协方差

之前我们从猫那里学习到数据可以进行旋转,或许会发现又去的事情。对于矩阵的旋转,我们可以看一下特征值特征向量。其公式来历不过多介绍

[C cdot u = lambdacdot u ]

其中特征向量是单位矩阵正交矩阵

[v_1^Tcdot v_1=1 ]

[v_1^Tcdot v_2=0 ]

现在将问题简单化,假设 (C) 为二维的矩阵,利用上面的正交基(,v_1,v_2)

[u=k_1*v_1+k_2*v_2 ]

因为 (u) 为正交矩阵,所以(k_1^2+k_2^2=1) ,也就是说(、k_1、k_2)的取值为([-1,1]),如何使得 (sigma^2) 最大化,这就比较容易了,当(sigma _1 > sigma_2) 那就使得(,k_1=1,k_2=0),反之亦然

其实这个时候结论已经出来了,原作者还是补充了一个例子:

上面的例子不做说明了,直接看推导公式即可。

结论:矩阵在特征向量上的最大方差等于他的特征值

3.3 PCA引出

还记得第一章介绍的内容吗?想减少一个维度,我们直接对数据进行(x_1)轴上的投影即可。当前我们按照推导的公式进行操作,假设存在矩阵(A),协方差矩阵(C),特征向量(、v_1、v_2),我们可以获得在主方向上的投影为(Acdot v_1)

维度提升到三维,特征向量为(、、v_1、v_2、v_3)(C) 的特征向量为(E)

假设我们选择抛弃(v_3)轴的特征,也就等于矩阵(A)(、v_1、v_2)上投影即可:

我们反过来看一下,当知道协方差矩阵(C)时,可以被分解为特征值和特征向量的点积

统计一下PCA的操作步骤:

  • 所有数据减去均值(方便计算)
  • 计算协方差:(C=A^Tcdot A)
  • 分解(C)求解特征值和特征向量
  • 选择较大的特征值(90%或95%)
  • 投影到新的特征空间

四. SVD操作

4.1 SVD推导

回顾高中物理力学知识,力是矢量,假设(F)为二维平面的力,可以被分解为(,x,y)方向的分量:

比较遗憾的事,几乎所有的教程都将SVD复杂化了,而其核心非常简单。因为数学就是将相同的概念赋予不同名字的艺术。我们仅仅是需要一个高大上的名字而已,其实SVD就是分解矩阵成正交空间。我们分解向量(a)得到三块的信息:

  • 投影的方向(、v_2、v_2) 正交
  • 投影长度(S_{a1} > S_{a2}),所以在(v_1)方向的信息更重要(丰富),仔细理解,这是SVD的核心
  • 投影向量(、P_{a1}=acdot v_1、P_{a2}=acdot v_2)

如何处理多个数据?这就是矩阵的优势了、、、

先从简单的二维平面说起,扩展到多个多维数据。下图,将向量(a)投影到(、v_1、v_2)平面,注意不是之前的(、x、y)轴!操作和之前一样,只是基改变

  • (A)待求矩阵
  • $ V$:投影方向(基)
  • $S $:投影长度

扩展到多个点的情况:

反转一下,变换成矩阵分解的式子:

我们先看看正常的SVD公式:

[A = Ucdot Sigma cdot V^T ]

按照我们上述推导的结论,和SVD公式结合理解:

[S = Ucdot Sigma ]

有了上面的推导,这里给出一个具体的例子:

之前我说过SVD的核心是投影的长度越大,这个轴上的数据越重要,那么我们就按照长度进行划分:

这里将平局长度进行了提取,更容易进行判断:

现在可以给出一个通用的公式:

简单的说明:

  • (、sigma_1、sigma_2)是轴上投影的长度平方和的均方根(平均长度)
  • (if:sigma_1>sigma_2) 说明大多数的点更靠近(v_1),也就等于特征(v_1>v_2),反之亦然。

4.2 PCA与SVD

之前我们介绍了PCA的操作,求取主成分方向,最大的方差就是我们求取的主要方向,然后进行投影就可得到目标矩阵。

SVD和PCA不同,所有的点都进行了投影,而且在不同的特征上,下图中第二主成分也找到了,同理更多的维度也是这样排列。

如何取重要成分?按照公式即可,直接取出多余的特征,重新投影到新的特征空间,步骤和PCA类似。(里面的例子是只按照第一主成分进行投影,当然你可以按照其他主成分进行投影,或选择多个主成分)

PCA和SVD的个人理解

  • [x] 原作者使用了两种方法:投影方差投影距离进行讲解,仔细理解两种方式差不多,前提都是将原始数据投影到新的空间,然后最大化目标函数即可
  • [x] PCA需要对(A^Tcdot A)进行求解特征值和特征向量,而SVD是直接对(A)进行求解,相比较后者会保留局部小信息(例如:(epsino)
  • [ ] SVD可以找到很多主成分方向和投影长度,PCA同样可以保留多个特征值,其结果差不多,但是中间变量SVD更丰富
原文地址:https://www.cnblogs.com/wjy-lulu/p/12201207.html