PCA算法 外番

来源:互联网 发布:windows phone 8.1软件 编辑:程序博客网 时间:2024/05/16 16:56

本栏目内容来自 http://deeplearning.stanford.edu/wiki/index.php/%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90

得意

PCA算法将寻找一个低维空间来投影我们的数据。从下图中可以看出,是数据变化的主方向,而是次方向。也就是说,数据在方向上的变化要比在方向上大。为更形式化地找出方向,我们首先计算出矩阵,如下所示: 


假设的均值为零,那么就是的协方差矩阵。(符号,读"Sigma",是协方差矩阵的标准符号。虽然看起来与求和符号比较像,但它们其实是两个不同的概念。) 


你可以通过标准的数值线性代数运算软件求得特征向量(见实现说明).我们先计算出协方差矩阵的特征向量,按列排放,而组成矩阵


此处,是主特征向量(对应最大的特征值),是次特征向量。以此类推,另记为相应的特征值。


在本例中,向量构成了一个新基,可以用来表示数据。令为训练样本,那么就是样本点在维度上的投影的长度(幅值)。同样的,投影到维度上的幅值。 


旋转数据 

至此,我们可以把基表达为: 


(下标“rot”来源于单词“rotation”,意指这是原数据经过旋转(也可以说成映射)后得到的结果) 

对数据集中的每个样本分别进行旋转:for every ,然后把变换后的数据显示在坐标图上,可得: 


这就是把训练数据集旋转到基后的结果。一般而言,运算表示旋转到基,...,之上的训练数据。矩阵有正交性,即满足,所以若想将旋转后的向量还原为原始数据,将其左乘矩阵即可:, 验算一下:


数据降维 


数据的主方向就是旋转数据的第一维。因此,若想把这数据降到一维,可令: 


更一般的,假如想把数据降到维表示(令),只需选取的前 个成分,分别对应前个数据变化的主方向。 



选择主成分个数 


一般而言,设表示的特征值(按由大到小顺序排列),使得为对应于特征向量 的特征值。那么如果我们保留前个成分,则保留的方差百分比可计算为: 



对图像数据应用PCA算法 


为使PCA算法能有效工作,通常我们希望所有的特征都有相似的取值范围(并且均值接近于0)。但是,对于大部分图像类型,我们却不需要进行这样的预处理。

在自然图像上进行训练时,对每一个像素单独估计均值和方差意义不大,因为(理论上)图像任一部分的统计性质都应该和其它部分相同,图像的这种特性被称作平稳性(stationarity)。 

具体而言,为使PCA算法正常工作,我们通常需要满足以下要求:(1)特征的均值大致为0;(2)不同特征的方差值彼此相似。对于自然图片,即使不进行方差归一化操作,条件(2)也自然满足,故而我们不再进行任何方差归一化操作(对音频数据,如声谱,或文本数据,如词袋向量,我们通常也不进行方差归一化)。实际上,PCA算法对输入数据具有缩放不变性,无论输入数据的值被如何放大(或缩小),返回的特征向量都不改变。更正式的说:如果将每个特征向量\textstyle x 都乘以某个正数(即所有特征量被放大或缩小相同的倍数),PCA的输出特征向量都将不会发生变化。

既然我们不做方差归一化,唯一还需进行的规整化操作就是均值规整化,其目的是保证所有特征的均值都在0附近。根据应用,在大多数情况下,我们并不关注所输入图像的整体明亮程度。比如在对象识别任务中,图像的整体明亮程度并不会影响图像中存在的是什么物体。更为正式地说,我们对图像块的平均亮度值不感兴趣,所以可以减去这个值来进行均值规整化。

具体的步骤是,如果 代表16x16的图像块的亮度(灰度)值( n=256),,可用如下算法来对每幅图像进行零均值化操作: 


, for all \textstyle j

请注意:1)对每个输入图像块都要单独执行上面两个步骤,2)这里的是指图像块的平均亮度值。尤其需要注意的是,这和为每个像素单独估算均值是两个完全不同的概念。 

如果你处理的图像并非自然图像(比如,手写文字,或者白背景正中摆放单独物体),其他规整化操作就值得考虑了,而哪种做法最合适也取决于具体应用场合。但对自然图像而言,对每幅图像进行上述的零均值规整化,是默认而合理的处理。 



原创粉丝点击