首页 > 代码库 > 斯坦福NG机器学习课程:Dimensionality_reduction笔记
斯坦福NG机器学习课程:Dimensionality_reduction笔记
Dimensionality_reduction
首先通过图形化描述引出为什么需要进行数据降维?以及数据降维的motivation。
Data compression
Data compression 降低维度:好处减少计算机内存、磁盘等硬件使用,更重要的是加速学习算法执行速度。例子
上面是很简单直观的降维的图形描述,分别有2维降维1维,三维降维2维。
习题:
Visualization
降低维度另一个目的:进行Visualization,维度太高我们无法用图形直观来进行可视化处理,所以降低维度到2维3维最大好处就有方便可视化。下面举例一个国家经济构成因素表
假设有50个特征,则特征向量为50维,这样表达一个data的特征很复杂。假设我们能把50维降到2维,则变为下面另外一张表格所示。
可视化的结果类似下图:
用二维数据尽可能表示出50维特征所携带的信息!下面习题中简单看到,我们需要降低维数,而且最希望降低到2维或者3维,这样我们可以很好很简单进行可视化。
习题: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最小。看图更好明白。
左边图示线性回归的cost function 它求得是真实值与预测值的差异,表现在图形上是垂直x轴上方向真实值与预测值差值,而右边是PCA算法,求得是真实值到直线的垂直距离,很明了两者所求的东西都是完全不一样的!
习题:
看上面这个简单例题,我们想利用PCA,最小projection error 直观上看到斜率为-1直线能满足,所以选择D
在PCA之前需要进行 数据预处理(data preprocessing),进行数据预处理类似监督学习中处理,只是这里是无监督学习,我们没有类标签。前面提到feature scaling 和mean normalization 下面描述具体怎么做这两个过程。
前面都在对PCA算法进行描述,接下来说PCA具体该怎么计算,看下图
上图所示:我们需要计算黑色圈内标记向量,以及投影到新的维度下的坐标值。课程中不会讲到这个计算问题证明,那些内容超出了课程要求(PS:在旧版本的视频中NG有详细对这部分内容进行推导,可能是数学推导过程比较复杂,讲解耗时大家听了也比较吃力,新的课程中NG删掉了数学推理过程,因为工具包实现PCA只需要很少代码,现在只是让大家了解其中原理,弱化里面具体数学推导过程),只讲到怎么操作能做到。
PCA算法流程:
计算分为两步:1. 计算协方差矩阵 2. 计算协方差矩阵特征向量 图片中eig函数与svd函数能实现相同功能。但是NG倾向于使用svd,这里说的是在octave实现层面东西啦。svd产生计算返回三个矩阵,我们只需要用到U矩阵。svd函数中文叫奇异值分解(详细内容可以参考:点击打开链接 )
下面图片显示如何由n维降维到k维的一个具体过程,其实就是矩阵计算过程。
选择U矩阵k列,其实中间就是矩阵运算,可以看到最终z为k维,这里只是描述操作流程,忽略了其中所有的数学证明!
PCA的summary上图是PCA算法总的执行流程,没有证明这个流程得到是满足projection error最小化。因为数学证明比较复杂,但是在octave或者matlab中用比较少的代码就能实现。
习题:
Choosing thenumber of principal components
Choosing thenumber of principal components(通俗说就是确定上面说到的k,即最终降到多少维,我们肯定需要选择k的标准,我们想尽量降维,并且还能尽可能多的保留原来数据的信息)
选择k的标准见下图:
图片中显示了不同阈值下选择。
选择k的两种算法:
先看左边算法流程很简单就是多次尝试,先设定k=1计算不等式是否成立,成立就找到了最小的k,不成立增加k继续尝试,我们发现这个算法简单但是比较低效,需要多次尝试。
右边方法:得到S矩阵,利用数学证明得到结论,不需要像左边多次计算Ureduce 所以我们选择k的方法如下:
通过99% variance retained我们可以直观上对PCA效果有了解。
习题:最小化projection error的数学形式描述。
Reconstruction(重构)
前面提到了数据压缩,肯定就有数据重构(reconstruction from compressedrepresentation)
如上图,我们反向计算可以近似重构得到x的。
习题:PCA相关性质考察
Advice forApplying PCA (总结PCA):
首先讲的是在监督学习中加速,首先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问题肯定选择加入正则化项来解决。
PCA在机器学习系统中使用情形。首先不使用PCA,当内存无法进行、算法速度慢到无法得到结果尝试使用PCA。
习题:PCA使用的一些指导性建议!
这堂课NG有意弱化了其中关键步骤SVD的数学推导证明,如果感兴趣大家可以看SVD_tutorial,欢迎大家批评指正!
斯坦福NG机器学习课程:Dimensionality_reduction笔记