斯坦福NG机器学习课程:Dimensionality_reduction笔记

Dimensionality_reduction

首先通过图形化描述引出为什么需要进行数据降维?以及数据降维的motivation。

Data compression

Data compression 降低维度:好处减少计算机内存、磁盘等硬件使用,更重要的是加速学习算法执行速度。例子

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第1张图片

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第2张图片

上面是很简单直观的降维的图形描述,分别有2维降维1维,三维降维2维。

习题:

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第3张图片

Visualization

降低维度另一个目的:进行Visualization,维度太高我们无法用图形直观来进行可视化处理,所以降低维度到2维3维最大好处就有方便可视化。下面举例一个国家经济构成因素表

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第4张图片

假设有50个特征,则特征向量为50维,这样表达一个data的特征很复杂。假设我们能把50维降到2维,则变为下面另外一张表格所示。

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第5张图片

可视化的结果类似下图:



用二维数据尽可能表示出50维特征所携带的信息!下面习题中简单看到,我们需要降低维数,而且最希望降低到2维或者3维,这样我们可以很好很简单进行可视化。

习题:

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第6张图片

PCA算法

前面这么多都是在描述降维,以及降维后带给我们的好处,但是没有提到如何进行降维的算法,现在引出PCA(principle component analysis)算法。

通常情况下 PCA之前先进行feature scaling 和mean normalization, PCA算法描述如下:



进行project 来降低n维到k维,最小化projection error(数学上可以证明其实就是最大化数据方差,后面进行比较详细描述)。直观上理解为什么可以降维?因为我们在高维时可能很多维数据相互关联,所以我们没必要用那么多维去表达数据特征。降维我们可能在允许的一定范围内损失了一些信息,但是维度降低,避免维灾难,大大加速学习算法速度,这样是值得去做的。

特别注意区分两个不同问题:PCA与线性回归的关系?

PCA不是线性回归!首先需要区别就是两者优化目标函数都是不一致的。此外线性回顾是用来预测y变量的值,而PCA中没有涉及y值问题,只是进行降维,project到line或者surface上使得projection error最小。看图更好明白。

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第7张图片

左边图示线性回归的cost function 它求得是真实值与预测值的差异,表现在图形上是垂直x轴上方向真实值与预测值差值,而右边是PCA算法,求得是真实值到直线的垂直距离,很明了两者所求的东西都是完全不一样的!

习题:


看上面这个简单例题,我们想利用PCA,最小projection error 直观上看到斜率为-1直线能满足,所以选择D 

在PCA之前需要进行 数据预处理(data preprocessing),进行数据预处理类似监督学习中处理,只是这里是无监督学习,我们没有类标签。前面提到feature scaling 和mean normalization 下面描述具体怎么做这两个过程。

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第8张图片

前面都在对PCA算法进行描述,接下来说PCA具体该怎么计算,看下图

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第9张图片

上图所示:我们需要计算黑色圈内标记向量,以及投影到新的维度下的坐标值。课程中不会讲到这个计算问题证明,那些内容超出了课程要求(PS:在旧版本的视频中NG有详细对这部分内容进行推导,可能是数学推导过程比较复杂,讲解耗时大家听了也比较吃力,新的课程中NG删掉了数学推理过程,因为工具包实现PCA只需要很少代码,现在只是让大家了解其中原理,弱化里面具体数学推导过程),只讲到怎么操作能做到。

PCA算法流程:

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第10张图片

计算分为两步:1. 计算协方差矩阵 2. 计算协方差矩阵特征向量 图片中eig函数与svd函数能实现相同功能。但是NG倾向于使用svd,这里说的是在octave实现层面东西啦。svd产生计算返回三个矩阵,我们只需要用到U矩阵。svd函数中文叫奇异值分解(详细内容可以参考:点击打开链接 )

下面图片显示如何由n维降维到k维的一个具体过程,其实就是矩阵计算过程。

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第11张图片

选择U矩阵k列,其实中间就是矩阵运算,可以看到最终z为k维,这里只是描述操作流程,忽略了其中所有的数学证明!

PCA的summary 

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第12张图片

上图是PCA算法总的执行流程,没有证明这个流程得到是满足projection error最小化。因为数学证明比较复杂,但是在octave或者matlab中用比较少的代码就能实现。

习题:

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第13张图片

Choosing thenumber of principal components

Choosing thenumber of principal components(通俗说就是确定上面说到的k,即最终降到多少维,我们肯定需要选择k的标准,我们想尽量降维,并且还能尽可能多的保留原来数据的信息)

