我们在进行数据分析时,往往会发现数据具有很多种属性,比如某类型饼干的口味、加工方式、保质期、价格、购买人群等等。每一种属性就代表该数据在某一维度上的数值。多维度的数据无疑会增加数据的准确性与可靠性,但也给我们的计算带来麻烦。
主成分分析(Principal Component Analysis,PCA)是一种常用的数据分析方法,通常用于提取数据的主要特征分量,从而完成对高维数据进行降维的过程。
PCA对数据的降维不是简单的维度挑选,而是将m维的数据映射到n维上(n<m),并且保证得到的n维数据仍能准确表示原数据特征。
例如现在我们的数据如下图所示,x1,x2代表原数据的两个维度。这时候我们看图像,也不好说x1,x2哪个特性更能代表数据特征。
我们再一看,好像原数据也可以用y1,y2两个新维度表示。如下图,而且此时y1维度能体现的信息量(variance)远比y2维度大。这时我们就可以把x1,x2两个维度的数据投影到y1维度上,放弃y2维度上的数据特征,从而达到降维的目的。找到y1方向的过程就是PCA实现的过程。
如下图,e为投影方向,xk’为初始点xk投影到e方向上的投影点。
经过理论推导(下面有推导过程,我先把结论写在前面),我们发现只要计算矩阵。
(其中n为x点个数)的特征值,那么在这些特征值中最大者对应的特征向量方向,就是我们要求解的e的方向。
数学推导过程如下(可不看):
我们取αk为投影点到坐标原点的距离,且e向量模长为1。
以所有初始点与投影点间欧式距离之和最小为求解目标
取
这样我们的推导目标从求J(e)最小值转化为求
拉格朗日乘数法,u对e求导后等于0
可以看出,λ为矩阵S的特征值,e为对应的特征向量
所以PCA问题的问题求解就是求矩阵S特征值的最大值。
我们以实际数学问题为例,我们现在有如下数据点:
我们对S特征值计算,发现有(0.7061,0.7081)和(-0.7081,-0.7061)两条特征向量,对应特征值为0.1934和1.7951。那么我们选取对应特征值大的(-0.7081,-0.7061)特征向量为最优投影方向。
大致为(1,1)方向。
如下图,我们看到投影到(0.7071,0.7071)向量上的数据大致呈正态分布。
降维对于维度较高的数据集是很有必要的,虽然部分数据被舍弃了,但是舍弃这部分信息之后能使样本的采样密度增加,这正是降维的重要动机。
另一方面,当数据受到噪声影响时,最小的特征值所对应的特征向量往往与噪声有关,将他们舍弃能在一定程度上起到去噪的效果。
MATLAB代码
微信扫描下方二维码即可提取代码: