前言

学习深度学习,教材是人民邮电出版的《DEEP LEARNING 深度学习》,讲的太细节了,数学符号完全不知道什么意思,非数学系的我看着头痛,只好翻翻博客,最后选择这篇进行学习: 主成分分析(PCA)原理详解
记录下学习过程…

PCA简介

介绍

深度学习的数据往往是多维度的,但不是每个维度都能对最后结果产生影响,试想有下面一组数据:
图
若假设各个科目成绩不会相互影响,我们很容易看出语文列的数据相同,也就是说即使我们去掉该列也不会影响最后的结果.那么数学、物理、化学这三门课的成绩构成了这组数据的主成分.
再看一组数据:
图
显然不容易找出其主成分.数据太多了,以至于看起来有些凌乱!也就是说,无法直接看出这组数据的主成分,因为在坐标系下这组数据分布的很散乱。究其原因,是因为无法拨开遮住肉眼的迷雾~如果把这些数据在相应的空间中表示出来,也许你就能换一个观察角度找出主成分。
图
而对于更高维度人脑无法想象的数据应该如何分析?

数据降维

假设我们有一个三维的数据,但其数据点均分布在三维立体空间的一个二维平面上,那么这组数据是否能够仅使用二维坐标表示?
答案是肯定的,而这个过程的本质是: 这个三维数据的秩是2,即最大有两个线性无关变量.
如果这个二维平面不过原点呢?那就把它平移到过原点,然后记录下该改变方便还原.

PCA的思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征。这k维特征称为主成分,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n-k维特征。

PCA实例

假设一组数据:
图
行代表样例,列代表特征,每个样例两个特征分别是x、y;

  1. 分别求x和y的平均值,然后对于所有的样例,都减去对应的均值.这里x的均值是1.81,y的均值是1.91,那么第1个样例减去均值后即为(0.69,0.49),得到:
    图

  2. 求特征协方差矩阵,如果数据是3维,那么协方差矩阵是:
    图
    这里只有x&y,求解得:
    图
    对角线上分别是x和y的方差,非对角线上是协方差。协方差是衡量两个变量同时变化的变化程度。协方差大于0表示x和y若一个增,另一个也增;小于0表示一个增,一个减。如果x和y是统计独立的,那么二者之间的协方差就是0;但是协方差是0,并不能说明x和y是独立的。协方差绝对值越大,两者对彼此的影响越大,反之越小。协方差是没有单位的量,因此,如果同样的两个变量所采用的量纲发生变化,它们的协方差也会产生树枝上的变化。

    • 协方差矩阵的计算及概念如下:^1
      图1
      图2
      关于求方差除以n-1而不是n的解释:
      如果除以n,那么样本方差总比总体方差的值偏小,所以除n-1.^2
  3. 求协方差的特征值和特征向量:
    图
    上面是两个特征值,下面是对应的特征向量,特征值0.0490833989对应特征向量为,这里的特征向量都归一化为单位向量。

  4. 将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵.
    这里特征值只有两个,我们选择其中最大的那个,这里是1.28402771,对应的特征向量是(-0.677873399, -0.735178656)T。

  5. 把样本点投影到选定的特征向量上.假设样例数为m,特征数为n,减去均值后的样本矩阵为DataAdjust(m*n),协方差矩阵是n*n,选取的k个特征向量组成的矩阵为EigenVectors(n*k)。那么投影后的数据FinalData为:
    FinalData(10*1) = DataAdjust(10*2矩阵) x 特征向量(-0.677873399, -0.735178656)T
    其结果是:
    图
    这样,n维数据就变成了k维,这k维就是原始特征在k维上的投影
    上面的数据可以认为是x&y融合成一个新的特征,其基本上代表了两个特征.
    图
    正号表示预处理后的样本点,斜着的两条线就分别是正交的特征向量(由于协方差矩阵是对称的,因此其特征向量正交),最后一步的矩阵乘法就是将原始样本点分别往特征向量对应的轴上做投影。

Python代码实现PCA

待补

参考资料