降维相关

来源:互联网 发布:java游戏开发视频 编辑:程序博客网 时间:2024/05/24 01:26

    • 什么是降维
    • PCA
    • LDA
    • LLE
    • LE
    • SNE
    • T-SNE


什么是降维

一般来说,在ml里面,需要feature。而对于feature,我们又通常使用向量来表示。所以,简单地说,降维就是将一个高维的向量映射为一个低维的向量。形象地说,降维可以看作一个函数,输入是一个D为的向量,输出是一个M维的向量。

那怎么样才算是一个好的降维结果呢?直观地说,就是要既能降低维度,又能使得损失的信息尽量少。举个例子,如果现在有淘宝店铺的特征,有非常多维,我们想降维,那要怎么做呢?假设特征中有两维特征是“浏览量”和“访客数”,其实这两者之间应该是具有强相关性的,直觉上删除其中一个并不会造成多大的信息损失。以上就是一个朴素的降维思想。而按照机器学习的方法,我们需要定义一个目标函数,并进行最优化。而不同的优化目标也就导致了不同的降维算法。

首先,来看看最直接的损失函数,reconstuction error:

1Ni=1N||xixi~||2

其中xi~xi降维后得到的低维向量再次“升维”而还原出来的高维向量。上面的式子无脑符合“既能降低维度,又能使得损失的信息尽量少”这句话。虽然这种损失函数很直接,但缺点是不仅要想出降维的方法还要有还原的方法。

另一种损失函数是variance:

argmaxf1Ni=1N(f(xi)f(xi)¯)2线f(xi)

这里variance的意思是“使得特征具有最好的区分能力”,在式子中的表现就是方差了。

好了,下面开始从一个个具体的降维算法入手,讲述其中的一些数学原理。


PCA

PCA作为学术界和工业界都最为常见的一个降维算法,肯定是排第一个啦。

在真正讲PCA之前,先明确一下协方差和协方差矩阵。协方差

cov(x,y)=1n1i=1nxiyi

是为了检测x和y两个变量之间的相关性,为正表明正相关,且越大说明越正相关;反之则是负相关。单单协方差只能衡量两个变量,也就是说只能处理特征只有二维的情况。如果特征有多维,那么就是协方差矩阵出场的时候了:

C=cov(x,x)cov(y,x)cov(z,x)cov(x,y)cov(y,y)cov(z,y)cov(x,z)cov(y,z)cov(z,z)XMNCMM=1N1XXT

对角线上是方差,而其他位置是协方差。另外,我们有以下推导:

cov(x,y)=cov(y,x)U使UTΣU=ΛΛ线ΣUΣXTMX0XCholeskyΣ=UTΛUUΛ线Σ=UTΛU=[UTΛ1/2][Λ1/2U]=[Λ1/2U]T[Λ1/2U]Σ=CTCC=Λ1/2

好了,协方差矩阵的基础讲完了,下面开始介绍PCA。

PCA的目的是将D维的向量降为M维(0< M< D)。有两个目标,一个是保留区分能力最强的M个特征,另一个是这M维特征之间相关性尽量小。前者体现在每一维特征自己的方差都较大,后者体现在不同维度特征的协方差较小。所以,从这两点出发,很自然地就想到了协方差矩阵。

设原始数据矩阵XMN(M表示特征维数,N表示数据量)的协方差矩阵为CMM,而我们想将X降维成YKN,也就是寻找一种线性变换,或者说一个矩阵P,使得Y=PX。我们设Y的协方差矩阵为DKK。根据上一段,我们希望这个矩阵D是一个对角矩阵,且对角线上的值越大越好。

那么,要怎么求P,才能使得这个D能满足我们的要求呢?我们来推导一下:

D=1N1YYT=1N1(PX)(PX)T=1N1PXXTPT=P(1N1XXT)PT=PCPT

所以,我们要找的P能使得原始的协方差矩阵对角化。形式化描述就是:求矩阵S,使得SCST是一个对角矩阵,并且对角元素从大到小排列。然后我们只需要取矩阵S的前K行组成的矩阵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过程如下:

