机器学习笔记-12(降维)

上部分讲到了非监督学习算法一种类型”聚类”,并了解到了K平均算法。

这一部分,咱开始讨论非监督学习中的另一类型问题:降维

为什么要对数据进行降维?论动机的话,主要有两个:1、压缩数据 2、利于视觉化数据分析 而且通常情况,对数据进行降维后,还有利于大幅度提升机器学习算法的运行速度。下面,咱来具体讨论。

扯些可能”题外话”。数据降维的处理其实有点类似咱人类的做法,因为人天生就有提取重要特征的能力。其实在课程里Andrew Ng教授给出国家GDP等数据的例子里,便可以看出(从N多的特征中,抽象出几个重要的新特征)。降维其实是一种提取重要特征的方法。

在很多情况下,机器学习算法中使用的特征,数量通常都不会很小。大量的特征配合大数量样本数就产生数量巨大的数据,数据越多,算法运行起来也有可能更慢。此时,咱首先想到的方法是对数据进行压缩。但是具体该使用何种方法呢?这里,咱使用的就是对数据进行降维。

之前,咱使用x(i)向量来代表一个带n个特征的数据,实际上就是一个处于n维上的元素。降维,顾名思义就是在将处于n维上的数据,通过变换降到低维度的情况。高维数据,缺点主要有两个:1、数据量有可能巨大 2、不利于视觉化数据 降维也就是刚好可以在一定程度上解决这个问题,对应着上面的两大动机。

这里讲的降维使用的是PCA算法。

Principal component analysis problem formulation

PCA算法的实质

首先是从二维变换到一维的情况,想法是找到一条可以代表二维数据的直线,这样可以只用一个数据量代表二维上的数据了,but how? 找到一条对于所有二维上的点垂直距离最短的直线,而那个垂直点就是二维元素在这条直线上的投影点,这个点代表的就是变换到一维后的数据。

Data Compression

数据从二维降到一维

下图则是三维转换到二维的情况,这时候咱在三维空间里找到一个二维的平面,这个面同样是所有三维数据垂直距离最短的平面。平面上各垂直点代表原数据变换到二维空间后的新表示。

Data Compression

数据从三维降到二维

根据上面图像来看,很多人可能会认为PCA算法和线性回归算法本质是差不多的,其实这是完完全全不同的两个算法,从下面的图,你会发现线性回归和PCA算法是不一样,PCA中没有x->y的对应关系。

PCA is not linear regression

PCA算法和线性回归的图像对比

PCA is not linear regression

PCA算法没有x->y这种映射关系

说明完这些,咱就可以进入正题了。Principal component analysis(PCA,a.k.a 主成分分析)就是用来寻找让原数据从n维降到k维表示的算法。具体实现过程如下:

  1. 数据预处理(对数据进行比例缩放/平均归一化)
  2. 开始PCA处理,将所有原数据样本所代表的矩阵变换成n阶方阵(x0=1这个项不要)
  3. 进行特征值分解,使用svd函数或eig函数,上面变换出来的方阵Sigma作为函数输入(这里svd/eig函数的运作过程超出范围,所以这里不讲,在接触这里的时候,提前做了些相关的功课,不过自己水平也半吊子,说不清。课程貌似使用的是特征值分解,而并不是奇异值分解,奇异值分解不要求矩阵一定为方阵的)
  4. 上述函数会返回三个矩阵U、S、V。俺猜这里的三个矩阵应该都是n阶方阵
  5. 在PCA算法中,咱最主要用到的是U方阵,这个方阵是对原数据进行了特征值分解后,降序排列出来的结果,越靠前的u(i)向量越重要。
  6. 在U中取出前k列作为一个新矩阵并转置(k*n),然后乘以原数据x(n*1),然后会得到一个k阶的向量z,这就是经过降维后的新数据(忽略掉svd/eig的具体处理细节,这个算法也就几行代码就能搞定,真是好神奇滴说)

Data preprocessing

数据预处理(特征归一化)

Principal component Analysis algorithm

使用svd或eig函数

Principal component analysis algorithm

通过svd或eig函数得到特征值矩阵u

Principal component analysis algorithm summary

由矩阵u,得到z向量

既然PCA算法可以压缩数据,那自然也可以解压数据。这里的说法是:压缩表征重建,这里的重建不能达到100%还原数据的地步,但是可以逼近原数据。主要原因是上面咱取k列特征值的时候,得到了一系列最重要的信息,但也抛弃了一些信息。具体实现过程也很简单,就是对上面过程最后一步的逆操作。用已经降维了的U矩阵(n*k)乘以向量z,就能大致得到原数据(n*1)的信息。注意看下面左右两图,咱可以很大的程度上认为原数据得到了一定的还原,虽然丢失了一些细节。

Reconstruction from compressed representation

压缩表征重建

下面来说下如何选择K值的问题,大体的思想是通过计算原数据投影的均方差和原数据的均方差的比值来判断。这个比值代表的其实就是新数据与原数据的误差率,很大程度上来说代表了PCA的数据压缩性能。这个比值自然是越小越好,小就代表丢失的信息很少,另一方面来说,也表示原数据的重要信息得到了最大程度的保留。这里的Threshold一般会取0.01(99%的信息保留),0.05(95%)和0.1(90%)。具体的公式如下,迭代不停地更换k值,然后运算分析此比值。

Choosing K(

选择K值的方法-1

如果每次都要动用此公式进行运算的话,运算量有时候是很大的。这时候上面svd函数输出的三个矩阵中的S矩阵就发挥其作用了,这是一个n阶的对角方阵,对角线上的数据为降序排列的特征值S(ii),咱要做的就变得简单好多了,计算其中的前k个S的均方差和全部S的均方差的比值即可,运算量会小很多。

Choosing K

选择K值的方法-2

最后是关于应用PCA的问题,在前面讲到的所有机器学习算法都可以使用PCA,无论监管学习还是非监管学习,都是OK的。不过需要注意的是x(i)->z(i)的映射关系应该在训练集上定义,而不能在交叉验证和测试集上进行定义,只有在训练集上定义之后,才能将之用在交叉验证和测试集上。

Supervised learning speedup

关于PCA的应用

这里再提一次PCA的应用目标:1、压缩(降低内存和磁盘存储需求、为学习算法提速)2、视觉化数据

Application of PCA

PCA的应用目标

根据PCA的性质(更少的特征,看上去可能可以避开过拟),很多人想当然的认为可以利用其避免overfitting。但Andrew Ng教授认为,这并不是一个好的方法来避免过拟,虽然说有时候可以达到这种效果,但有时候可能不行,所以建议还是使用正则化来避免过拟。

Bad use of PCA

不要用PCA来避免过拟合

在机器学习算法中,即使有了降维这个重型武器,但是课程给出的建议还是应该合理地使用它。一开始设计一个机器学习算法的时候,应该先考虑不使用PCA算法,首先使用原始数据,直到你确信它没法解决问题(内存/磁盘需求巨大或速度慢)的时候,这时候才应该考虑使用PCA。

PCA is sometime used where it shouldn't be

对于机器学习算法的设计 一开始尽量不考虑使用PCA

。。。。随随便便写了一天,无语

One thought on “机器学习笔记-12(降维)

发表评论

电子邮件地址不会被公开。 必填项已用*标注