知识:PCA降维

参考了两篇关于PCA的帖子:

        CodingLabs - PCA的数学原理

        【机器学习】降维——PCA(非常详细) - 知乎

里面讲的比较详细,我只做个小简化

PCA(Principal Component Analysis):用于高维数据的降维,可用于提取数据的主要特征分量

这里需要一些数学的基础知识:

1. 内积和投影

        设 A=(x1,y1),B=(x2,y2),那么A·B = x1*x2 + y1*y2 =|A|*|B|*cos(α)(α为AB向量的夹角)

知识:PCA降维_第1张图片

如果 向量B的模为1,则A与B的内积值等于A向B所在直线投影的矢量长度

A·B = x1*x2 + y1*y2 =|A|*cos(α)

2. 基 

根据上面的公式 我们就能看出|B|为1时,可以当作一个基向量,那么 |A|*cos(α) 也就是向量 A 在基向量 B 上的投影。

那么对于向量 (3,2) 这个点来说,在 和  这组基下的坐标:

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

知识:PCA降维_第2张图片

                 A                                B                    =                B的各向量在A各个基上的投影

       R*n(p:1*n)           n*M(a:n*1)

        两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去

3. 方差和协方差

        方差(Variance)用来度量随机变量和其数学期望(即均值)之间的偏离程度。

        协方差用于衡量两个变量的总体误差

        协方差矩阵:

        假设我们只有 a 和 b 两个特征,那么我们将它们按行组成矩阵 X 

                 协方差矩阵:

#############################################################################

PCA:

ok,我们知道PCA是降维处理,对于每个数据,他有不同的特征或者记录,也就相当于上述向量的维度,PCA所做的就是 在减小维度的情况下,尽可能地多保持数据的差异性。(使得每一个向量内的数据的差异最大,即每一个向量各个记录或者特征内数据的方差最大)。

另外,由上面的投影,也能看出,如果将向量做降维处理,实际上就是相当于 将n维的向量组成的矩阵 B,按照基向量所组成的矩阵 A 进行投影,得到便是降维后的向量。 注意到基所组成的行向量的个数 就是所降到的维数R (R

对于上面二维降成一维的问题来说,找到那个使得方差最大的方向就可以了。不过对于更高维,还有一个问题需要解决。如果我们还是单纯只选择方差最大的方向,很明显,这个方向与第一个方向应该是“几乎重合在一起”,显然这样的维度是没有用的,因此,应该有其他约束条件。让两个特征或记录尽可能表示更多的原始信息,不希望它们之间存在(线性)相关性的,因为相关性意味着两个字段不是完全独立,必然存在重复表示的信息。也就是使每一个向量各个记录或者特征之间数据的协方差最小(为0)

        现在,可以看出目标就是每一个向量各个记录或者特征内数据的方差最大,每一个向量各个记录或者特征之间数据的协方差最小

再由上面的协方差矩阵,就能看出,就是让对角线上的方差最大,让其余的位置(协方差)变为0,这不就是对角化吗

在此之前,我们先对各个向量做一个零均值化

        这样,我们的目标就是需要找到一个矩阵P(P 是一组基按行组成的矩阵),使Y = PX(列向量组成的矩阵),Y 即 降维后的数据,

        设Y的协方差矩阵为D,我们推导一下D与C(X的协方差矩阵)的关系:

知识:PCA降维_第3张图片

         这样我们就看清楚了,我们要找的 P 是能让原始协方差矩阵对角化的 P。换句话说,优化目标变成了寻找一个矩阵 P,满足  是一个对角矩阵,并且对角元素按从大到小依次排列,那么 P 的前 K 行就是要寻找的基,用 P 的前 K 行组成的矩阵乘以 X 就使得 X 从 N 维降到了 K 维并满足上述优化条件

        由于C是实对称矩阵,他的所有特征向量必然相互正交,因此一个 n 行 n 列的实对称矩阵C一定可以找到 n 个单位正交特征向量,设这 n 个特征向量为  ,我们将其按列组成矩阵: 。则对协方差矩阵 C 有如下结论:

知识:PCA降维_第4张图片

其中  为对角矩阵,其对角元素为各特征向量对应的特征值(可能有重复)。 

 此时,发现 P:

P 是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是 C 的一个特征向量。如果设 P 按照  中特征值的从大到小,将特征向量从上到下排列,则用 P 的前 K 行组成的矩阵乘以原始数据矩阵 X,就得到了我们需要的降维后的数据矩阵 Y。

PCA算法:

PCA算法

总结一下PCA的算法步骤:

设有m条n维数据。

1)将原始数据按列组成n行m列矩阵X

2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值

3)求出协方差矩阵

4)求出协方差矩阵的特征值及对应的特征向量

5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P

6)即为降维到k维后的数据

第一次写,哪里有问题,请指正!

你可能感兴趣的:(深度学习,机器学习,线性代数)