主成分分析(PCA)是一种能够极大提升无监督特征学习速度的数据降维算法。更重要的是,理解PCA算法,对实现白化算法有很大帮助,很多算法都先用白化算法作预处理步骤。
假设你使用图像来训练算法,因为图像中相邻的像素高度相关,输入数据是有一定冗余的。具体来说,假如我们正在训练的16×16灰度值图像,记为一个256维向量,其中特征值
对应每个像素的亮度值。由于相邻像素间的相关性,PCA算法可以将输入向量转换为一个维数低很多的近似向量,而且误差非常小。
在我们的实例中,使用的输入数据集表示为,维度
即
。假设我们想把数据从2维降到1维。(实际应用中,我们也许需要把数据从156维降到50维;在这里使用低维数据,主要是为了更好地可视化算法的行为)。下图是我们的数据集:
这些数据已经进行了预处理,使得每个特征 和
具有相同的均值(零)和方差。
为方便展示,根据 值的大小,我们将每个点分别涂上了三种颜色之一,但改颜色并不用于算法而仅用于图解。
PCA算法将寻找一个低维空间来投射我们的数据。从下图中可以看出, 是数据变化的主方向,而
是次方向。
也就是说,数据在 方向上的变化要比在
方向上大。
为更形式化地找出方向 和
,我们首先计算出矩阵
,如下所示:
假设 的均值为零,那么
就是x的协方差矩阵。(符号
,读"Sigma",是协方差矩阵的标准符号。虽然看起来与求和符号
比较像,但它们其实是两个不同的概念。)
可以证明,数据变化的主方向 就是协方差矩阵
的主特征向量,而
是次特征向量。
你可以通过标准的数值线性代数运算软件求得特征向量(见实现说明).我们先计算出协方差矩阵的特征向量,按列排放,而组成矩阵
:
此处, 是主特征向量(对应最大的特征值),
是次特征向量。以此类推,另记
为相应的特征值。
在本例中,向量 和
构成了一个新基,可以用来表示数据。令
为训练样本,那么
就是样本点
在维度
上的投影的长度(幅值)。同样的,
是
投影到
维度上的幅值。
旋转数据
至此,我们可以把 用
基表达为:
(下标“rot”来源于单词“rotation”,意指这是原数据经过旋转(也可以说成映射)后得到的结果)
对数据集中的每个样本 分别进行旋转:
for
every
,然后把变换后的数据
显示在坐标图上,可得:
这就是把训练数据集旋转到 ,
基后的结果。一般而言,运算
表示旋转到基
,
,
...,
之上的训练数据。矩阵
有正交性,即满足
,所以若想将旋转后的向量
还原为原始数据
,将其左乘矩阵
即可:
,
验算一下:
.
数据降维
数据的主方向就是旋转数据的第一维 。因此,若想把这数据降到一维,可令:
更一般的,假如想把数据 降到
维表示
(令
),只需选取
的前
个成分,分别对应前
个数据变化的主方向。
PCA的另外一种解释是: 是一个
维向量,其中前几个成分可能比较大(例如,上例中大部分样本第一个成分
的取值相对较大),而后面成分可能会比较小(例如,上例中大部分样本的
较小)。
PCA算法做的其实就是丢弃 中后面(取值较小)的成分,就是将这些成分的值近似为零。具体的说,设
是
的近似表示,那么将
除了前
个成分外,其余全赋值为零,就得到:
在本例中,可得 的点图如下(取
):
然而,由于上面 的后
项均为零,没必要把这些零项保留下来。所以,我们仅用前
个(非零)成分来定义
维向量
。
这也解释了我们为什么会以 为基来表示数据:要决定保留哪些成分变得很简单,只需取前
个成分即可。这时也可以说,我们“保留了前
个PCA(主)成分”。
还原近似数据
现在,我们得到了原始数据的低维“压缩”表征量
,反过来。如果给定
,我们应如何还原原始数据x呢?要转换回来,只需
即可。进一步,我们把
看作将
的最后
个元素被置0所得的近似表示,因此如果给定
,可以通过在其末尾添加
个0来得到对
的近似,最后,左乘
便可近似还原出原数据
。具体来说,计算如下:
上面的等式基于先前对U的定义。在实现时,我们实际上并不先给 填0然后再左乘
,因为这意味着大量的乘0运算。我们可用
来与
的前
列相乘,即上式中最右项,来达到同样的目的。将该算法应用于本例中的数据集,可得如下关于重构数据
的点图:
由图可见,我们得到的是对原始数据集的一维近似重构。
在训练自动编码器或其它无监督特征学习算法时,算法运行时间将依赖于输入数据的维数。若用 取代
作为输入数据,那么算法就可使用低维数据进行训练,运行速度将显著加快。对于很多数据集来说,低维表征量
是原数据集的极佳近似,因此在这些场合使用PCA是很合适的,它引入的近似误差的很小,却可显著地提高你算法的运行速度。
选择主成分个数
主成分分析,白化,主成分分析和白化(无监督学习之前的步骤)【转】
原文:http://www.cnblogs.com/rong86/p/3558761.html