https://wenku.baidu.com/view/a6c65131172ded630b1cb6d9.html
假设输入数据集为,维度n=2,即
假设x的均值为0,那么就是x的协方差矩阵
数据变化的主方向就是协方差矩阵的主特征向量
可以通过标准的数值线性代数运算软件求得特征向量,我们先计算出协方差矩阵的特征向量,按列排放,而组成矩阵U
上面的两维数据案例中,u1,u2构成了一个新基,可以令其用来表示数据,令为训练样本,那么就是样本点x在u1上的投影的长度(幅值),同理,是x投影到u2上的幅值。
旋转数据
降维
数据的主方向就是旋转数据的第一维,若想把数据降到一维,可令
更一般地,如果想把数据降到k维表示,即,
只需取的前k个成分,分别对应前K个数据变化的主方向。
PCA的另外一种解释是是一个n维向量,其中前几个成分可能比较大(例如,上例中的大部分样本第一个成分的取值相对较大),而后面的成分可能会比较小(例如上例中的大部分样本的较小)
PCA算法做的其实就是丢弃中后面(取值较小的)的成分,就是将这些成分近似为零。具体的说,设的近似表示,那么将除了k个成分外,其余全赋值为零,就得到:
还原近似数据
现在我们得到了原始数据的低维“压缩”表征量,反过来,如果给定,我们如何还原数据x呢?
要转换回来,只需要
进一步,我们把看做将的最后n-k个元素被设置为0所得的近似表示,因此如果给定,可以通过在其末尾添加n-k个零来得到对的近似,最后,左乘U便可以近似还原出原数据x
在实现时,我们实际上并不先给填充0,然后再左乘U,因为这意味着大量的乘零运算。我们可以用来与U的前k列相乘,即上式中最右项,来达到同样的目的,得到重构的。
我们得到的是原始数据集的一维近似重构。
选择主成分个数
我们该如何选择k,即保留多少个PCA主成分?
如果k过大,数据压缩率不高,在极限情况k=n时,等于是在使用原始数据(只是旋转投射到了不同的基);相反地,如果k过小,那近似误差太大。
决定k值时,我们通常会考虑不同k值可保留的方差百分比。
如果k=n,那么我们得到的是对数据的完美近似,也就是保留了100%的方差,即原始数据的所有变化都被暴力下来;
如果k=0,那等于是用零向量来逼近输入数据,也就是只有0%的方差被保留下来。
一般而言,设表示的特征值(按由大到小顺序排列),使得为对应于特征向量的特征值,那么,如果我们保留前k个成分,则保留的方差比可计算为:
上面的简单二维实验中,.因此,如果保留k=1个主成分,等于我们保留了7.29/(7.29+0.69)=0.913即91.3%的方差。
保留方差百分比更正式的定义,这篇文章不谈。
因此,如果,则说明也就基本接近于0,所以用0 来近似它并不会产生多大损失,这也就解释了为什么要保留前面的主成分,因为对应的值较大,而不是末尾的那些。这些前面的主成分变化性更大,取值也更大,如果将其设为0势必引入较大的近似误差。
以图像处理为例,一个惯常的经验法则是选择k以保留99%的方差,换句话说,我们选取满足以下条件的最小k值:
对于其他应用,如果不介意引入稍大的误差,有时也保留90%-98%的方差范围。若向他人介绍PCA算法详情,告诉他们你选择的k保留了95%的方差,比告诉他们你保留了前120个或任意个数字的主成分更多理解。
对图像应用PCA
为了使PCA算法能有效工作,通常我们希望所有的特征都有相似的取值范围,并且均值接近于0。如果你曾经在其他应用中使用过PCA算法,你可能知道有必要单独对每个特征做预处理,即通过估算每个特征的均值和方差,而后将其取值范围规整化为零均值和单位方差。但是,对于大部分图像类型,我们却不需要进行这样的预处理。假定我们将在自然图像上训练算法,此时特征代表的是像素j的值。所谓“自然图像”,不严格的说,是指人或动物他们一生中所见的那种图像。
白化
又叫sphering。
例如,假设训练数据是图像,由于图像中相邻像素之间有很强的相关性,所以用于训练时输入是冗余的。白化的目的就是降低输入的冗余性。我们希望通过白化过程使得学习算法的输入具有如下性质(i)特征之间相关性较低
(ii)所有特征具有相同的方差
使用先前2D的例子来描述白化的主要思想,然后介绍如何将白化与平滑和PCA结合。
如何消除输入特征之间的相关性,上面提到的时实际上已经消除了除了输入特征之间的相关性。
的协方差矩阵对角元素的值为,非对角元素的值为0;因此,是不相关的,满足我们对白化结果的第一个要求(特征间相关性降低)。
为了使每个输入特征具有单位方差,我们可以直接使用来缩放每个特征。具体地,我们定义白化后的数据如下:
, 其中