主成分分析(PCA)

PCA,主成分分析

  

  主成分分析主要用于数据的降维。原始数据中数据特征的维度可能是很多的,但是这些特征并不一定都是重要的,如果我们能够将数据特征进行精简,不但能够减少存储空间,而且也有可能降低数据中的噪声干扰。


  举个例子:这里有一组数据,如下 表1
  2.5  1.2  -2.3  -2.8   -1    0.3

  3.3  0.8  -1.8  -2.5  -0.8  0.2

 

  每一列代表一组数据,每一行代表一种特征,可见有2个特征,即数据是2维的,我们所要做的是尽可能的降低数据复杂度,同时也要保证数据中的信息不丢失。

  将2维的数据画在坐标系中,我们发现如果以红色的轴作为x轴(y轴与x轴垂直),那么就可以数据坐标值就变成了,x轴方向值差距较大,而y轴方向值想接近,也可以用方差来描述,x轴方向的方差较大,y轴方向的方差较小,那么如果允许少量的信息失去,仅留下x轴方向的值,那么原数据就由2维降到了1维,这就是主成分分析的主要原理,由此可见,主要就是“坐标轴的变换”,将原来2维的数据“投影”到这个1维的轴上,那么方法的关键就是如何找到这个新的“坐标轴”。

 

  直观地理解,因为我们想尽可能的保留信息,所以在垂直于这个“新坐标轴”的方向上数据点的分布应该尽量的“扁”一些,换句话说,就是数据点在“新坐标轴”上的分布尽量的分散一些,用数学的语言表达就是使得数据点在“新坐标轴”上投影的方差尽量的大。这样,不同的两个点,投影之后也不是重叠的,最大地保留了信息。保留方差大的维度,忽略方差较小的维度,以此来降维。下面给出方差公式:

  这样就足够了吗?

 

  我们考虑一组数据从3维降为2维的情况。也就是说要找到2个“新坐标轴”,那么该如何选,前面已经知道,我们要尽量使得数据在新坐标轴方向的投影尽量的分散,也就是方差尽量的大。同时这两条坐标轴一定要正交(你可以理解为垂直)。

 

  为什么一定要这样呢?

  因为如果两个坐标轴不互相垂直,那么其中一条坐标轴一定可以沿另一条坐标轴方向分解,这样这两条坐标轴所表达的“信息”事实是有重叠的,所以要让两条坐标轴表达的“信息”相互独立,即“新坐标轴”要正交。

  这个用数学的语言来表达就是所有的数据在两个“新坐标轴”的投影的协方差为0,即关于特征的两个行向量协方差为0。这个“新坐标轴”也被称为基,这个坐标轴变换也被称为基变换

下面是协方差公式:

  (X,Y表示两个维度的数据,相当于表1中的两行)

  总结一下,就是两个方面:
    1)行向量的方差尽量大,Cov(X,X) Cov(Y,Y) (方差)
    2)行向量间的协方差为0 Cov(X,Y) Cov(Y,X)
  列向量指的是数据降维后在“新坐标轴”投影的下的值所组成的向量

 

  我们将这两个方面组合一个矩阵,这个矩阵称为协方差矩阵,我们的目标是使得其对角线以外的协方差为0,对角线上尽量保留方差大的维度(忽略方差较小的维度,以此来降维)。

  那么这个协方差矩阵如何快速得到?

  由协方差的计算公式我们可以得到,将原矩阵每行都减去该行的均值,得到矩阵A,然后矩阵A乘以矩阵A的转置,最后除以N-1(N是矩阵行数)

 

  那么如何求得”新坐标轴“(一组基)和原始数据在”新坐标轴“下的表示?
  (下面引用张洋的博客,因为他写的实在太精彩了)
  设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵,设Y=PX,则Y为X对P做基变换后的数据(Y即为压缩后的数据)。设Y的协方差矩阵为D,我们推导一下D与C的关系:

  现在事情很明白了!我们要找的P不是别的,而是能让原始协方差矩阵对角化的P。换句话说,优化目标变成了寻找一个矩阵P,满足(公式)是一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述优化条件。

  (想看更加详细的解释,请移步 http://blog.codinglabs.org/articles/pca-tutorial.html)

  关于矩阵P的求法,由于协方差矩阵C是实对称阵,只要求出协方差矩阵C的特征值及对应的特征向量,将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P

  我们先介绍主成分分析法的原理,再来体验一下计算过程(使用Matlab)。

首先初始化矩阵

矩阵减去每行的均值

计算协方差矩阵C

求解协方差矩阵的特征向量和特征值

则P = eigenvectors

由于38.0823>0.5460

保留第二个特征向量(-0.7175, -0.6966)

计算压缩后的数据Y

 

参考博客:

http://blog.codinglabs.org/articles/pca-tutorial.html

http://www.360doc.com/content/14/0526/06/15831056_380900310.shtml

posted @ 2015-09-03 15:44  coolAlan  阅读(863)  评论(0编辑  收藏  举报