PCA在机器学习中很常用,是一种无参数的数据降维方法。PCA步骤:
将原始数据按列组成n行m列矩阵X将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值求出协方差矩阵求出协方差矩阵的特征值及对应的特征向量将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵PY=PX即为降维到k维后的数据1. PCA的推导PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。
我们知道PCA是一种数据降维的方法,在降低维度的过程中,我们当然想要保留更多的特征,PCA就是经过数学推导,保留最多特征同时降维的方法。
在推导之前要先知道几个基础知识:
内积与投影两个维数相同的向量的内积被定义为:
假设A和B是两个n维向量,我们知道n维向量可以等价表示为n维空间中的一条从原点发射的有向线段,为了简单起见我们假设A和B均为二维向量,则A=(x1,y1),B=(x2,y2)。则在二维平面上A和B可以用两条发自原点的有向线段表示,见下图:
现在我们从A点向B所在直线引一条垂线。我们知道垂线与B的交点叫做A在B上的投影,再设A与B的夹角是a,则投影的矢量长度为|A|cos(a),其中|A|是向量A的模,也就是A线段的标量长度。
到这里还是看不出内积和这东西有什么关系,不过如果我们将内积表示为另一种我们熟悉的形式:
现在事情似乎是有点眉目了:A与B的内积等于A到B的投影长度乘以B的模。再进一步,如果我们假设B的模为1,即让|B|=1,那么就变成了:
也就是说,设向量B的模为1,则A与B的内积值等于A向B所在直线投影的矢量长度!这就是内积的一种几何解释,也是我们得到的第一个重要结论。在后面的推导中,将反复使用这个结论。
基下面我们继续在二维空间内讨论向量。上文说过,一个二维向量可以对应二维笛卡尔直角坐标系中从原点出发的一个有向线段。例如下面这个向量:
在代数表示方面,我们经常用线段终点的点坐标表示向量,例如上面的向量可以表示为(3,2),这是我们再熟悉不过的向量表示。
我们列举的例子中基是正交的(即内积为0,或直观说相互垂直),但可以成为一组基的唯一要求就是线性无关,非正交的基也是可以的。不过因为正交基有较好的性质,所以一般使用的基都是正交的。
3. 基变换的矩阵表示一般的,如果我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果。(新基按行,向量按列)
特别要注意的是,这里R可以小于N,而R决定了变换后数据的维数。也就是说,我们可以将一N维数据变换到更低维度的空间中去,变换后的维度取决于基的数量。因此这种矩阵相乘的表示也可以表示降维变换。
最后,上述分析同时给矩阵相乘找到了一种物理解释:两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去。更抽象的说,一个矩阵可以表示一种线性变换。很多同学在学线性代数时对矩阵相乘的方法感到奇怪,但是如果明白了矩阵相乘的物理意义,其合理性就一目了然了。
4. 协方差矩阵与优化目标我们从上面的矩阵乘法与基变换可以看出,当新基的维数小于原来的维数时可以做到数据的降维,但是究竟如何选择新基就是我们现在面临的问题,我们想要选择一个维数更小的新基,同时新基保留有更多的信息。我们知道矩阵向新基投影的形式,也就是PCA是将一组N维的特征投影到K维(K
那么怎么衡量更多的特征,也就是投影后尽量少的重叠,投影值尽可能分散。
协方差从二维到一维的降维,只需要找到一个一维基使得方差最大,但是三维降到二维呢?我们需要找到两个基让这个三维数据投影到两个基上,如果我们找方差最大的两个基,会发现他们完全一样或者线性相关,这和一个基没什么区别,不能表达更多的信息,所以我们需要添加限制条件,我们希望这两个基彼此线性无关,扩展到K个基也是一样。
当协方差为0时,表示两个字段完全独立。为了让协方差为0,我们选择第二个基时只能在与第一个基正交的方向上选择。因此最终选择的两个方向一定是正交的。
至此,我们得到了降维问题的优化目标:将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)。
关于PCA的贡献率与K的选择在我的文章特征值和特征向量中说过,特征值反映了矩阵对于特征向量的拉伸程度,只有拉伸而没有旋转,也就是在特征向量方向上的作用程度,所以在PCA中我们选取前K个特征向量组成新基进行投影,就是因为原特征在前K个特征向量有最大的作用程度。
投影过后可以保留更多的信息,作用程度是用特征值表示的,所以我们可以使用下面的式子表示贡献率,贡献率是表示投影后信息的保留程度的变量,也就是特征值的总和比上前K个特征值,一般来说贡献率要大于85%。