关于(Principal Component Analysis)的推导方法很多,Ng在CS229的课程中也说到大约有10种左右;本文介绍的就是他在课程中讲到的,基于最大化方差的推导方法。
1. What is PCA
PCA是主成分分析(Principal Component Analysis)的简写,属于线性降维方法中的一种;其目的是对包含冗余的数据集进行降维等。所谓线性降维是指这种方法仅仅对于各维度之间存在线性关系(此时肯定有冗余维度)时有作用,或者说效果最好;而对于其它存在非线性情况的冗余时,不适用。
2. Idea of reduce
先来通过两个例子,弄明白降维的思想:
2.1. Reduce data from 2D to 1D
如上图所示为一个二维平面,所有的点都用了两个维度来表示;那我们如何能降低到只用一个维度就能表示呢?接着看下图:
此时,若仅用图中的绿色直线作为坐标轴,以每个点在上的的投影为新的坐标点;此时,先前的二维坐标就被上的一维坐标取代了。
2.2. Reduce data from 3D to 2D
如上图所示为一个三维空间,所有的点都用了三个维度来表示;那又如何能降低到只用两个维度就能表示呢? 答:投影到一个平面。
我们可以看到,几乎所有的点都在红色平面上;所以,我们就将所有的点投影到由所张成的二维平面上,然后用二维平面点来代替原来三维空间中的点。
以上就是降维的思想。
2.3. Standardization
在正式介绍之前,我们先对数据进行标准化处理,目的是为了提高算法的收敛速度,以及计算推导的方便性。标准化之后样本的均值为0,方差为1。如下图:
红色的样本点,是经蓝色样本点标准化之后的结果;我们可以看到,除了全局位置发生了改变,其它诸如相对位置,以及样本点之间的结构都没有发生变化。绿色的点,为样本的均值点(中心)
3. PCA(Principal Component Analysis)
前面说到了降维的思想:从高维降到低维就是在低维空间(平面)中找到对应基(上面说到的)来表示原来高维空间中的点即可。所以降维的关键就在于如何建立一个模型来找到对应的基。
3.1 Reduce data from 2D to 1D
在上图中(‘x’表示样本点,‘·’表示投影点),似乎看一眼就觉得用左图中投影方式比右图中的更好。为什么呢?因为右图中的投影点太“密集”会导致相互重叠而丢失信息,所以显然这种投影方式不好。并且此时我们可以知道,衡量好坏的标准就是投影后所有的样本点整体上要尽可能的分开,也就是离中心点要尽量的远。而这,可以通过最大化方差(Voriance)来衡量。
如上图所示,设直线所在的方向单位向量为(图中红色箭头),样本点与的夹角为,则该样本点的投影点到原点的距离为,(均为列向量)。
证明: 易知,
所以我们可以得到如下优化目标:
对于这个优化问题,我们用拉格朗日乘数法很容易就能求解出为红色部分的特征向量。
证明:
3.2 Reduce data from 3D to 2D
上面说完从2维降到1维的推导,可能比较容易理解;我再来推导以下从3维降到2维的推导,这样我们就能顺理成章地引入到高维了。
如上图,是投影到二维平面后的结果。红色箭头分别为单位,则优化模型变成如下形式:
由上面的推导可知,分别为的两个特征向量。
3.3 In high-dimension
由上面的例子,我们可以顺其自然的将其拓展到高维空间中:
设为n维空间降维到维空间中的基向量,则有,
且为方阵的前k个主向量(前k个最大特征值对应的特征向量)
4. Representation
由此我们可以便可以知道从n维空间中,降到k维空间的k个基向量就是的k个主要特征向量。在我们得到这些向量之后如何来表示,也就是降维呢?下面就来说说坐标的表示:
我们知道在平面直角坐标系中,我们用的基向量分别是,如下图所示:
那么向量到底是什么含义呢?其实就是在方向移动个单位,在方向移动个单位。可能这样感观不明显,我们换旋转一下坐标系。
如图所示,此时我们选取来作为我们的基向量,那么此时坐标系中的样本点在是多少呢?答案是:在方向移动;在方向移动,所以,在新的坐标系下,样本点x的坐标为:
所以降维之后的坐标:
5. Conclusion
由以上,我们总结降维的步骤为:
(1). 标准化;
(2). 计算 其中,为数据集,n为维度;
(3). 计算特征向量,并选取前k个主要特性向量;
(4). 计算降维后的数据集,
下面贴一个用python写的例子的源码pcaByCoding.py
关于PCA的推导,到此可以算是结束了。下面我再来谈谈对,以及PCA的一些理解,没兴趣的直接关闭,不影响。
6. Others
先放一张图,待会儿会用到,里面提到了运用PCA的隐藏前提。
其中有两点值得注意,分别是线性关系和正态分布。也就是说当各个维度之间存在着线性关系,以及每个维度中的随机变量都服从正态分布时效果最佳。
第一点:关于协方差矩阵
设有如下形式数据集(已做标准化处理):
即,样本数和维度分别为2和3,为了叙述方面,我们后面会用a,b,c分别表示三个维度。
因此我们可以得到:
又因为
所以有:
所以:
因此称之为协方差矩阵。从这个矩阵中能得到什么信息呢?
我们知道,倘若则,维度之间一定不存在线性关系;又因为各维度之间均服从二维正态分布,我们可以进一步得出独立。
表示:a,b,c中任意两个随机变量
也就是说,给定一个协方差矩阵:倘若除了主对角线外,其他元素均为0(或接近于0),则其对应的数据集一定不适合通过PCA来进行线性降维。或者换句话说,它已经是某个数据集PCA降维后的结果,此时不存在线性关系。
假设为个基向量组成的矩阵,为维度间包含有线性关系的的矩阵(即可以降维);则降维后的矩阵为,且此时的个维度之间已经不存在线性关系。
由此我们可以知道,的协方差矩阵肯定是一个对角阵,那到底是什么样的呢?我们一起来看看:
于是我们有:
又,是实对称阵,则必存在正交阵,使得
需要注意的是,中的顺序,要同中的顺序对应,即若取
即:
我们总能找到一个序列
所以此时有
由此我们可以得到,,
第二点:关于主要特征向量
前面我们说到,最终选择的k个主要特征向量;并且也说到,k个主要特征向量就是前k个最大特征值依次对应的k个特征向量。但是原因呢?
要知道原因得先来谈谈特征向量和特征值。我们知道越大的特征值所对应的特征向量在进行线性变换后被拉伸的程度越剧烈(详见此文第四章)。因此,在线性变换(降维)后,欲使每个维度上的样本点越离散(方差越大),就必须选择被拉伸得最剧烈的特征向量,而被拉伸的最剧烈的特征向量,就通过的值来确定。
参考:
- 如何通俗易懂地解释「协方差」与「相关系数」的概念?
- PCA的数学原理
- PRINCIPAL COMPONENT ANALYSIS
- Are there implicit Gaussian assumptions in the use of PCA (principal components analysis)?
- cs229-notes10.pdf
- 带你重拾线性代数