哲哲的ML笔记(三十:主成分分析PCA)

PCA基本概念

  1. PCA:Principal Component Analysis,主成分分析
  2. 非常普遍的降维算法
    要做的是找到一个方向向量,当我们把所有的数据都投射到该向量上时,我们希望投射平均均方误差能尽可能地小。方向向量是一个经过原点的向量,而投射误差是从特征向量向该方向向量作垂线的长度。
    问题描述:将n维数据降到k维,目标是找到向量u^1, u^2,……u^k使得总投射误差最小
  3. 用途:可以用来进行数据压缩,如果100维的向量最后可以用10维来表示,那么压缩率为90%。
  4. 好处:
    4.1 PCA技术的一大好处是对数据进行降维的处理。我们可以对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。同时最大程度的保持了原有数据的信息。
    4.2 PCA技术的一个很大的优点是,它是完全无参数限制的。在PCA的计算过程中完全不需要人为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关,与用户是独立的。

PCA 算法

  1. 数据集预处理
    计算一组特征的均值\mu_i,令每个特征x_j=x_j-\mu_i,从而将特征的均值设为0
    如果不同组特征之间数量级不同,还要对每组特征进行
  2. 协方差矩阵\sum=\frac{1}{m}\sum_{i=1}^{n}x^i(x^i)^T
    注意:x_i\in n*1, \sum\in n*n
  3. 用奇异值分解计算协方差矩阵\sum的特征向量
    sigma=\sum


    对于一个n*n维度的矩阵,上式中的U是一个具有与数据之间最小投射误差的方向向量构成的矩阵。如果我们希望将数据从n维降至k维,我们只需要从U中选取前个k向量,获得一个n*k维度的矩阵U_{reduce}
    新特征向量z^i=U^T_{reduce}*x^i, z\in k*1

重建的压缩表示

PCA作为压缩算法。在那里你可能需要把1000维的数据压缩100维特征,或具有三维数据压缩到一二维表示。所以,如果这是一个压缩算法,应该能回到这个压缩表示,回到你原有的高维数据.
比如,给定z^i,可能的100维,怎么回到原来的x^i
x_{approx}=U_{reduce}*z^i,其中,x_{approx}\approx x

选择PCA的数量k

主要成分分析是减少投射的平均均方误差 \frac{1}{m}\sum_{i=1}^m\|x^i-x^i_{approx}\|^2
训练集的方差为\frac{1}{m}\sum_{i=1}^m\|x^i\|^2
我们希望在平均均方误差与训练集方差的比例尽可能小的情况下选择尽可能小的k
平均均方误差与训练集方差的比例:\frac{\frac{1}{m}\sum_{i=1}^m\|x^i-x^i_{approx}\|^2}{\frac{1}{m}\sum_{i=1}^m\|x^i\|^2}
我们可以先令k=1,然后进行主要成分分析,获得U_{reduce}z,然后计算比例是否小于1%。如果不是的话再令k=2,如此类推,直到找到可以使得比例小于1%的最小k值(原因是各个特征之间通常情况存在某种相关性)

还有一些更好的方式来选择k,当我们在Octave中调用“svd”函数的时候,我们获得三个参数:[U, S, V] = svd(sigma)。


上图的S的是一个的矩阵,只有对角线上有值,而其它单元都是0,我们可以使用这个矩阵来计算平均均方误差与训练集方差的比例
\frac{\frac{1}{m}\sum_{i=1}^m\|x^i-x^i_{approx}\|^2}{\frac{1}{m}\sum_{i=1}^m\|x^i\|^2}=1-\frac{\sum_{i=1}^kS_{ii}}{\sum_{i=1}^nS_{}ii}\leq1\%

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章