xy=wTxy1μ1=1N1xD1x2μ2=1N2xD2x1μ¯1=1N1xD1wTx=wTμ12μ¯2=1N2xD2wTx=wTμ2使max||μ¯1μ¯2||21s¯21=yD1||yμ¯1||22s¯22=yD2||yμ¯2||2min(s¯21+s¯22):J(w)=max||μ¯1μ¯2||2s¯21+s¯22

接下来我们要稍作推导了:

||μ¯1μ¯2||2=wT(μ1μ2)(μ1μ2)Tw=wTSBws¯21=yD1||yμ¯1||2=xD1||wTxwTμ1||2=xD1wT(xμ1)(xμ1)Tw=wTS1ws¯21+s¯22=wTS1w+wTS2w=wTSWwJ(w)=wTSBwwTSWwSBSWSB=(μ1μ2)(μ1μ2)TSW=(x1μ1)(x1μ1)T+(x2μ2)(x2μ2)T

上面是二类的做法,那多类要怎么做呢(记住LDA降维后的维数不能大于类别数减一)?

y=wTxywSB=i=1NNi(μiμ)(μiμ)TSW=i=1NxDi(xμi)(xμi)T

好了,关于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算法一样是基于流行假设的。

YiXi降维后的样本点,令矩阵W表示节点之间的连接关系。则LE的思想就是最小化:

i=1,j=1NWij||yiyj||2

LE中文叫拉普拉斯特征映射,为什么要叫拉普拉斯呢?因为上面式子的求解需要运用到拉普拉斯矩阵,具体的推导过程如下:

DDii=j=1NWijL=DWLLL00mini=1,j=1NWij||yiyj||2=mintr(YTLY)s.t.YTDY=I

说到这里,我想说一下为什么LE和LLE要基于流形假设(只是我个人理解)。首先,流形的定义就不多说了,在这里可以看作一个不闭合的曲面。然后对于PCA和LDA这种线性降维算法,他们认为高维的数据是低维数据的一个线性映射。所以降维也就是找高维到低维的一个线性映射。而对于LE和LLE这种非线性算法,认为高维的数据是低维数据在高维空间中被扭曲形成的,这是一种非线性的映射。因为是非线性的,所以找不到线性的映射矩阵。另外,流形在局部可以近似认为是线性的(LLE),或者说在局部可以建立边连接(意思是在高维空间局部建立边连接,实际上在低维空间中这条边也是存在的)(LE),这就是为什么LE和LLE要基于流形假设。


SNE

算法思想是:在高维空间相似的数据点,映射到低维空间也是相似的。

XiXj为高维空间中的两个样本点,使用概率pi|j来衡量两者的相似度。
YiYj为高维空间中的两个样本点,使用概率qi|j来衡量两者的相似度。

形成两个概率分布P和Q,目的是最小化:

C=iKL(Pi||Qi)=ijpj|ilogpj|iqj|i

那么概率具体应该怎么表示呢?正比于以x_i为中心的高斯分布的概率密度:

pj|i=exp(xixj2/2σ2i)kiexp(xixk2/2σ2i)xipj|ixj

低维空间中,正比于以y_i为中心的高斯分布的概率密度:

qj|i=exp(yiyj2)kiexp(yiyk2)

为什么这么做可能是方便后面的计算,也有可能是因为后面迭代计算时加入了高斯噪声。

当然,考虑到对称性,最终定义:

pij=pji=pj|i+pi|j2


T-SNE

相对SNE就是将高斯分布改成了t-分布。

从正态总体中抽取容量为N的随机样本,若该正态总体的均值为μ,方差为σ2。随机样本均值为x¯,方差为s2=1N1Ni=1(xix¯)2,随机变量t可表示为:

t=x¯μs/N

原因是高斯分布的尾部较低,对异常点比较敏感。相比之下,tt分布的尾部较高,对异常点不敏感,保证了其鲁棒性,因此其拟合结果更为合理,较好的捕获了数据的整体特征。

原创粉丝点击