PCA降维
- 最大可分性:划分后方差最大
- 最近重构行:点到划分平面距离最小
1. 向量表示与基变换
1.1 内积
两个向量A和B内积形式:
内积运算将两个向量映射为实数,但是在这个计算过程中无法看出其物理含义,接下来通过集合角度进行分析,为了简单起见,假设A和B为二维向量,则:
如下图所示:

可以看出来,A与B的内积等于A到B的投影长度乘以B的模。
如果假设B的模为1,即让|B| = 1,那么就变成了:
也就是说,A与B的内积等于A向B所在的直线投影的标量大小。
这是内积的一种几何解释,也是第一个重要结论。
1.2 基
在我们常说的坐标系中,向量其实引入了一个定义:以x轴和y轴上正方向长度为1的向量为标准。向量(3,2)实际是说在x轴投影为3而y轴投影为2。注意投影是一个标量,所以可以为负。所以对于向量(3,2)来说,如果我们想求它在(1,0)(0,1)这组基下的坐标的话,分别内积即可,当然内积之后还是(3,2)。
所以,大致可以得到一个结论,我们要准确描述向量,首先要确定一组基,然后给出在基所在的各个直线上的投影值就可以了。为了方便求坐标,我们希望这组基向量模长为1。因为向量的内积运算当模长为1时,内积可以直接表示投影。然后还需要这组基是线性无关的,我们一般用正交基,非正交基也是可以的,不过正交基有较好的性质。
1.3 基变换的矩阵表示
eg. 对于向量(3,2)这个点来说,在(\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})和(-\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})这组基下的坐标是多少?
首先通过(3,2)分别与之做内积,得到(\frac{5}{\sqrt{2}},-\frac{1}{\sqrt{2}})这个新坐标。
我们可以用矩阵相乘的形式简洁的表示这个变换:

左边矩阵的两行分别为两个基,乘以原向量,其结果刚好为新坐标的基。推广一下,如果我们有m个二维向量,只要将二维向量按列排成一个两行m列矩阵,然后用基矩阵乘以这个矩阵就可以得到了所有这些向量在新基下的值。例如对于数据点(1,1)(2,2)(3,3)来说,想变换到刚才那组基上,则可以这样表示:
我们可以把它写成通用的表示形式:

其中p_i是一个行向量,表示第i个基,a_j是一个列向量,表示第j个原始数据记录。实际上也就是做了一个向量矩阵化的操作。
上述分析给矩阵相乘找到了一个物理解释:两个矩阵相乘的意义就是将右边矩阵中的每一个列向量a_i变换到做百年矩阵中以每行行向量为基所表示的空间中去。也就是说一个矩阵可以表示一种线性变换。
2. 最大可分性
上面我们讨论了选择不同的基可以对同样一组数据给出不同的表示,如果基的数量少于向量本身的维数,则可以达到降维的效果。
但是我们还没有回答一个最关键的问题:如何选择基才是最优的。或者说,如果我们有一组N维向量,现在要将其降到K维,那么我们应该如何选择K个基才能最大程度保留原有的信息?
一种直观的看法是:希望投影后的投影值尽可能分散,因为如果重叠就会有样本消失。当然这个也可以从熵的角度进行理解,熵越大所含信息越多。
2.1 方差
我们知道数值的分散程度,可以用数学上的方差来表述。一个变量的方差可以看作是每个元素与变量均值的差的平方和的均值,即:
为了方便处理,我们将每个变量的均值都化为0,因此方差可以直接用每个元素的平方和除以元素个数表示:
于是上面的问题被形式化表述为:寻找一个一维基,使得所有数据变化为这个基上的坐标表示后,方差值最大。
2.2 协方差
在一维空间中,我们可以用方差来表示数据的分散程度。而对于高维数据,我们使用协方差进行约束,协方差可以表示两个变量的相关性。为了让两个变量尽可能表示更多的原始信息,我们希望他们之间不存在线性相关性,因为相关性意味着两个变量不是完全独立,必然存在重复表示的信息。
协方差公式为:
由于均值为0,所以协方差公式可以表示为:
当样本数比较大时,不必在意其是m还是m-1,为了方便计算,我们分母取m。
当协方差为0时,表示两个变量完全独立。为了让协方差为0,我们选择第二个基时只能在与第一个基正交的方向上进行选择,因此最终选择的方向一定是正交的。
2.3 协方差矩阵
针对我们给出的优化目标接下来通过数学的角度给出优化目标。
可以看到,最终要达到的目的与变量内方差及变量间协方差有密切的关系。因此我们希望能将两者统一表示,仔细观察发现,两则均可以表示为内积的形式,而内积又与矩阵相乘密切相关。
假设我们只有a,b两个变量,那么我们将他们按行组成矩阵X:

然后:

我们可以看到这个矩阵对角线上的分别是两个变量的方差,而其它元素是a,b的协方差。两者被统一到了一个矩阵中。
我们很容易被推广到一般情况:
设我们有m个n维数据记录,将其排列成矩阵X_{m,n},设C是一个对称矩阵,其对角线分别对应各个变量的方差,而第i行j列和第j行i列元素相同,表示i和j两个变量的协方差。
2.4 矩阵对角化
根据我们的优化条件,我们需要将除对角线外的其它元素化为0,并且对角线上将元素按大小从上到下排列(变量方差尽可能大),这样我们就达到了优化的目的。这样说可能还不是很清晰,我们进一步看下原矩阵与基变换后矩阵协方差矩阵的关系。
设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵,设Y = PX,则Y 为X对P做基变换后的数据。设Y的协方差矩阵为D,我们推导一下D与C的关系:

这样就看清楚了,我们要找的P是能让原始协方差矩阵对角化的P。换而言之,优化目标变成了寻找一个矩阵P满足PCP^T是一个对角矩阵,并且元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述优化条件。
至此,距离PCA就只剩下完成对角化。
由上文可知,协方差矩阵C是一个对称矩阵,在线性代数中实对称矩阵有一系列非常3好的性质:
- 实对称矩阵不同特征值对应的特征向量必然正交。
- 设特征向量\lambda重数为r则必然存在r个线性无关的特征向量对应于\lambda,因此可以将这r个特征向量单位正交化。
由上面两条可知,一个n行n列的实对称矩阵一定可以找到n个单位正交特征向量,设这n个特征向量为e_1,e_2,\cdots,e_n,我们将其按列组成矩阵:E = (e_1,e_2,\cdots,e_n)。则对称协方差矩阵C有如下结论:

其中\Lambda为对角矩阵,其对角元素为各特征向量对应的特征值。
到这里我们发现我们已经找到了需要的矩阵P:P = E^T
P是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是C的一个特征向量。如果设P按照\Lambda中特征值的从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Y。
步骤总结
- 将原始数据按列组成n行m列矩阵X。
- 将X的每一行进行零均值化,即减去这一行的均值。
- 求出协方差矩阵的特征值及对应的特征向量。
- 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前K行组成矩阵P。
- Y = PX即为降维到K后的数据。