影醉阏轩窗

衣带渐宽终不悔,为伊消得人憔悴。
扩大
缩小

《文章翻译》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\theta\)
  • 最短距离(上面式子)
  • \(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 = P\cdot v \]

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

3.2 探索协方差

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

\[C \cdot u = \lambda\cdot u \]

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

\[v_1^T\cdot v_1=1 \]

\[v_1^T\cdot 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\),我们可以获得在主方向上的投影为\(A\cdot v_1\)

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

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

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

统计一下PCA的操作步骤:

  • 所有数据减去均值(方便计算)
  • 计算协方差:\(C=A^T\cdot 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}=a\cdot v_1、P_{a2}=a\cdot v_2\)

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

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

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

扩展到多个点的情况:

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

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

\[A = U\cdot \Sigma \cdot V^T \]

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

\[S = U\cdot \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的个人理解

posted on 2020-01-16 14:55  影醉阏轩窗  阅读(384)  评论(0编辑  收藏  举报

导航

/* 线条鼠标集合 */ /* 鼠标点击求赞文字特效 */ //带头像评论