降维汇总
先上一个各个算法信息表,X表示高维输入矩阵大小是高维数D乘以样本个数N,$C=XX^T$,Z表示降维输出矩阵大小低维数d乘以N,$E=ZZ^T$线性映射是$Z=W^TX$高维空间中两两之间的距离矩阵为A,$S_w,S_b$分别是LDA的类内散度矩阵和类间散度矩阵,k表示流形学习中一个点与k个点是邻近关系,F表示高维空间中一个点由周围几个点的线性组合矩阵,$M=(I-F)(I-F)^T$表示特征值对应的特征向量,P是高维空间中两点距离占所有距离比重的概率矩阵,Q低维空间中两点距离占所有距离比重的概率矩阵。l表示全连接神经网络的层数,$D_l$$表示每一层的节点个数.
这里只简单说MDS,PCA以及流行学习的Isomap和LLE.
多维缩放MDS:Multiple Dimensional Scaling
低维嵌入:在很多时候, 人们观测或收集到的数据样本虽是高维的,但与学习任务密切相关的也许仅是某个低维分布,即高维空间中的一个低维"嵌入" (embedding) . 图 10.2 给出 了 一个直观的例子. 原始高维空间中的样本点,在这个低维嵌入子空间中更容易进行学习。
MDS的目标是在降维的过程中将数据的dissimilarity(差异性)保持下来,也可以理解降维让高维空间中的距离关系与低维空间中距离关系保持不变。这里的距离用矩阵表示,N个样本的两两距离用矩阵D的每一项$dist_{ij}$ 表示,并且假设在低维空间中的距离是欧式距离。而降维后的数据表示为$Z_i$,那么就有
$$dist_{ij}^2 = \left | \mathbf{z_i-z_j} \right |^2 = \left | \mathbf{z_i} \right |^2 + \left | \mathbf{z_j} \right |^2 - 2\mathbf{z_i}\mathbf{z_j}^T$$
令$B=ZZ^T$ ,右边的三项统一用内积矩阵B来表示$b_{ij}=z_iz_j^T$ ,所以有
$$dist_{ij}^2=b_{ii}+b_{jj}-2b_{ij} \quad(1)$$
这时只要求出内积矩阵B即可求出降为后的矩阵Z(思路D-B-Z)。距离矩阵D去中心化之后(减去均值),內积矩阵B的每一行每一列之和都是0,可以推导得出
其中 tr(.) 表示矩阵的迹(trace),$tr(E)=\sum_{i=1}^m\Vert z_i \Vert^2=\sum_{i=1}^mb_{ii}$,令
联立上(1)-(7),消除$b_{ii},b_{jj}$后,可以得到
$$b_{ij} = -\frac{1}{2}(dist_{ij}^2-dist_{i\cdot} - dist_{\cdot j}-dist_{\cdot\cdot}^2)$$
i⋅与⋅j是指某列或者某列总和,从而建立了距离矩阵D与内积矩阵B之间的关系.由此即可通过降维前后保持不变的距离矩阵 D 求取内积矩阵 B。对矩阵 B 做特征值分解(eigenvalue decomposition),$B=VAV^T$,其中$A=diag(λ_1,λ_2,...λ_d)$为特征值构成的对角矩阵,$λ_1\geq λ_2\geq ...\geq λ_d$,V 为特征向量矩阵.假定其中有$d*$ 个非零特征值,它们构成对角矩阵$A*=diag(λ_1,λ_2,...λ_{d*})$,令 $V*$表示相应的特征向量矩阵,联立之前的$B=ZZ^T$,则最后Z可表达为
$$Z=A_*^{1/2}V_*^T$$在现实应用中为了有效降维,往往仅需降维后的距离与原始空间中的距离尽可能接近?而不必严格相等.此时可取 d'<< d 个最大特征值构成对角矩阵。
主成分分析PCA:Principal Component Analysis
向量內积:
由$A⋅B=|A||B|cos(a)$, A与B的内积等于A到B的投影长度乘以B的模。再进一步,如果我们假设B的模为1,则A与B的内积值等于A向B所在直线投影的矢量长度!
基:
向量(x,y)实际上表示线性组合,$x(1,0)^T+y(0,1)^T$,不难证明所有二维向量都可以表示为这样的线性组合。此处(1,0)和(0,1)叫做二维空间中的一组基。但实际上任何两个线性无关的二维向量都可以成为一组基,所谓线性无关在二维平面内可以直观认为是两个不在一条直线上的向量.例如,(1,1)和(−1,1)也可以成为一组基。一般来说,我们希望基的模是1,实际上,对应任何一个向量我们总可以找到其同方向上模为1的向量,只要让两个分量分别除以模就好了。例如,上面的基可以变为$(\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})$和$(-\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})$基变换的矩阵表示:
下面我们找一种简便的方式来表示基变换。还是拿上面的例子,想一下,将(3,2)变换为新基上的坐标,就是用(3,2)与第一个基做内积运算,作为第一个新的坐标分量,然后用(3,2)与第二个基做内积运算,作为第二个新坐标的分量。实际上,我们可以用矩阵相乘的形式简洁的表示这个变换,其中矩阵的两行分别为两个基,乘以原向量,其结果刚好为新基的坐标:
协方差矩阵及优化目标:
面我们讨论了选择不同的基可以对同样一组数据给出不同的表示,而且如果基的数量少于向量本身的维数,则可以达到降维的效果。但是我们还没有回答一个最最关键的问题:如何选择基才是最优的。或者说,如果我们有一组N维向量,现在要将其降到K维(K小于N),那么我们应该如何选择K个基才能最大程度保留原有的信息?
现在问题来了:如果我们必须使用一维来表示上面这些数据,又希望尽量保留原始的信息,你要如何选择?
通过上一节对基变换的讨论我们知道,这个问题实际上是要在二维平面中选择一个方向,将所有数据都投影到这个方向所在直线上,用投影值表示原始记录。这是一个实际的二维降到一维的问题。
那么如何选择这个方向(或者说基)才能尽量保留最多的原始信息呢?一种直观的看法是:希望投影后的投影值尽可能分散。
我们希望投影后投影值尽可能分散,而这种分散程度,可以用数学上的方差来表述。此处,一个字段的方差可以看做是每个元素与字段均值的差的平方和的均值,即:
$$Var(a)=\frac{1}{m}\sum^m_{i=1}(a_i-\mu)^2$$
通过去中心化(字段所有数值减去字段均值),将每个字段的均值都化为0了,因此方差可以直接用每个元素的平方和除以元素个数表示:
$$Var(a)=\frac{1}{m}\sum^m_{i=1}a_i^2$$
于是上面的问题被形式化表述为:寻找一个一维基,使得所有数据变换为这个基上的坐标表示后,方差值最大.
协方差:
对于上面二维降成一维的问题来说,找到那个使得方差最大的方向就可以了。不过对于更高维,还有一个问题需要解决。考虑三维降到二维问题。与之前相同,首先我们希望找到一个方向使得投影后方差最大,这样就完成了第一个方向的选择,继而我们选择第二个投影方向。如果我们还是单纯只选择方差最大的方向,很明显,这个方向与第一个方向应该是“几乎重合在一起”,显然这样的维度是没有用的,因此,应该有其他约束条件。从直观上说,让两个字段尽可能表示更多的原始信息,我们是不希望它们之间存在(线性)相关性的,因为相关性意味着两个字段不是完全独立,必然存在重复表示的信息。
数学上可以用两个字段的协方差表示其相关性,由于已经让每个字段均值为0,则:
$$Cov(a,b) = \frac{1}{m}\sum_{i=1}^ma_ib_i$$可以看到,在字段均值为0的情况下,两个字段的协方差简洁的表示为其内积除以元素数m。
当协方差为0时,表示两个字段完全独立。为了让协方差为0,我们选择第二个基时只能在与第一个基正交的方向上选择。因此最终选择的两个方向一定是正交的。
至此,我们得到了降维问题的优化目标:将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)。
协方差矩阵:
我们看到,最终要达到的目的与字段内方差及字段间协方差有密切关系。因此我们希望能将两者统一表示,仔细观察发现,两者均可以表示为内积的形式,而内积又与矩阵相乘密切相关。假设我们只有a和b两个字段,那么我们将它们按行组成矩阵X:
然后我们用X乘以X的转置,并乘上系数1/m:
奇迹出现了!这个对角线上的两个元素分别是两个字段的方差,而其它元素是a和b的协方差。两者被统一到了一个矩阵的。
根据矩阵相乘的运算法则,这个结论很容易被推广到一般情况:设我们有m个n维数据记录,将其按列排成n乘m的矩阵X,设$C=\frac{1}{m}XX^?$ ,则C是一个对称矩阵,其对角线分别个各个字段的方差,而第i行j列和j行i列元素相同,表示i和j两个字段的协方差。
协方差矩阵对角化:
根据上述推导,我们发现要达到优化条件,等价于将协方差对角化:即除对角线外的其它元素化为0,并且在对角线上将元素按大小从上到下排列,这样我们就达到了优化目的.于是,只需对协方差矩阵$XX^T$进行特征值分解,将求得的特征值排序:$λ_1\geq λ_2\geq ...\geq λ_d$,再再取前 d' 个特征值对应的特征向量构成 $W=(w_1,w_2,..,w_d')$.这就是主成分分析的解.要注意降维后低维空间的维数 d' 通常是由用户事先指定.
PCA 仅需保留 W 与 样本 的均值向 量即可通过简单的向量减法和矩阵"向量乘法将新样本投影至低维空间中 . 显然,低维空间与原始高维空间必有不同,因为对应于最小的d-d'个特征值的特征 向量被舍弃了,这是降维导致的结果.但舍弃这部分信息往往是必要的- 一方面舍弃这部分信息之后能使样本的采样密度增大,这正是降维 的重要动机; 另一方面,当数据受到 噪声影响时, 最小的特征值所对应的特征 向量往往与噪声有关?将它们舍弃能在一定程度上起到去噪的效果.
流行学习方法——Isomap:
等度量映射(Isometric Mapping,简称 Isomap) 的基本 出发点,是认为低维流Î~嵌入到 高维空 间之后,直接在高维空间 中计算直线距离具有误导性?因为高维空间中的直线距离在低维嵌入流形上是不可达的.如图 所示,低维嵌入流形上两点间的距离是"测地线" (geodesic)距离。
那么,如何计算测地线距离呢?这时我们可利用流形在局部上与 欧氏空间同胚这个性质,对每个点基于欧 氏距离找出其近邻点,然后就能建立一个近邻连接图,图中近邻点之间存在连接,而非近邻点之间不存在连接, 于是,计算两点之间测地线距离的问题就转变为计算近邻连接图上两点之间的最短路径问题.
在近邻连接图上计算两点间的最短路径?可采用著名的Dijkstra算法或Floyd算法,在得到任意两点的距离之后,就可通过MDS 方法来获得样本点在低维空间中的坐标。
流行学习算法——LLE:
LLE首先假设数据在较小的局部是线性的,也就是说,某一个数据可以由它邻域中的几个样本来线性表示。比如我们有一个样本x1,我们在它的原始高维邻域里用K-近邻思想找到和它最近的三个样本x2,x3,x4. 然后我们假设x1可以由x2,x3,x4线性表示,即
$$x_1 = w_{12}x_2 + w_{13}x_3 +w_{14}x_4$$其中,w12,w13,w14为权重系数。在我们通过LLE降维后,我们希望x1在低维空间对应的投影x′1和x2,x3,x4对应的投影x′2,x′3,x′4也尽量保持同样的线性关系,即
$$x_1' \approx w_{12}x_2' + w_{13}x_3' +w_{14}x_4'$$也就是说,投影前后线性关系的权重系数w12,w13,w14是尽量不变或者最小改变的。
从上面可以看出,线性关系只在样本的附近起作用,离样本远的样本对局部的线性关系没有影响,因此降维的复杂度降低了很多。
对于LLE算法,我们首先要确定邻域大小的选择,即我们需要多少个邻域样本来线性表示某个样本。假设这个值为k。我们可以通过和KNN一样的思想通过距离度量比如欧式距离来选择某样本的k个最近邻。
在寻找到某个样本的xi的k个最近邻之后我们就需要找到找到xi和这k个最近邻之间的线性关系,也就是要找到线性关系的权重系数。找线性关系,这显然是一个回归问题。假设我们有m个n维样本{x1,x2,...,xm},我们可以用均方差作为回归问题的损失函数:即:
$$J(w) = \sum\limits_{i=1}^{m}||x_i-\sum\limits_{j=1}^{k}w_{ij}x_j||_2^2$$一般我们也会对权重系数$w_{ij}$做归一化的限制,即权重系数需要满足
$$\sum\limits_{j=1}^{k}w_{ij} = 1$$对于不在样本$x_i$邻域内的样本$x_j$,我们令对应的$w_{ij}=0$.也就是我们需要通过上面两个式子求出我们的权重系数。一般我们可以通过矩阵和拉格朗日子乘法来求解这个最优化问题。(这个推导就不写了)
最后得到
$$W_i = \frac{Z_i^{-1}1_k}{1_k^TZ_i^{-1}1_k}$$其中$W_i=(w_{i1},w_{i2},...w_{ik})^T$ ,矩阵$Z_i=(x_i−x_j)^T(x_i−x_j)$,其中$1_k$ 为k维全1向量。
在我们得到了高维的权重系数,那么我们希望这些权重系数对应的线性关系在降维后的低维一样得到保持。假设我们的n维样本集{x1,x2,...,xm}在低维的d维度对应投影为{y1,y2,...,ym}, 则我们希望保持线性关系,也就是希望对应的均方差损失函数最小,即最小化损失函数J(Y)如下:
$$J(y) = \sum\limits_{i=1}^{m}||y_i-\sum\limits_{j=1}^{k}w_{ij}y_j||_2^2$$这个优化目标与之前的同形,唯一的区别是之前需要确定权重系数$w_i$,而现在是知道权重系数,需要确定的是$x_i$对应的低维空间坐标$y_i$
令$M=(I-W)^T(I-W)$ ,则优化函数转变为最小化下式:$J(Y) = tr(Y^TMY)$,tr为迹函数。约束函数矩阵化为:$Y^TY=mI$
上式可通过特征值分解求解:M 最小的 d' 个特征值对应的特征向量组成的矩阵即为 $Z^T$.
算法流程:
从图中可以看出,LLE算法主要分为三步,第一步是求K近邻的过程,这个过程使用了和KNN算法一样的求最近邻的方法。第二步,就是对每个样本求它在邻域里的K个近邻的线性关系,得到线性关系权重系数W,第三步就是利用权重系数来在低维里重构样本数据。
参考资料:
【1】《机器学习》-周志华【2】《Sklearn与TensorFlow机器学习实用指南》【3】【4】【5】【6】