机器学习第八周(三)--PCA

来源:互联网 发布:剑灵免费捏脸数据图 编辑:程序博客网 时间:2024/06/08 08:14

  • PCA主成分分析
    • PCA介绍
      • PCA引入
      • PCA 与 linear regression
    • PCA Algorithm
      • 预处理
      • PCA 具体细节
    • 应用PCA
      • 重构reconstruction
      • 如何选择K
      • 应用PCA的建议
        • PCA应用场景
        • PCA的错用 overfitting
        • PCA的使用建议

PCA(主成分分析)

PCA介绍

PCA引入

我们仍然以俩个feature为例。
二维空间
对于黑色叉点,也就是拥有俩个feature的数据。我们希望找到一个理想的平面(在这个例子中就是找到一条直线),将数据投影到这条直线上。这样数据就降到一维。也就是说PCA是希望找到这样一个平面:每个数据投影到这个平面上距离是最小的。就图中而言,要保证蓝色距离线最短。这条蓝色线也叫投影误差。简而言之,PCA就是找到一个平面使投影误差最小。所以我们选择红色线而不是紫红色线作为投影平面。
注意:在使用PCA之前我们一般要均值归一化和特征缩放。
推广到一般:
PCA推广到一般
总的来说,将二维数据降至一维,就是想找到一个方向向量,计算所有数据投影到这个方向向量的距离。且希望这个距离最小。
当我们将数据降到K维时么就是希望找到K个方向向量,计算所有数据投影到这K个方向向量构成的平面上的投影距离。如三维降至二维,就是找俩个这样的方向向量。


PCA 与 linear regression

当数据由二维降至一维时,跟线性回归图确实有相像。
PCA regression
但是有俩个主要不同点:

1、线性回归因为是预测,所以求得是垂直距离。而PCA目的在于直线距离。
2、线性回归是预测,即是根据X预测Y,可以看做XY间有因果关系的。而PCA中所有数据都是平等的,仅代表不同的特征。

总结:PCA总是希望找到一个低维的平面,能够最小化投影误差的平方。也就是说能够最小化每个点到低维平面的距离。


PCA Algorithm

预处理

预处理
在进行PCA之前,我们要对数据进行预处理,也就是均值归一化和特征缩放,处理方式跟前面提到的一样的。

PCA 具体细节

这里写图片描述
正如上面提到的,当降至K维,PCA需要找到K个方向向量,如上图U,在新的降维平面内的数据的表示如Z。K和Z是找到PCA降维所得平面的关键。
假设降至K维,具体实现过程如下:
协方差
首先对降维后的数据求协方差。再对求的协方差使用SVD函数。我们需要的是经SVD结果后的参数U。SVD叫奇异值分解,还有一个eig(特征值分解),当这俩个函数用在协方差矩阵时,结果是一样的。

注意:
设X=n x 1; 则 E = n x n;—-U =n x n;
降至K维,取U前K列,Uk=n x k;

如何根据Uk得到Z呢???
Z
如上图,取Uk的转置与X相乘,得到Z。

Uk= n x k; X= n x 1; —-Z=k x 1;
X可以是训练集、验证集、测试集中的任何一个。


总结:
这里写图片描述
主要分四步:

1、数据预处理:均值归一化、特征缩放
2、求协方差矩阵Sigma
3、求Uk
4、根据Uk求Z
注意跟K-means一样,这里没有选择X0=1这一项。


应用PCA

重构(reconstruction)

我们前面说将PCA应用到降维上。如将1000维数据降到100维,将3维数据降到2维等。那么我们可不可以将降维后的数据重新恢复到原始数据呢???
重构
还是根据求得Z的式子做变化。

Uk=n x k; Z=k x 1;—-X=n x 1;
注意这样求得的X并不等同原来降维前的数据。从图上可以看出,这样处理后的数据都是处于直线上的。只能是近似等于原数据。利用PCA重构的这个特性可以用来消躁!!!


如何选择K?

选择主成分
这里我们要计算俩个俩个结果,第一个叫平均平方映射误差。第二个叫数据的总变差。
我们用一个等式来评判选择K值导致的降维结果。当平均平方误差 / 数据的总变差 <=0.01时,我们就说通过降至K维后仍然保持了数据间的99%的差异性。因为大部分现实中的数据,许多特征变量都是高度相关的。所以实际上大量压缩数据后,而且仍然会保留99%或95%的差异性。当然,这个比值也可以设为0.05、0.1等。

假如我们想保留数据99%的差异性。那么我们该如何选择K呢?
SVD选择K
一般先尝试K=1,然后计算Xapprox的值,再计算平均平方映射误差和数据总变差的比值,看看是否小于0.01,当不满足时,尝试K=2、K=3、、、可能K=17才是满足的。实际上这个过程非常繁琐。
但是我们运用SVD的话过程能简化许多。协方差矩阵经SVD分解后得到S举证。

S= n x n;是一个对角矩阵
对给定的K,取S的K列值,如图中,平均平方映射误差 / 数据总变差的比值可以通过S表示出来。
更一般的,对于给定一个K,比如说降到K维。我们只要计算S中K列和 / S的和 是否>=0.99;如不满足,继续增加K的维度。

这样,就把求比值转化为对S中K列的选取,这就非常简便了。

总结:对于K的选取我们从SVD中分离处理的S矩阵中计算。这会非常简便。
这里写图片描述


应用PCA的建议

PCA应用场景

PCA的建议
这里以监督学习为例,原来X=10000维的数据;经过PCA降维后得到Z=1000维。这样就得到一个新的数据集。以逻辑回归为例,将降维后的数据作为输入。预测输出。
注意:
这里PCA实际上是定义了从X到Z的映射关系,这种关系只可以通过在训练集上运行PCA定义出来。也就是说,我们在运行PCA时,是在训练集上进行的,而不是在交叉验证的数据集或者测试集上运行。在训练集上运行PCA后,得到了从X到Z的映射,然后你就可以将这个映射应用到交叉验证数据集,和测试数据集中。
总结一下,PCA的应用
PCA的应用

1、数据压缩:选择K来达到目的。
2、可视化数据,一般选择K=2或K=3。


PCA的错用 overfitting

PCA的错用
一些人会讲PCA用于避免过拟合,这是不可取的。PCA并不需要使用标签数据,只要一堆输入数据X,通过降维来找到这堆数据的近似。在这个过程中,实际上PCA已经把一些有用的信息舍弃掉了。
总之,PCA的目的在于提高学习算法的效率,不应该来用于过拟合。过拟合建议用正则化。


PCA的使用建议

通常人们在设计机器学习系统时,会写出这样的计划。
PCA建议
人们往往一开始就将PCA考虑进去,这是不可取的,我们在使用PCA之前,要想清楚你自己做的是什么,以及你想要做什么。这也是你首先需要在原始数据X上考虑的问题。并且根据具体情况来分析是否适合使用PCA,还是直接将原始数据带入到学习算法中。
总之就是不要一开始就使用PCA,可以先试试原始数据的效果,如果你的原始数据收敛的非常慢,占用内存非常多。这时候可以考虑使用PCA。但是如果你的原始数据的效果非常好的时候,这时候再使用PCA就没有必要了。这才是使用PCA的正确流程。

原创粉丝点击