失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 机器学习 - 主成分分析法 (PCA)

机器学习 - 主成分分析法 (PCA)

时间:2021-10-04 00:02:39

相关推荐

机器学习 - 主成分分析法 (PCA)

文章目录

1. 主成分分析问题2. 主成分分析算法3. 重建的压缩表示4. 选择主成分的数量

1. 主成分分析问题

主成分分析(PCA)是最常见的降维算法。

PCA中,要做的是找到一个方向向量(Vector direction),当把所有的数据都投射到该向量上时,希望投射平均均方误差能尽可能地小。方向向量是一个经过原点的向量,而投射误差是从特征向量向该方向向量作垂线的长度。

问题是要将nnn维数据降至kkk维,目标是找到向量u(1)u^{(1)}u(1),u(2)u^{(2)}u(2),…,u(k)u^{(k)}u(k)使得总的投射误差最小。主成分分析与线性回顾的比较:

主成分分析与线性回归是两种不同的算法。主成分分析最小化的是投射误差(Projected Error),而线性回归尝试的是最小化预测误差。线性回归的目的是预测结果,而主成分分析不作任何预测。

上图中,左边的是线性回归的误差(垂直于横轴投影),右边则是主要成分分析的误差(垂直于红线投影)。

PCA将nnn个特征降维到kkk个,可以用来进行数据压缩,如果100维的向量最后可以用10维来表示,那么压缩率为90%。同样图像处理领域的KL变换使用PCA做图像压缩。但PCA要保证降维后,还要保证数据的特性损失最小。

PCA技术的一大好处是对数据进行降维的处理。可以对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。同时最大程度的保持了原有数据的信息。

PCA技术的一个很大的优点是,它是完全无参数限制的。在PCA的计算过程中完全不需要人为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关,与用户是独立的。

但是,这一点同时也可以看作是缺点。如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。

2. 主成分分析算法

PCA减少nnn维到kkk维:

均值归一化。需要计算出所有特征的均值,然后令 xj=xj−μjx_j= x_j-μ_jxj​=xj​−μj​。如果特征是在不同的数量级上,还需要将其除以标准差 σ2σ^2σ2。

计算协方差矩阵covariance matrix)ΣΣΣ:

∑=1m∑i=1n(x(i))(x(i))T\sum=\dfrac {1}{m}\sum^{n}_{i=1}\left( x^{(i)}\right) \left( x^{(i)}\right) ^{T}∑=m1​∑i=1n​(x(i))(x(i))T

计算协方差矩阵ΣΣΣ的特征向量eigenvectors):

对于一个 n×nn×nn×n维度的矩阵,上式中的UUU是一个具有与数据之间最小投射误差的方向向量构成的矩阵。如果希望将数据从nnn维降至kkk维,只需要从UUU中选取前kkk个向量,获得一个n×kn×kn×k维度的矩阵,用UreduceU_{reduce}Ureduce​表示,然后通过如下计算获得要求的新特征向量z(i)z^{(i)}z(i):

z(i)=UreduceT∗x(i)z^{(i)}=U^{T}_{reduce}*x^{(i)}z(i)=UreduceT​∗x(i)

其中xxx是n×1n×1n×1维的,因此结果为k×1k×1k×1维度。注:不对方差特征进行处理。

3. 重建的压缩表示

PCA作为压缩算法。在那里可能需要把1000维的数据压缩100维特征,或具有三维数据压缩到一二维表示。所以,如果这是一个压缩算法,应该能回到这个压缩表示,回到原有的高维数据的一种近似。

所以,给定的z(i)z^{(i)}z(i),这可能100维,怎么回到原来的表示x(i)x^{(i)}x(i),这可能是1000维的数组?

PCA算法,可能有一个这样的样本。如图中样本x(1)x^{(1)}x(1),x(2)x^{(2)}x(2)。做的是,把这些样本投射到图中这个一维平面。然后现在需要只使用一个实数,比如z(1)z^{(1)}z(1),指定这些点的位置后他们被投射到这一个三维曲面。给定一个点z(1)z^{(1)}z(1),怎么能回去这个原始的二维空间呢?xxx为2维,zzz为1维,z=UreduceTxz=U^{T}_{reduce}xz=UreduceT​x,相反的方程为:xappox=Ureduce⋅zx_{appox}=U_{reduce}\cdot zxappox​=Ureduce​⋅z,xappox≈xx_{appox}\approx xxappox​≈x。如图:

这是一个漂亮的与原始数据相当相似。所以,这就是从低维表示zzz回到未压缩的表示。得到的数据的一个之间原始数据 xxx,也把这个过程称为重建原始数据。

4. 选择主成分的数量

主要成分分析是减少投射的平均均方误差:

训练集的方差为:1m∑i=1m∥x(i)∥2\dfrac {1}{m}\sum^{m}_{i=1}\left\| x^{\left( i\right) }\right\| ^{2}m1​∑i=1m​∥∥​x(i)∥∥​2

希望在平均均方误差与训练集方差的比例尽可能小的情况下选择尽可能小的kkk值。

如果希望这个比例小于1%,就意味着原本数据的偏差有99%都保留下来了,如果选择保留95%的偏差,便能非常显著地降低模型中特征的维度了。

可以先令k=1k=1k=1,然后进行主要成分分析,获得UreduceU_{reduce}Ureduce​和zzz,然后计算比例是否小于1%。如果不是的话再令k=2k=2k=2,如此类推,直到找到可以使得比例小于1%的最小kkk 值(原因是各个特征之间通常情况存在某种相关性)。

还有一些更好的方式来选择kkk,当在Octave中调用“svd”函数的时候,获得三个参数:[U, S, V] = svd(sigma)

其中的SSS是一个n×nn×nn×n的矩阵,只有对角线上有值,而其它单元都是0,可以使用这个矩阵来计算平均均方误差与训练集方差的比例:

1m∑i=1m∥x(i)−xapprox(i)∥21m∑i=1m∥x(i)∥2=1−Σi=1kSiiΣi=1mSii≤1%\dfrac {\dfrac {1}{m}\sum^{m}_{i=1}\left\| x^{\left( i\right) }-x^{\left( i\right) }_{approx}\right\| ^{2}}{\dfrac {1}{m}\sum^{m}_{i=1}\left\| x^{(i)}\right\| ^{2}}=1-\dfrac {\Sigma^{k}_{i=1}S_{ii}}{\Sigma^{m}_{i=1}S_{ii}}\leq 1\%m1​∑i=1m​∥∥​x(i)∥∥​2m1​∑i=1m​∥∥∥​x(i)−xapprox(i)​∥∥∥​2​=1−Σi=1m​Sii​Σi=1k​Sii​​≤1%

也就是:Σi=1ksiiΣi=1nsii≥0.99\frac {\Sigma^{k}_{i=1}s_{ii}}{\Sigma^{n}_{i=1}s_{ii}}\geq0.99Σi=1n​sii​Σi=1k​sii​​≥0.99

在压缩过数据后,可以采用如下方法来近似地获得原有的特征:xapprox(i)=Ureducez(i)x^{\left( i\right) }_{approx}=U_{reduce}z^{(i)}xapprox(i)​=Ureduce​z(i)

如果觉得《机器学习 - 主成分分析法 (PCA)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。