机器学习算法 -- PCA 学习笔记

来源:互联网 发布:艾丁格啤酒价格知乎 编辑:程序博客网 时间:2024/05/22 10:37

PCA 学习笔记

简介

Principle Component, 有叫主成分分析法,一般是用于数据压缩,将高维的数据压缩成低维数据。在机器学习领域,它也是在执行某些机器学习算法前的预处理操作 —— 减少训练集的特征数量,简化或加快机器学习算法。

直观理解

其方法为,寻找一个较低维的超平面,这个超平面满足所有高维点到这个低维超平面的直角距离最小。这里的“最小”的概念我会在后面给出,可以用一个数字指标来衡量。

以二维数据为例子,假设 x^((i)) ∈ R2 ,那么如果我们能找到一个一维的“超平面”(也就是一条线),使得所有训练集的点到这条线的直角距离最小,那么我们就能将二维数据投影到这条线上,成为新的一维数据,完成了数据的压缩。如下图所示:
这里写图片描述

同理对于三维的数据集来说,我们可以找到一个二维的超平面,令处于三维空间的店投影到这个二维平面中,成为二维数据。当然,对于三维数据,如果可能,我们希望找到一个一维的超平面,将三维数据直接压缩成一维数据。但是理论上(和直觉上)来说,压缩跨越的维度越大,可能丢失的精度就越多。所以这类的压缩对原始数据的规律性的要求比较强。
这里写图片描述

算法过程

下面就是执行 PCA 的算法过程,里面设计到的较深的数学知识,如奇异值分解,所以这部分不要求完全理解,只要知道算法步骤即可。

我们首先要对所有的特征进行归一化处理(特征缩放),将它们缩放到相同的取值空间,这样这些 feature 才能够有可比性。 xij=xijμjsj, 其中 uj 为训练数据中每一类特征的平均值,sj 为这类特征的标准差。特征缩放完后,这些特征满足均值为 0,标准差为 1。
这里写图片描述

进行完缩放处理后,我们就可以正式地进行 PCA 。算法的流程如下图所示:
## 标题 ##

第一行的代码是计算协方差矩阵 Sigma
第二行对 Sigma 进行奇异值分解,得到三个不同的矩阵。其中,我们在压缩和解压时都用到了 U,S 可用于计算压缩误差。
第三步的 k 是要压缩成的维数。
最后一行得到的 Z 就是压缩的数据了。
由于对协方差矩阵和奇异值的分解都没有了解,所以以上算法的数学原理无法理解,但就使用来说是足够了。

数据恢复

另外,在需要的时候,我们能对 Z 矩阵进行解压,让其变回高维数据。这是通过 U 矩阵(奇异值分解的性质)实现的,但是要注意的是PCA 是有损压缩,所以在不可能将低维数据还原成原始的高维数据,只能还原到近似值

从低维数据中恢复为高维数据的公式为:X=ZUTreduce。 这是由于矩阵 U 是 Unitary Martrix,其有一个性质: U1=UT 。所以根据上图第四行代码反推可得到:
ZU1reduce=X
X=ZUTreduce

压缩误差

既然 PCA 是有损压缩,那么数据的损失率低于多少才代表这个压缩才可行?
这里就要一个指标,压缩误差率小于 1% 才代表这个压缩可行,能够保存数据中的 main feature。用公式表示就是:
这里写图片描述

其中,x(i) 是原始的特征数据, x(i)approx 是压缩后复原的数据。这个式子很好理解,就是真实的数据与压缩后复原的数据的误差(欧氏距离)占的比例,如果这个比例小于 0.01 那就说明压缩是可行的。这个方法也可以用来却定压缩后的维数 k,从一维开始到 N-1 维(N为原始特数量)迭代,第一个符合上述条件的 k 值就是最优的(误差不是最小的,但也相差不大,用较低的维数去 trade-off 是一个好的选择)

计算压缩误差还有另外一个方法:使用奇异值分解时的 S 矩阵,具体公式如下:
这里写图片描述

当奇异值分解满足上述的公式时,那么就代表了压缩误差小于 0.01。这里有个专有名词去表示这个条件:variance。当矩阵 S 满足上述公式时,就称之为 99% of varance is retained.

上面的两条公式可以互相转化,不过在 S 已知的情况下,用第二条公式的计算速度会快很多。
这里写图片描述

补充一点关于矩阵 S 的知识:根据 Andrew Ng 的视频,S 是一个对角矩阵,其结构为
这里写图片描述

PCA 的应用和注意事项

应用

  • 压缩
    • 减少数据占的存储空间 (维度变小了)
    • 加快算法
  • 可视化数据
    • 将数据压缩至 k=2 或 k=3,然后绘制出来

注意事项

注意一点,我们只用 training set 来喂养 PCA,训练出最优的超平面。然后在 CV 和 Test Set 中,我们直接将高维特征压缩为低维特征,然后再做交叉验证和模型评估。

一个坏的 PCA 使用案例是用 PCA 来防止 overfitting 。根据 Andrew Ng 的讲义,这是由于 PCA 不会考虑到 y 值,尽管有时候有效,但不推荐。最后的一点,不要在一开始的设计机器学习模型的时候考虑使用 PCA,PCA 应该是在你完成了整个的机器学习算法后再考虑的优化选项

0 0
原创粉丝点击