机器学习笔记(参考吴恩达机器学习视频笔记)13_降维

版权声明:博客内容都是对一些知识的整理,可能有些部分存在借鉴,如果存在侵权,请联系我删掉。 https://blog.csdn.net/cunxinlitian/article/details/82857497

13 降维

13.1 动机一:数据压缩

假设两个未知的特征:是用厘米表示长度;是用英寸表示同一物体的长度。这是一种高度冗余的表示。希望将这个二维的数据降至一维,即数据压缩。

13.2 动机二:数据可视化化

降维可以使数据可视化。关于许多不同国家的数据,每一个特征向量都有50个特征(如 GDP,人均 GDP,平均寿命等)。如果要将这个50维的数据可视化是不可能的。使用降维的方法将其降至2维,便可以将其可视化了。

这样做的问题在于,降维的算法只负责减少维数,新产生的特征的意义就必须由自己去发现了。

13.3 主成分分析问题

主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一。在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用。它是一个线性变换。这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。

PCA 技术的一个很大的优点是,它是完全无参数限制的。在 PCA 的计算过程中完全不需要人为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关,与用户是独立的。

但是,这一点同时也可以看作是缺点。如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。

13.4 PCA的数学原理

1)内积与投影

如图,A与B的内积等于A到B的投影长度乘以B的模:A⋅B=|A||B|cos(a)。如果我们假设B的模为1,即让|B|=1,那么就变成了:A⋅B=|A|cos(a)。则可得到结论:设向量B的模为1,则A与B的内积值等于A向B所在直线投影的矢量长度。

2)基与基变换

如图,向量可以表示为(3,2)。要准确描述向量,首先要确定一组基,然后给出在基所在的各个直线上的投影值。只不过我们经常省略第一步,而默认以(1,0)和(0,1)为基。

实际上,对应任何一个向量我们总可以找到其同方向上模为1的向量,只要让两个分量分别除以模就好了。例如,上面的基可以变为:(1/ ,1/ )和(-1/ ,1/ ),不难得到新的坐标为:(5/ ,-1/ )。

将(3,2)变换为新基上的坐标,就是用(3,2)与第一个基做内积运算,作为第一个新的坐标分量,然后用(3,2)与第二个基做内积运算,作为第二个新坐标的分量。即:

稍微推广一下,如果我们有m个二维向量,只要将二维向量按列排成一个两行m列矩阵,然后用“基矩阵”乘以这个矩阵,就得到了所有这些向量在新基下的值。例如(1,1),(2,2),(3,3),想变换到刚才那组基上,即

一般的,如果我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果。如下图,pi是一个行向量,表示第i个基,aj是一个列向量,表示第j个原始数据记录。

所以,二维降为一维时:寻找一个一维基,使得所有数据变换为这个基上的坐标表示后,方差值最大。三维降为二维时:到一个方向使得投影后方差最大,这样就完成了第一个方向的选择,继而我们选择第二个投影方向。若还是单纯只选择方差最大的方向,很明显,这个方向与第一个方向应该是“几乎重合在一起”,显然这样的维度是没有用的。让两个字段尽可能表示更多的原始信息,我们是不希望它们之间存在(线性)相关性的。可以用两个字段的协方差表示其相关性。协方差为0,它们之间不存在相关性。

3)协方差矩阵及优化目标

协方差为0时,表示两个字段完全独立。优化目标为:将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)。

假设只有a和b两个字段,那么我们将它们按行组成矩阵X,即:

用X乘以X的转置,并乘上系数1/m,即:

设我们有m个n维数据记录,将其按列排成n乘m的矩阵X,设

则C是一个对称矩阵,其对角线分别个各个字段的方差,而第i行j列和j行i列元素相同,表示i和j两个字段的协方差。

4)协方差矩阵对角化

要达到优化目标,等价于将协方差矩阵对角化:即除对角线外的其它元素化为0,并且在对角线上将元素按大小从上到下排列,这样我们就达到了优化目的。

设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵,设Y=PX,则Y为X对P做基变换后的数据。设Y的协方差矩阵为D,推导一下D与C的关系:

优化目标变成了寻找一个矩阵P,满足PCPT是一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述优化条件。

一个n行n列的实对称矩阵一定可以找到n个单位正交特征向量,设这n个特征向量为,我们将其按列组成矩阵:E=()。参考线性代数书籍关于“实对称矩阵对角化”的内容对协方差矩阵C有如下结论:

即P=ET,P是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是C的一个特征向量。如果设P按照Λ中特征值的从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Y。

13.5 PCA算法步骤

由PCA的数学原理可以将PCA的算法步骤归纳如下:

    1)将原始数据按列组成n行m列矩阵X。

2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值。

3)求出协方差矩阵

4)求出协方差矩阵的特征值及对应的特征向量。

  1. 将特征向量对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P。

  2. Y=PX即为降维到k维后的数据。

13.6 选择主成分的数量

通常主成分的数量k的选取有两种方法:

  1. 通过交叉验证法选取较好的k。

  2. 从算法原理的角度设置一个阀值,比如t=99%,然后选取使得下式成立的最小k的值:

       其中从大到小排列。

13.7 错误使用PCA的情况

错误的主要成分分析情况:一个常见错误使用主要成分分析的情况是,将其用于减少过拟合(减少了特征的数量)。这样做非常不好,不如尝试正则化处理。原因在于主要成分分析只是近似地丢弃掉一些特征,它并不考虑任何与结果变量有关的信息,因此可能会丢失非常重要的特征。然而当我们进行正则化处理时,会考虑到结果变量,不会丢掉重要的数据。

另一个常见的错误是,默认地将主要成分分析作为学习过程中的一部分,这虽然很多时候有效果,最好还是从所有原始特征开始,只在有必要的时候(算法运行太慢或者占用太多内存)才考虑采用主要成分分析。

猜你喜欢

转载自blog.csdn.net/cunxinlitian/article/details/82857497