PCA算法学习记录

本文深入探讨了PCA(主成分分析)的数学原理及其在数据降维中的应用。PCA通过线性变换将高维数据映射到低维空间,同时保留关键信息,适用于数据压缩和可视化。文章详细解释了如何选择最优基向量,以及如何利用协方差矩阵和奇异值分解(SVD)进行数据转换。
摘要由CSDN通过智能技术生成

     重要声明:以下内容主要参考吴恩达机器学习课程和张洋的PCA数学原理文章

      降维(dimensionality reduction)降维的目的:(1)数据压缩(2)可视化数据。

       PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。

                                  

        在PCA中,我们希望找到一个由K个方向向量(vector direction)组成的低维度空间,所有数据投射到该低维度空间的投射误差(projection error)尽可能小。方向向量要经过原点,投射误差是数据到该方向向量的垂线长度。

       以上是PCA的基本概念,现在来PCA算法的理解。

       通常情况下,我们用(1,1)和(-1,1)作为向量的一组基。一般来说,我们希望基的模是1,因为从内积的意义可以看到,如果基的模是1,那么就可以方便的用向量点乘基而直接获得其在新基上的坐标了!实际上,任何一个向量我们都可以很简单的找到其在新基的坐标。例如我们总可以找到其同方向上模为1的向量,只要让两个分量分别除以模就好了。例如,上面的基可以变为。现在,我们想获得(3,2)在新基上的坐标,即在两个方向上的投影矢量值,那么根据内积的几何意义(内积可以这样理解A⋅B=|A||B|cos(a),可让|B|=1,我们只要分别计算(3,2)和两个基的内积,不难得到新的坐标为。下图为示意图:

                                                                    

        另外,我们列举的例子中基是正交的(即内积为0,或直观说相互垂直),但可以成为一组基的唯一要求就是线性无关,非正交的基也是可以的。不过因为正交基有较好的性质,所以一般使用的基都是正交的。   

       现在使用一种更简洁的方式得到该向量在新基上的坐标,使用的矩阵相乘。

    

       推广一下,如果我们有m个二维向量,只要将二维向量按列排成一个两行m列矩阵,然后用“基矩阵”乘以这个矩阵,就得到了所有这些向量在新基下的值。例子中第一个括号是基矩阵,第二个括号是需要变化坐标的向量矩阵。

        一般的,如果我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果

                               

       如果基的数量少于向量本身的维数,则可以达到降维的效果。但是我们还没有回答一个最关键的问题:如何选择基才是最优的。

       这里就涉及到两个重要的数学知识:协方差方差

        为了让这个基(这个方向)能尽可能多的保存原有的信息,我们希望(1)这些基都是尽量不相关的(相关的话意味着有信息特征重合,存在信息冗余)和(2)原有的坐标投射到新基上尽量分散。

     (1)的指标用协方差衡量,(2)的指标用方差衡量。这个时候协方差矩阵就出场了,它可以将两者统一表示!

                               

       等号左边就是协方差矩阵(covariance matrix),这个矩阵对角线上的两个元素分别是两个字段的方差,而其它元素是a和b的协方差。

        推广一下,设我们有m个n维数据记录,将其按列排成n乘m的矩阵X,设,则C是一个对称矩阵,其对角线分别个各个字段的方差,而第i行j列和j行i列元素相同,表示i和j两个字段的协方差

        于是我们发现要达到优化目标,等价于将协方差矩阵对角化:即除对角线外的其它元素化为0,并且在对角线上将元素按大小从上到下排列。(协方差=0表示线性不相关)

         所以现在要做的就是如何将协方差矩阵对角化。我们设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵,设Y=PX,则Y为X对P做基变换后的数据。设Y的协方差矩阵为D,我们推导一下D与C的关系:

                                                                     

         现在优化目标变成了寻找一个矩阵P,满足是一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述优化条件。

         所以现在问题的焦点转化为如何寻找这个矩阵P。

         我们知道,协方差矩阵C是一个是对称矩阵,在线性代数上,实对称矩阵有一系列非常好的性质:

        1)实对称矩阵不同特征值对应的特征向量必然正交。

        2)设特征向量λλ重数为r,则必然存在r个线性无关的特征向量对应于λλ,因此可以将这r个特征向量单位正交化。

         由上面两条可知,一个n行n列的实对称矩阵一定可以找到n个单位正交特征向量,设这n个特征向量为e1,e2,⋯,en,我们将其按列组成矩阵:

                                                    

                                          

       协方差矩阵的特征向量(eigenvector)可以利用奇异值分解法(singular value decomposition)求得,简称SVD。

       所以PCA算法用伪代码表示,:

                                            

        sigma是协方差矩阵,Ureduce是这个协方差矩阵的特征向量。

       正如之前学的一样第二步的代码如上向量化表示可以不需要循环求和;z是X降维后的矩阵。

        PCA本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,也就是让它们在不同正交方向上没有相关性。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值