一文彻底搞懂PCA

简介

PCA(Principal Component Analysis),即主成分分析,是一种基于线性代数的维归约技术,常用于数据挖掘中对数据的预处理,主要用于解决“维灾难”问题。
在阅读本文前,先介绍下文章会涉及到的一些数学理论,这些理论都是PCA技术所依赖的工具或理论基础。

  • 向量相关,如转置、内积、正交
  • 矩阵相关,如矩阵的乘法、对称矩阵及其对角化
  • 数理统计相关,如方差、协方差、相关性

PCA利用线性代数技术,将数据由高维空间投影到低维空间。通俗来讲,是从原数据中,找到新的属性(主成分),这些属性是原属性的线性组合,是相互正交的(文中会解释为何是正交的)。

约定几个符号

  • n表示数据的特征数量,一个n维向量表示一条具有n个特征的数据
  • m表示数据的数量
  • m*n表示一个具有n个特征的、m行数据的矩阵
  • 右上角大写的T表示转置

PCA的应用场景

在实际工作中,我们面对的数据具有大量的特征,但现在我们不妨以少数几个特征为例,足以展开研究。假如我们有一组房价的数据如下

面积(平方英尺) 面积(平方米) 卧室数量 浴室数量 阳台数量
1291 120 4 2 3
947 88 2 1 1

假如我们现在面临的“维灾难”问题是,我们的计算资源仅足够计算3个特征,而现在有5个特征。
必须承认,前两个表示面积的特征是线性相关的,即1 平方米=10.7639104 平方英尺。对于这种线性相关的特征,我们可以任取其一(不妨去掉第一个特征),于是5个特征还有4个。
再看后面三个特征,不难相信,通常越大的房屋面积,也将具有越多的卧室、浴室、阳台数量,但显然后三者和房屋面积不具有直接的线性关系。也就是说,我们知道这几个特征是相关,但又不是线性相关,无法简单的替换或删除。
我们应该如何做,能够从4个特征中保留3个,而不丢失信息?此时,就轮到PCA上场了。

PCA的数学原理

现在,为了由浅入深的理解PCA,不妨抛开PCA,先了解以下几个内容:

数据的向量表示

上文中的(第一行)数据,在去掉第一个特征后,通常用列向量表示为:
( 120 , 4 , 2 , 3 ) T (120,4,2,3)^T (120,4,2,3)T
这里使用了转置,主要是因为横着书写一个行向量比较方便,而行向量的转置就是列向量。
现在不妨设两个向量A、B。我们知道,两个(列)向量的内积
[ A , B ] = A T B = ( a 1 , a 2 , . . . , a n ) T ∗ ( b 1 , b 2 , . . . , b n ) = a 1 b 1 + a 2 b 2 + . . . + a n b n [A,B]=A^TB=(a_1,a_2,...,a_n)^T*(b_1,b_2,...,b_n)=a_1b_1+a_2b_2+...+a_nb_n [A,B]=ATB=(a1,a2,...,an)T(b1,b2,...,bn)=a1b1+a2b2+...+anbn
内积运算的结果为一个实数,其计算方式虽然简单,但意义并不明显。我们知道n维向量可以等价表示为n维空间中的一条从原点发射的有向线段,为了便于理解,我们不妨以二维的向量为例:
A = ( x 1 , y 1 ) , B = ( x 2 , y 2 ) A=(x_1,y_1),B=(x_2,y_2) A=(x1,y1)B=(x2,y2)
在这里插入图片描述
则[A,B]的几何直观解释是A在B上的投影乘以B的长度,几何公式为
∣ A ∣ ∗ ∣ B ∣ ∗ c o s ( a ) |A|*|B|*cos(a) ABcos(a),其中|A|表示A的模,即标量长度;代数公式为 ∣ ∣ A ∣ ∣ ∗ ∣ ∣ B ∣ ∣ ∗ c o s ( a ) ||A|| * ||B||*cos(a) ABcos(a),其中||A||为A的范数。

现在,不妨我们让向量B的模始终为1,就有
A ⋅ B = ∣ A ∣ ∗ ∣ B ∣ c o s ( a ) = = ∣ A ∣ c o s ( a ) A⋅B=|A|*|B|cos(a)==|A|cos(a) AB=ABcos(a)==Acos(a)
也就是说,设向量B的模为1,则A与B的内积值等于A向B所在直线投影的矢量长度,后文中我们将会继续用到这个工具。

向量的基

通常我们将一个二维向量描述成从原点出发的有向线段,并且直接使用线段终点的点坐标来表示。
在这里插入图片描述

现在,我们不妨换一种理解方式,首先要引入的概念,或者说是单位向量。
在二维直角坐标系中,我们引入两个模为1的向量i(1,0)、j(0,1),这样一对特殊的向量也被成为单位向量,也就是二维空间中的一组基。
在这里插入图片描述
此时的向量,则理解成为两个方向的基的缩放,即
( 3 , − 2 ) = 3 ∗ i + ( − 2 ) ∗ j (3,-2)=3*i+(-2)*j (3,2)=3i+(2)j
在这里插入图片描述
不难证明,对任意向量(x,y),都有 ( x , y ) = x ∗ i + y ∗ j (x,y)=x*i+y*j (x,y)=xi+yj。而x、y,正是向量分别在两个基上的缩放值。
值得注意的是,例子中给出的基是正交的(即内积为0,或直观说相互垂直)单位向量,但可以成为一组基的唯一要求就是线性无关,任意长度、非正交的基也是可以的(如下图)。不过因为正交基有较好的性质,所以一般使用的基都是正交单位向量。
在这里插入图片描述
上图中的v和w同样更够表达二维空间中的任意向量,也可以作为一组基。因此,当我们将一组标量(x,y)作用到不同的基上,显然会得到不一样的向量。

基变换的矩阵表示

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

( 1 / 2 1 / 2 − 1 / 2 1 / 2 ) ( 3 2 ) = ( 5 / 2 − 1 / 2 ) \begin{pmatrix}1/\sqrt{2}&1/\sqrt{2} \\-1/\sqrt{2}&1/\sqrt{2}\end{pmatrix}\begin{pmatrix}3\\2\end{pmatrix}=\begin{pmatrix} 5/\sqrt{2}\\-1/\sqrt{2}\end{pmatrix} (1/2 1/2 1/2 1/2 )(32)=(5/2 1/2 )

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

( 1 / 2 1 / 2 − 1 / 2 1 / 2 ) ( 1 2 3 1 2 3 ) = ( 2 / 2 4 / 2 6 / 2 0 0 0 ) \begin{pmatrix} 1/\sqrt{2} & 1/\sqrt{2} \\ -1/\sqrt{2} &1/\sqrt{2}\end{pmatrix}\begin{pmatrix} 1 & 2 & 3 \\ 1 & 2 & 3\end{pmatrix} =\begin{pmatrix} 2/\sqrt{2} & 4/\sqrt{2} & 6/\sqrt{2} \\0&0&0\end{pmatrix} (1/2 1/2 1/2 1/2

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值