选择k的标准见下图:


图片中显示了不同阈值下选择。

选择k的两种算法:


先看左边算法流程很简单就是多次尝试,先设定k=1计算不等式是否成立,成立就找到了最小的k,不成立增加k继续尝试,我们发现这个算法简单但是比较低效,需要多次尝试。

右边方法:得到S矩阵,利用数学证明得到结论,不需要像左边多次计算Ureduce 所以我们选择k的方法如下:

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第14张图片

通过99% variance retained我们可以直观上对PCA效果有了解。

这里需要先暂停一下为什么需要保留99%variance 

PCA 的问题其实是一个基的变换,使得变换后的数据有着最大的方差。方差的大小描述的是一个变量的信息量,我们在讲一个东西的稳定性的时候,往往说要减小方差,如果一个模型的方差很大,那就说明模型不稳定了。但是对于我们用于机器学习的数据(主要是训练数据),方差大才有意义,不然输入的数据都是同一个点,那方差就为0了,这样输入的多个数据就等同于一个数据了。以下面这张图为例子:

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第15张图片

这个假设是一个摄像机采集一个物体运动得到的图片,上面的点表示物体运动的位置,假如我们想要用一条直线去拟合这些点,那我们会选择什么方向的线呢?当然是图上标有signal的那条线。如果我们把这些点单纯的投影到x轴或者y轴上,最后在x轴与y轴上得到的方差是相似的(因为这些点的趋势是在45度左右的方向,所以投影到x轴或者y轴上都是类似的),如果我们使用原来的xy坐标系去看这些点,容易看不出来这些点真正的方向是什么。但是如果我们进行坐标系的变化,横轴变成了signal的方向,纵轴变成了noise的方向,则就很容易发现什么方向的方差大,什么方向的方差小了。

一般来说,方差大的方向是信号的方向,方差小的方向是噪声的方向,我们在数据挖掘中或者数字信号处理中,往往要提高信号与噪声的比例,也就是信噪比。对上图来说,如果我们只保留signal方向的数据,也可以对原数据进行不错的近似了。

PCA的全部工作简单点说,就是对原始的空间中顺序地找一组相互正交的坐标轴,第一个轴是使得方差最大的,第二个轴是在与第一个轴正交的平面中使得方差最大的,第三个轴是在与第1、2个轴正交的平面中方差最大的,这样假设在N维空间中,我们可以找到N个这样的坐标轴,我们取前r个去近似这个空间,这样就从一个N维的空间压缩到r维的空间了,但是我们选择的r个坐标轴能够使得空间的压缩使得数据的损失最小。

习题:最小化projection error的数学形式描述。



Reconstruction(重构)

前面提到了数据压缩,肯定就有数据重构(reconstruction from compressedrepresentation)

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第16张图片

如上图,我们反向计算可以近似重构得到x的。

习题:PCA相关性质考察


Advice forApplying PCA (总结PCA):

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第17张图片

首先讲的是在监督学习中加速,首先extract X ,PCA得到map后Z 新的训练数据,用新的训练数据进行学习算法,map同样可以应用到交叉验证集和测试集中去。说到是图像的例子,长宽都为100像素,总的为10000,应用PCA降维能大大加快学习算法速度。

PCA算法应用:


我们需要应用PCA往往是加速学习算法,因为现在硬件已经不是太大问题,主要是考虑速度。

Bad use of PCA 



PCA用来prevent overfitting 是bad!!使用。它不是一个好的解决overfitting的方法。为了解决overfitting更好的肯定是利用正则化项来解决。PCA没有用到类标签,PCA就是找一个lower 维来近似高维数据,这样肯定丢失了信息!

如果你的主要目的是加速学习算法,那么PCA很可能是一个好的选择。如果为了解决overfitting问题肯定选择加入正则化项来解决。

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第18张图片

PCA在机器学习系统中使用情形。首先不使用PCA,当内存无法进行、算法速度慢到无法得到结果尝试使用PCA。

习题:PCA使用的一些指导性建议!

斯坦福NG机器学习课程:Dimensionality_reduction笔记_第19张图片


这堂课NG有意弱化了其中关键步骤SVD的数学推导证明,如果感兴趣大家可以看SVD_tutorial,欢迎大家批评指正!微笑



好的博客参考资料: leftnoteasy博客   点击打开链接










你可能感兴趣的:(机器学习,pca)