降维相关
来源:互联网 发布:java游戏开发视频 编辑:程序博客网 时间:2024/05/24 01:26
- 什么是降维
- PCA
- LDA
- LLE
- LE
- SNE
- T-SNE
什么是降维
一般来说,在ml里面,需要feature。而对于feature,我们又通常使用向量来表示。所以,简单地说,降维就是将一个高维的向量映射为一个低维的向量。形象地说,降维可以看作一个函数,输入是一个D为的向量,输出是一个M维的向量。
那怎么样才算是一个好的降维结果呢?直观地说,就是要既能降低维度,又能使得损失的信息尽量少。举个例子,如果现在有淘宝店铺的特征,有非常多维,我们想降维,那要怎么做呢?假设特征中有两维特征是“浏览量”和“访客数”,其实这两者之间应该是具有强相关性的,直觉上删除其中一个并不会造成多大的信息损失。以上就是一个朴素的降维思想。而按照机器学习的方法,我们需要定义一个目标函数,并进行最优化。而不同的优化目标也就导致了不同的降维算法。
首先,来看看最直接的损失函数,reconstuction error:
其中
另一种损失函数是variance:
这里variance的意思是“使得特征具有最好的区分能力”,在式子中的表现就是方差了。
好了,下面开始从一个个具体的降维算法入手,讲述其中的一些数学原理。
PCA
PCA作为学术界和工业界都最为常见的一个降维算法,肯定是排第一个啦。
在真正讲PCA之前,先明确一下协方差和协方差矩阵。协方差
是为了检测x和y两个变量之间的相关性,为正表明正相关,且越大说明越正相关;反之则是负相关。单单协方差只能衡量两个变量,也就是说只能处理特征只有二维的情况。如果特征有多维,那么就是协方差矩阵出场的时候了:
对角线上是方差,而其他位置是协方差。另外,我们有以下推导:
好了,协方差矩阵的基础讲完了,下面开始介绍PCA。
PCA的目的是将D维的向量降为M维(0< M< D)。有两个目标,一个是保留区分能力最强的M个特征,另一个是这M维特征之间相关性尽量小。前者体现在每一维特征自己的方差都较大,后者体现在不同维度特征的协方差较小。所以,从这两点出发,很自然地就想到了协方差矩阵。
设原始数据矩阵
那么,要怎么求P,才能使得这个D能满足我们的要求呢?我们来推导一下:
所以,我们要找的P能使得原始的协方差矩阵对角化。形式化描述就是:求矩阵
PCA的一张二维降一维的图,这里有PCA的例子
PCA也有一些限制,它可以解决特征之间存在线性相关的情况,但对于非线性相关的效果就不怎么样了。另外,下面是我从网站粘下来的优缺点:
优点:
1. 以方差衡量信息的无监督学习,不受样本标签限制。
2. 各主成分之间正交,可消除原始数据成分间的相互影响。
3. 可减少指标选择的工作量。
4. 用少数指标代替多数指标,利用PCA降维是最常用的算法。
5. 计算方法简单,易于在计算机上实现。
缺点:
1. 主成分解释其含义往往具有一定的模糊性,不如原始样本完整。
2. 贡献率小的主成分往往可能含有对样本差异的重要信息。
3. 特征值矩阵的正交向量空间是否唯一有待讨论。
4. 无监督学习。
LDA
下面讲LDA,毕竟LDA与PCA是我们最常听说的两个降维算法。
LDA首先是一个有监督的降维算法,会利用类别信息。所以其核心思想就是“将高维的向量投影到低维的空间,使得投影后同一类点之间的距离较小,不同类之间距离较大”,也就是“最大化类间距离,最小化类内距离”。具体的,这个距离是通过方差来衡量的。
循序渐进,我们首先来看一下二分类的LDA。
注:说到二类LDA,那就是投影到一条直线上,也就是说,降维成一维。可能有人会问,在二类的前提下,如果我们现在想将一个D维的向量x降维成M维的向量y,应该怎么办呢?这时候可以这么回答,LDA对于二类的情况能降成一维,明显一维的情况足以区分二类(另外,LDA降维后的维数不能大于类别数减一,二类的最大只能降成一维)。所以LDA也可以看成是一个分类算法。
二类LDA过程如下:
接下来我们要稍作推导了:
上面是二类的做法,那多类要怎么做呢(记住LDA降维后的维数不能大于类别数减一)?
好了,关于LDA就说这么多。另外,关于“LDA降维后的维数不能大于类别数减一”与矩阵的秩,特征向量有关。具体为什么建议去看LDA接下来的数学推导,可以看这里。关于PCA和LDA的对比,可以看这里
LLE
上面的两种算法都是线性的,那对于非线性的情况要怎么处理呢?这里介绍一下LLE算法。
LLE算法的介绍可见Arrow Luo的局部线性嵌入降维算法的pdf版,这里就不介绍详细的算法步骤了,只提几个关键点帮助理解。
- LLE应对的是非线性的情况(这里的非线性指的是无法线性映射到低维空间)。当然也不是所有的非线性情况都行,LLE有一个比较强的假设:原始数据满足流形,并且局部线性。
- LLE非线性,所以不能求一个矩阵来直接表示降维过程。LLE中是直接求高维向量在低维空间中的表示的。
- 在求局部线性重构矩阵W的时候,在pdf的公式(4)中,X-WZ可以转化为WX-WZ的原因是
∑W=1 。 - 局部线性重构矩阵W的具体样子应该是这样的:总的应该是n*n的,n表示总节点数。每一行
Wi 对应某一个节点i,然后这一行只有k个位置有非零值,表示节点i的k个近邻点。然后这一行其他位置都是0. - 在求解低维空间中的向量y的时候加入了两个约束条件,目的是使得解唯一并且易于求解。不然的话就一个那个求最小值的式子,只知道一个W,解肯定不唯一。
LLE的优缺点可以看这篇博客
LE
LE算法和LLE算法一样是基于流行假设的。
设
LE中文叫拉普拉斯特征映射,为什么要叫拉普拉斯呢?因为上面式子的求解需要运用到拉普拉斯矩阵,具体的推导过程如下:
说到这里,我想说一下为什么LE和LLE要基于流形假设(只是我个人理解)。首先,流形的定义就不多说了,在这里可以看作一个不闭合的曲面。然后对于PCA和LDA这种线性降维算法,他们认为高维的数据是低维数据的一个线性映射。所以降维也就是找高维到低维的一个线性映射。而对于LE和LLE这种非线性算法,认为高维的数据是低维数据在高维空间中被扭曲形成的,这是一种非线性的映射。因为是非线性的,所以找不到线性的映射矩阵。另外,流形在局部可以近似认为是线性的(LLE),或者说在局部可以建立边连接(意思是在高维空间局部建立边连接,实际上在低维空间中这条边也是存在的)(LE),这就是为什么LE和LLE要基于流形假设。
SNE
算法思想是:在高维空间相似的数据点,映射到低维空间也是相似的。
设
设
形成两个概率分布P和Q,目的是最小化:
那么概率具体应该怎么表示呢?正比于以x_i为中心的高斯分布的概率密度:
低维空间中,正比于以y_i为中心的高斯分布的概率密度:
为什么这么做可能是方便后面的计算,也有可能是因为后面迭代计算时加入了高斯噪声。
当然,考虑到对称性,最终定义:
T-SNE
相对SNE就是将高斯分布改成了t-分布。
从正态总体中抽取容量为
原因是高斯分布的尾部较低,对异常点比较敏感。相比之下,tt分布的尾部较高,对异常点不敏感,保证了其鲁棒性,因此其拟合结果更为合理,较好的捕获了数据的整体特征。
- 降维相关
- 运维相关知识
- Mysql 运维相关
- 运维相关
- 相关
- 相关
- 相关
- 相关
- 相关
- 相关
- 相关
- 运维相关技术博客
- 运维相关技术博客
- 【转】java运维相关
- OpenEdx运维命令相关
- 网络运维相关文章
- Redis之运维相关
- 系统运维相关索引
- 书单
- 线段树简单入门模板--单点更新
- EventBus3.0使用
- 蓝桥杯 基础练习 闰年判断
- PHP 配置smarty3
- 降维相关
- 自己动手编译NodeMCU固件
- mysql的架构、并发和事务简介
- 生物信息--连锁不平衡(Linkage Disequilibrium)
- javascript之DOM操作CSS
- ActionBar/Toolbar定制ui
- opencv 释放内存
- 【Java】类与对象总结
- (三十一)Struts2中的OGNL详解