UFLDL Tutorial学习笔记
PCA
主成分分析(PCA)是一种能够极大提升无监督特征学习速度的数据降维算法。更重要的是,理解PCA算法,对实现白化算法有很大的帮助,很多算法都先用白化算法作预处理步骤。
假设我们想把数据从2维降到1维。(在实际应用中,我们也许需要把数据从256维降到50维;在这里使用低维数据,主要是为了更好地可视化算法的行为)。下图是我们的数据集:这些数据已经进行了预处理,使得每个特征X1和 X2具有相同的均值(零)和方差。
为方便展示,根据X1值的大小,我们将每个点分别涂上了三种颜色之一,但该颜色并不用于算法而仅用于图解。
PCA算法将寻找一个低维空间来投影我们的数据。从下图中可以看出, U1是数据变化的主方向,而 U2是次方向。
为了计算出U1和U2,我们先计算出协方差矩阵
假设X的均值为零,那么∑ 就是x的协方差矩阵。
可以证明数据变化的主方向U1就是协方差矩阵的主特征向量,而U2是次特征向量。
在本例中,向量U1和U2构成了一个新基,可以用来表示数据。令
就是样本点X在维度U1上的投影的长度(幅值)。同样的,
是投影到U2维度上的幅值。
对图像数据应用PCA算法
对于自然图像,每个特征的方差本身就是差不多的
所以我们不做方差归一化,唯一还需进行的规整化操作就是均值规整化,其目的是保证所有特征的均值都在0附近。根据应用,在大多数情况下,我们并不关注所输入图像的整体明亮程度。比如在对象识别任务中,图像的整体明亮程度并不会影响图像中存在的是什么物体。更为正式地说,我们对图像块的平均亮度值不感兴趣,所以可以减去这个值来进行均值规整化。
可用如下算法来对每幅图像进行零均值化操作:
如果你处理的图像并非自然图像(比如,手写文字,或者白背景正中摆放单独物体),其他规整化操作就值得考虑了,而哪种做法最合适也取决于具体应用场合。但对自然图像而言,对每幅图像进行上述的零均值规整化,是默认而合理的处理。
主成分分析数学证明
白化
我们已经了解了如何使用PCA降低数据维度。在一些算法中还需要一个与之相关的预处理步骤,这个预处理过程称为白化(一些文献中也叫sphering)。举例来说,假设训练数据是图像,由于图像中相邻像素之间具有很强的相关性,所以用于训练时输入是冗余的。白化的目的就是降低输入的冗余性;更正式的说,我们希望通过白化过程使得学习算法的输入具有如下性质:(i)特征之间相关性较低;(ii)所有特征具有相同的方差。
下面我们先用前文的2D例子描述白化的主要思想,然后分别介绍如何将白化与平滑和PCA相结合。
如何消除输入特征之间的相关性? 在前文计算 时实际上已经消除了输入特征之间的相关性。得到的新特征的分布如下图所示:
这个数据的协方差矩阵如下:
(注: 严格地讲, 这部分许多关于“协方差”的陈述仅当数据均值为0时成立。下文的论述都隐式地假定这一条件成立。不过即使数据均值不为0,下文的说法仍然成立,所以你无需担心这个。)
协方差矩阵对角元素的值为 和 绝非偶然。并且非对角元素值为0; 因此 和是不相关的, 满足我们对白化结果的第一个要求 (特征间相关性降低)。
为了使每个输入特征具有单位方差,我们可以直接使用 作为缩放因子来缩放每个特征具体地,我们定义白化后的数据
这些数据现在的协方差矩阵为单位矩阵I,我们说XPCA white是数据经过PCA白化后的版本,其不同的特征之间不相关并且具有单位方差
ZCA白化
最后要说明的是,使数据的协方差矩阵变为单位矩阵 I
的方式并不唯一。具体地,如果R是任意正交矩阵,即满足
仍然具有单位协方差。在ZCA白化中,令 R=U。我们定义ZCA白化的结果为:
网友评论