Machine Learning(Andrew)Week8(下)

来源:互联网 发布:avxcl新域名 编辑:程序博客网 时间:2024/06/05 18:08

Dimensionality Reduction

数据降维

这讲主要说数据降维。

数据降维就是减少特征个数,可以分为特征选择和特征提取两个步骤。原始数据采集的时候,数据的维度可能比较高,出现一些不重要特征,一些冗余且不能提供帮助的特征,如采集房屋信息的时候,可能的特征有长、宽、面积。面积=长*宽,所以就冗余了。所以选择只留面积,当然也可以选择留长和宽作为特征。再用特征转换把三维的特征转换为一维或者二维特征,就达到了数据降维的目的。

为什么要做数据降维呢?除了上面说的特征冗余,Hsuan-Tien Lin的课的一个重点VC维度告诉我们,如果特征太多,模型就会很复杂,这样就会有很高的deterministic noise,就造成了过拟合。

上讲说到,我们用k-means算法求欧式距离的方式对点进行聚类,主要思想是离得越近的点越类似。如下图,如果是一维平面,求距离的时候,只要算横坐标的平方差。如果是二维平面,就要算横纵坐标。维数越高,求距离用的特征越多,有可能就无法处理了。

(可以看我在《《A Few useful things to Know About machine Learning》的读后感》中说到的Intuition Fails in high Dimensions直觉不适用于高维空间)

再者,我们有时希望数据能够可视化,如果特征太多,比如50维,可视化就不能实现,但是我们将特征降到二维或者三维,可视化就能实现。

所以,数据降维也是machine learning的一个重要topic。

主成分分析

(Principal Component Analysis,简称PCA)

如前面说的,特征之间可能存在一定线性关系(上面说到的面积=长*宽),如下图二维特征,很明显x2和x1是线性关系,这就造成了第二维的特征冗余。

然而有些特征的相关性不是完全线性相关。如下图(图片来自降维(一)----说说主成分分析(PCA)的源头

这个图和前面一个图相比,x1和x2的特征就不是线性相关,有可能会都留下,这时需要PCA。如降维(一)----说说主成分分析(PCA)的源头文中所说,把x1-x2坐标分解成u1-u2,会发现在u1上反应特征主要变化,而u2方向上特征变化不大。所以特征可以选择不要u2方向的分量。

主成分分析就是要找出这种线性关系,选择保留哪些和删除哪些特征分量,从而把n维特征映射成k维(k<n),使剩下的k维特征之间彼此线性无关。这里需要注意,不是简单的减掉n-k维特征,k维特征是重新构造的,彼此线性无关且最大限度保留原始特征的信息。

PCA是怎么工作的呢?

如上图所示,我们把二维特征降到一维。PCA算法关键思想就是找到一条过原点的直线(紫色线),把红色点投影到紫色线上(绿色点),使得正交距离(垂直紫色线的蓝色线)和最小。图中的u1是紫色线的方向向量,也就是上面说的原始特征在u1方向上变化明显,在u2方向上变化不大。所以把每个点分解成u1和u2分量,选择不要u2分量。这个过程就像把x1-x2空间的特征映射到u1-u2空间且u2=0。这样就把二维的(红色点)降到了一维(绿色点)。而|u2|长度就是蓝色的线,u2是原始特征的一个分量,当我们选择不要这个方向上的分量时,要确定它对特征的影响最小。如果u2比较大,那么新构成的特征和原始特征相比就会丢失很多信息。所以,PCA关键在于找到主方向u1,控制u2分量的值不大。

PCA和线性回归有点相似,不过它们是两个完全不同的概念。

(1)PCA的目的是降维,线性回归的目的是拟合出一条线做预测。

(2)PCA希望上图中蓝色线的长度和最小,蓝色线是u2分量长度;线性回归是希望下图中绿色线的长度和最小,绿色线是拟合到线上的点和实际点的误差。

 

(3)PCA不要求数据线性可分,线性回归要求数据线性可分。

PCA算法

Data preprocessing数据预处理

(1)训练数据

 

(2)Feature scaling(在Week2中说到的特征归一化)

 

(3)Mean normalization(在Week2中说到的均值归一化)

 

这个过程,是把数据以平均值为中心移到原点。这样u方向的直线一定过原点。

如下图,把x点投影到u方向上得到x’(关于投影在Week7中有推导)。它到原点的距离,因为x’是x在u方向上的分量。

 

我们的目标是求所有距离的平方和加起来最大的u。

 

看左边的就是每个点的投影到原点的距离d,而左边的公式其实就是统计中的方差。之所以要求使方差最大的u方向,就是希望投影到u方向的点尽可能分散开。没有投影到u方向之前的点,因为特征多,它们在空间分布就比较分散,区分度比较高,投影到u方向之后,也希望尽可能保留这种区分度,所以要找方差最大的u方向。

上式右边括号括起来的部分,称为协方差矩阵Σ。

 

因为u是方向向量,所以是个单位向量,有

因此,最优化模型就是:


在Hsuan-Tien Lin的十四讲,我们有一个求h的最优化模型,这里的最优化模型是用来做数据降维的。但是,都揭露了一个事实,最优化方法对于machine learning灰常重要。 

解上述最优化模型:

将模型变为:


(用的是拉格朗日乘数法,可以去看看我整理的Hsuan-Tien Lin十四讲求有约束非线性优化的推导过程。)

求上述的极值问题,就是求导数为0的点。


降维后方差所对应的是协方差矩阵的特征值。方差最大,就是选择最大的特征值。最大特征值所对应的特征向量是最好的投影方向u。所以关键就是求出Σ的特征值,再选择最大特征值所对应的特征向量。

在Octave中,用[U,S,V]=svd(Sigma),即得到。S是Σ的特征值构成的矩阵。U是特征向量构成的矩阵。如果要把n维的数据压缩到k维,就根据特征值由大到小在S中,选前k大特征值,再在U中找到所对应的特征向量Ureduce=U(:,1:k)。(关于奇异值分解,是线性代数部分,这里不做详细介绍。)

U矩阵:

压缩后的数据还可以恢复:

但是,不可能得到原来一模一样的数据,只能得到近似值。

维数选择

PCA需要选择k的数目,即数据压缩到几维。如k=n,就是没有压缩数据;如果k很小,那么就会丢失很多信息,此时把数据还原得到近似数据,就会得到很大的误差。数据压缩后,肯定有信息丢失。我们需要在数据压缩和少丢失信息上进行权衡。

 

用这个来计算误差率,设置一个阈值,比如设置<0.01,那么就是保留了0.99的方差。

因为

所以,这个求误差率的式子也等价于:

Sii是特征值矩阵对角线上的值,且由大到小排列。

根据这个式子,就可以求出k的值了。

PCA应用建议

(1)我们要把数据集分为训练数据,验证数据和测试数据。PCA只能在训练数据上阶段进行,验证和测试的时候可以用训练阶段得到的Ureduce进行特征转换。

(2)PCA在合适的时候用

1)压缩:需要减少存储空间时;需要加快算法速度时

2)可视化

(3)不要用PCA防止过拟合

开始提到数据降维的一个原因是因为过拟合,但是想要解决过拟合问题却不能用PCA的方式,我们之前说过防止过拟合有专门的方法regulation。

(4)不要随便就用PCA,要在原始数据上求过模型后进行预测,发现效果不好,才考虑用PCA降维。

0 0