对输入数据,维度为2时,想要把数据降维1维:
数据的主方向就是旋转数据的第一维。因此,若想把这数据降到一维,可令:
数据已经进行预处理(零均值),使得每个特征和具有相同的均值和方差。
PCA算法将寻找一个低维空间来投影我们的数据。从下图中可以看出,是数据变化的主方向,而 是次方向。
为更形式化地找出方向和,我们首先计算出协方差矩阵,如下所示:
就是协方差矩阵的主特征向量,而是次特征向量。(按照特征值得大小选取)
向量和构成了一个新基,可以用来表示数据。那么就是样本点在维度上的投影的长度(幅值)。同样的,是投影到维度上的幅值。
在本例中,可得的点图如下(取 ):
协方差:为了衡量两个数据的相关性,一个数据朝大于均值的方向走的趋势时,另一个数据如果朝小于均值的方向走,趋势相反,协方差值为负的,负相关;如果另一个数据同意朝大于均值的方向变化,协方差为正值,正相关。如果协方差值为0,不相关。
数据白化就是为降低训练数据的冗余,降低输入的冗余性
由前面的例子,特征的分布如下图所示:
这个数据的协方差矩阵如下:
和是不相关的, 满足我们对白化结果的第一个要求 (特征间相关性降低)。为了使每个输入特征具有单位方差,我们可以直接使用作为缩放因子来缩放每个特征 。具体地,我们定义白化后的数据 如下:
绘制出 ,我们得到:
这些数据现在的协方差矩阵为单位矩阵 。我们说,是数据经过PCA白化后的版本: 中不同的特征之间不相关并且具有单位方差。
拿图像为例,图像中的像素之间存在很强的相关性。(在图像处理中,一个像素与相邻像素的灰度值之间有联系,所以可以利用这一点进行图像压缩)。白化就是为了减少冗余也就是减少这种相关性。PCA白化在减少特征之间相关性的处理方法与PCA算法相同,找到一个新的基,将数据投影到新的基上,也就是将原始数据做旋转变化,达到减少相关性的目标。但PCA白化与PCA有一点不同,就是处理后的数据的方差为单位方差。主要是将主轴上的数据进行了缩放处理。
ZCA白化是在PCA白化后的数据基础上做处理,主要是对数据进行旋转,使数据比较好的接近原始数据,并没有减少数据特征之间的相关性。
PCA与白化,
就是对输入数据进行预处理,
前者对数据进行降维,后者对数据进行方差处理。