PCA 2
1、实例
本例中,使用的输入数据集表示为{x(1),x(2),...,x(m)},维度n=2,即x(i)∈R2.假设我们想把数据从2维降到1维。下图是数据集
这些数据已经进行了预处理,使得每个特征属性x1和x2具有相同的均值(零)和方差。为方便展示,根据x1的大小,将每个点分别涂上了三种颜色之一,但该颜色并不用于算法而仅用于图解。
PCA算法将寻找一个低维空间来投影我们的数据。从下图可以看出,u1是数据变化的主方向,而u2是次方向。
为更形式化地找出方向u1和u2,我们首先计算出矩阵Σ,如下所示:
假设x的均值为零,那么Σ就是x的协方差矩阵。可以证明数据变化的主方向u1就是协方差矩阵Σ的主特征向量,而u2是次特征向量。
先计算出协方差矩阵的特征向量,按列排放,而组成矩阵:U = [u1 u2 ... un],其中,u1是主特征(对应最大的特征值),u2是次特征向量,以此类推。另λ1,λ2,...,λn为相应的特征值。
本例中,向量u1和u2构成了空间R2的一组新基,可以用来表示数据。令x∈R2为训练样本,那么u1Tx就是样本x在维度u1上的投影长度(幅值)。同样的u2Tx是x投影到u2维度上的幅值。
2、旋转数据
至此,我们可以把x用基(u1,u2)表达为
对数据集中的每个样本x(i)分别进行旋转
然后把变换后的数据xrot(i)显示在坐标图上,可得下图。这就是把训练集旋转到(u1,u2)集后的结果。
一般而言,运算UTx表示旋转到基(u1,u2,...,un)之上的训练数据。矩阵U具有正交性,即满足UTU = UUT = I,所以若想将旋转后的向量xrot还原为原始数据x,将其左乘矩阵U即可:
x = Uxrot ( 验算一下: Uxrot = UUTx = x )
3、数据降维
数据的主方向就是旋转数据的第一维xrot,1.因此,若想把数据降到一维,可令:
更一般的,假如想把数据x∈Rn降到 k 维表示,只需选择xrot的前 k 个成分,分别对应前 k 个数据变化的主方向。那么将 xrot 除了前 k 个分量外,其余全赋值为零,就得到:
在本例中,可得如下图所示的关于的点图(其中 n = 2,k = 1)
所以,要决定保留哪些成分变得很简单,只需取UTx前 k 个分量即可。这时也可以说,我们“保留了前 k 个PCA(主)成分”。
4、还原近似数据
现在,我们得到了原始数据x∈Rn的低维“压缩”表征向量∈Rk,反过来,如果给定
,我们应如何还原原始数据 x 呢?
实际上并不先给填0然后再左乘U,因为这意味着大量的乘0运算。可以用
∈Rk来与U的前k列相乘来达到同样的目的。
本例中重构数据x帽的点图如下:(得到的是对原始数据集的一维近似重构)
5、选择主成分个数
该如何选择k,即保留多少个PCA主成分?对于高维数据来说,做这个决定就没有那么简单:如果 k 过大,数据压缩率不高,在极限情况 k = n 时,等于是在使用原始数据(只是旋转投影到了不同的基);相反地,如果 k 过小,那数据的近似误差太大。
决定 k 值时,我们通常会考虑不同 k 值可保留的方差百分比。具体来说,如果 k = n ,那么我们得到的是对数据的完美近似,也就是保留了100%的方差,即原始数据的所有变化都被保留下来;想法,如果 k = 0,那等于是使用零向量来逼近输入数据,也就是只有0%的方差被保留下来。
一般而言,设λ1,λ2,...,λn 表示矩阵 Σ 的特征值(按由大到小顺序排列),使得 λj 为对应特征向量的 uj 特征值。那么,如果我们保留前 k 个成分,则保留的方差百分比可计算为
在上面简单的二维实验中,λ1 =7.29,λ2=0.69。因此,如果保留 k = 1个主成分,等于我们保留了7.29/(7.29+0.69) = 0.913,即91.3%的方差。
易证:
,因此,如果 λj≈0,则说明xrot,j也就基本上接近于0,所以用0来近似它并不会产生多大的损失。
以处理图像数据为例,一个惯常的经验法则是选择 k 以保留99%的方差,换句话说,我们选择满足以下条件的最小 k 值:
对于其它应用,如果不介意引入稍大的误差,有时也保留90%-98%的方差范围。
浙公网安备 33010602011771号