[关闭]
@fsfzp888 2018-05-21T22:24:56.000000Z 字数 1934 阅读 1181

(十二)主成分分析

线性代数 机器学习基础


主成分分析(PCA)来源于SVD以及协方差矩阵,在前边的一篇总结中,已经简要的总结了协方差矩阵。可以说,在样本矩阵为的矩阵,且每一个样本为一个行向量的情况下,协方差矩阵为:

从这个公式中看到了什么?一个实矩阵的转置乘以这个实矩阵最终将会得到一个实对称矩阵,这在前边也已经总结了,所以此时协方差矩阵必然是一个实对称矩阵。对于协方差矩阵,还有一个无偏版本,即,不过这个是不过差了一个常数,这里只是想要在原理上简单的理解,所以就只以等式(1)为准。
而在之前奇异值分解的总结文章中已经说明,对于任意实数矩阵来说,必然存在SVD,所以:
从直观的角度来看,主成分分析本质上是希望,对原有的样本数据进行基变换,使得新的基尽可能取方差最大的方向,当这些基取到了方差最大方向后,此时,协方差矩阵将会变成一个对角矩阵,而且,此时协方差矩阵的迹(trace)是最大的。关于矩阵的迹有什么特性,是否有什么直观的解释,这个以后再说。而在此处,我也不想列举什么使用拉格朗日乘子法来优化目标函数的等式,其实,通过等式(2),稍微做点事情,就可以得到PCA了,令:
结合等式(1)和(2),此时可以得到:
这个时候,得到的协方差矩阵直接就是想要得到的对角矩阵。如果把每一个样本看作是一个列向量的话,那么,实际上,基变换就是:
基变换矩阵就是!!!
不过这里需要注意的是,在样本矩阵中,每一个样本是一个行向量,而不是列向量。
所以,根据上边的理解,可以得到,PCA算法的主要步骤其实就是:

  • (1) 将样本矩阵中心化得到,即每一个纬度的样本值都减去了对应的均值
  • (2) 求解矩阵的奇异值分解,得到基变换矩阵
  • (3) 通过得到在新的坐标基下的样本数据
  • (4) 通过获得协方差矩阵得到各个方差方向的主成分
  • (5) 对按照对角线上的数据大小从大到小排列得到,于此同时,也调整的列向量的顺序到
  • (6) 设置一个阈值t,任何对角线上的数值小于t的都设置为0,这些值所对应的中的一些列向量纬度成分也可以被舍弃,从而达到了数据降纬的目的。此时假若还剩下个主成分,那么,数据相当于减少了原来的,得到的裁减后的样本数据可以用作进一步的数据分析用途。

上边的步骤,阐述了PCA的主要流程,可以看到,PCA的主要目的是为了给数据降纬,以便于减少需要分析的数据的数目,过滤掉不必要的纬度成分,节省计算开销。当然了,也可以用作数据压缩的用途,只不过不见得会多么理想。

关于PCA,这里还有一个问题:
为什么说协方差矩阵等于对角矩阵之后,各个基就是方差最大方向了呢?
这里我也没办法给出多么严谨的解释,只是像直观的说明一下:
各个两两不同纬度的数据成分协方差为零,这说明它们都是不相关的。当然了,协方差等于零不能推出独立,只是说它们是不相关的。不相关对应到正交,但是并不是说它们就没有共同的向量纬度成分在里边,可能在某一个方向它们都是有数值的。这个时候的列向量之间其实是两两正交,从投影的角度来说,对一个列向量与其自身求取方差,其实就是求数据点在某一个坐标轴上的投影的各个数值的平方和再取平均(此时认为已经中心化),在做了基变换之后,向量变成了其实就是各个数据点在新的坐标系下,第个轴的投影取值,而它和数据点在任何其它坐标轴的投影的取值是正交的,这说明,的是完全落在坐标轴上边的,也就是它自己就是坐标轴,这个时候,数据点第个纬度成分的投影就是自身,所以没有因为投影导致大小的损失,所以自然此时就是最大的方差方向了。
这个说明我想肯定是不够严谨的,不过也就是意思一下罢了。毕竟我只不过就是个屌丝学渣,根本不想看太多复杂的公式推导。

@fsfzp888
2018 年 05月 21日

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注