机器学习笔记4——降维与度量学习

147 阅读5分钟

k-NN

KNN(k近邻学习)的工作机制很简单:对于给定测试样本,基于某种距离度量找出训练集中与其最靠近的kk个训练样本,然后基于这kk个邻居的信息来预测。

通常:

  • 分类任务用投票法:选择kk个样本中出现最多的类别标记
  • 回归任务用平均法:选择kk个样本的实值输出标记的平均值

KNN为懒惰学习(lazy learning)方法:即训练时间开销为0,在收到测试样本后才会处理训练样本。与之相对的是急切学习(eager learning):在训练阶段就会对样本进行学习处理。

KNN中kk值的设置是一个重要参数,会验证影响分类结果,如下图所示: image.png

低维嵌入 low-dimensionality embedding

KNN的方法要求训练样本的采样密度足够大,称为密采样(dense sample),这样才能令测试样本附近任意小的某距离范围内总能找到一个训练样本。然而现实中很难存在这种情况,尤其是特征维数较高的情况下。

在高维情况下出现的数据样本稀疏、距离计算困难等问题是所有机器学习方法共同面临的障碍,称为维数灾难(curse of dimensionality)。

缓解维数灾难的一个重要方法是降维(dimension reduction),通过某种数学变换将原始高维特征空间转变为一个低维子空间。降维的理论基础在于:日常观测到的样本是高维的,但是与学习任务相关的可能仅是某个低维分布,即高维空间中的一个低维嵌入(embedding)。

image.png

Multiple Dimensional Scali 多维缩放 MDS

MDS是一种降维方法,将原始空间中的样本距离特征保留到低维空间中。

假定mm个样本在原始空间的距离矩阵为DRm×m\pmb{D} \in \mathbb{R}^{m\times m},第iijj列的元素distijdist_{ij}表示样本xi\pmb{x}_ixj\pmb{x}_j的距离。

MDS的目标是获得样本点在dd'维空间的表示ZRd×m,dd\pmb{Z}\in \mathbb{R}^{d'\times m},d' \leq d,且两个样本在dd'维空间中的欧式距离等于其在原始空间中的距离,即zizj=distij||\pmb{z}_i-\pmb{z}_j||=dist_{ij}

distij2=zi2+zj22ziTzjdist^2_{ij}=||z_i||^2+||z_j||^2-2z_i^Tz_j

B=ZTZRm×m\pmb{B}=\pmb{Z}^T\pmb{Z}\in \mathbb{R}^{m\times m}bij=2ziTzjb_{ij}=2z_i^Tz_j,则:distij2=bii+bjj2bijdist^2_{ij}=b_{ii}+b_{jj}-2b_{ij}

MDS的思路在于:给定距离矩阵D\pmb{D},能否通过distij2dist_{ij}^2得到矩阵BB

不加限制条件的情况下,通过整体平移和旋转是不会影响样本间的距离,也就是说可以得到无数个B\pmb{B}这显然不是正确的解法,因此在二维空间中需要为B\pmb{B}的求解增加限制条件——数据中心化

i=1mzik=0,k=0,1,...,d\sum^m_{i=1}z_{ik}=0,k=0,1,...,d
i=1mbij=i=1mzizjT=i=1mk=1dzikzjk=k=1d(i=1mzik)zjk=0\sum^m_{i=1}b_{ij}=\sum^m_{i=1}z_iz_j^T=\sum^m_{i=1}\sum^d_{k=1}z_{ik}z_{jk}=\sum^d_{k=1}(\sum^m_{i=1}z_{ik})z_{jk}=0

于是有:i=1mbij=j=1mbij=0\sum^m_{i=1}b_{ij}=\sum^m_{j=1}b_{ij}=0

tr()tr(\cdot)表示矩阵的(trace),tr(B)=i=1mzi2tr(\pmb{B})=\sum^m_{i=1}||z_i||^2

综上可得:

i=1mdistij2=i=1m(bii+bjj2bij)=i=1m(zi2+bjj0)=tr(B)+mbjj\sum^m_{i=1}dist^2_{ij}=\sum^m_{i=1}(b_{ii}+b_{jj}-2b_{ij})=\sum^m_{i=1}(||z_i||^2+b_{jj}-0)=tr(\pmb{B})+mb_{jj}

同理可得:

j=1mdistij2=tr(B)+mbii i=1mj=1mdistij2=i=1mj=1m(bii+bjj2bij)=i=1m(tr(B)+mbii)=2m tr(B)\sum^m_{j=1}dist^2_{ij}=tr(\pmb{B})+mb_{ii} \\ \ \\ \sum^m_{i=1}\sum^m_{j=1}dist^2_{ij}=\sum^m_{i=1}\sum^m_{j=1}(b_{ii}+b_{jj}-2b_{ij})=\sum^m_{i=1}(tr(\pmb{B})+mb_{ii})=2m\ tr(\pmb{B})

定义几个新的符号,令:

disti.2=1mi=1mj=1mdistij2dist.j2=1mi=1mdistij2dist..2=1m2i=1mj=1mdistij2dist^2_{i.}=\frac{1}{m}\sum^m_{i=1}\sum^m_{j=1}dist^2_{ij} \\ dist^2_{.j}=\frac{1}{m}\sum^m_{i=1}dist^2_{ij} \\ dist^2_{..}=\frac{1}{m^2}\sum^m_{i=1}\sum^m_{j=1}dist^2_{ij}

这一步的目标是用distdist来表示bii,bjj,bijb_{ii},b_{jj},b_{ij},从而可以求解出B\pmb{B},综合上述内容可得:

tr(B)=i=1mj=1mdistij22m=m2dist..22m=m2dist..2tr(\pmb{B})=\frac{\sum^m_{i=1}\sum^m_{j=1}dist^2_{ij}}{2m}=\frac{m^2dist^2_{..}}{2m}=\frac{m}{2}dist^2_{..}

同理可推得:

bii=1m(mdisti2m2dist..2) bjj=1m(mdistj2m2dist..2)b_{ii}=\frac{1}{m}(mdist^2_i-\frac{m}{2}dist^2_{..}) \\ \ \\ b_{jj}=\frac{1}{m}(mdist^2_j-\frac{m}{2}dist^2_{..})

综上可得:

bij=12(distij2disti.2dist2.j+dist..2)b_{ij}=\frac{1}{2}(dist^2_{ij}-dist^2_{i.}-dist^2{.j}+dist^2_{..})

由此可以推出矩阵D\pmb{D}降维后保持不变的矩阵Z\pmb{Z}的内积矩阵B\pmb{B}

最后一步就是:通过B\pmb{B}求解Z\pmb{Z}(使用特征值分解):

B=VΛVT\pmb{B}=\pmb{V}\pmb{\Lambda}\pmb{V}^T

其中V\pmb{V}为特征向量矩阵,Λ=diag(λ1,...,λd)\pmb{\Lambda}=diag(\lambda_1,...,\lambda_{d'}),为特征值构成的对角矩阵,可知Λ=ΛT\pmb{\Lambda}=\pmb{\Lambda}^T

B=ZZT=VΛVT=VΛΛTVT\pmb{B}=\pmb{Z}\pmb{Z}^T=\pmb{V}\pmb{\Lambda}\pmb{V}^T=\pmb{V}\sqrt{\pmb{\Lambda}}\sqrt{\pmb{\Lambda}^T}\pmb{V}^T

可知:Z=ΛVT\pmb{Z}=\sqrt{\pmb{\Lambda}}\pmb{V}^T。在实际应用中通常只报了前dd'个特征及其相应的特征矩阵Λ~\tilde{\Lambda}(影响最大),因此可得:

Z=Λ~V~T Rd×m\pmb{Z}=\sqrt{\tilde{\Lambda}}\tilde{\pmb{V}}^T \ \in \mathbb{R}^{d'\times m}

image.png

主成因分析 PCA

见之前写过的文章

kernelized 核化线性降维

线性降维方法假设从高维到低维的空间函数映射是线性的,然而现实任务中很多需要非线性映射,如下图所示。

image.png

因此需要非线性降维方法,有代表性的一种就是基于核方法对传统线性降维方法进行“核化”,例如核主成因分析((Kernelized PCA, KPCA)。

manifold learning 流形学习

流形学习的主要启发点在于流形数据集局部存在欧式空间的性质可以用欧式距离度量,因此可以通过在局部建立降维映射关系,再设法将局部映射关系推广到全局中。

Isometric Mapping 等度量映射

如下图所示,流形空间中若直接计算两个点在低维嵌入的欧式距离(黑线)是不可取的,因为不能脱离曲面来行走,(如(a)所示),正确的行走路径为红线。

image.png

如何计算这个距离呢?此时可以考虑在流形的局部使用欧式空间的性质,即对于每个点基于欧式距离找到临近的点,建立近邻连接图,非近邻的点间不存在连接,然后根据图来计算两个点之间的最短路径问题。

image.png

局部线性嵌入 LLE

见之前写过的文章

image.png

metric learning 度量学习

降维的目的是在合适的低维空间中寻找一个合适的度量,度量学习的目的在于:研究能否直接找到一个合适的距离度量。

之前介绍了很多距离度量方法,但是都是静态的,没有可调节的参数,想要学习一个好的度量必然涉及到参数调节问题,因此可以先对之前提出过的距离做一个改进:

对于两个特征维度dd的样本xi,xj\pmb{x}_i,\pmb{x}_j,他们之间欧式距离的平方可以写为:

disted2(xi,xj)=xixj22=distij,12+...+distij,d2dist^2_{ed}(\pmb{x}_i,\pmb{x}_j)=||\pmb{x}_i-\pmb{x}_j||_2^2=dist^2_{ij,1}+...+dist^2_{ij,d}

其中distij,kdist_{ij,k}表示xi,xj\pmb{x}_i,\pmb{x}_j在第kk维上的距离,根据不同特征的重要程度可以引入特征权重w\pmb{w}

distwed2(xi,xj)=w1distij,12+...+wddistij,d2=(xixj)TW(xixj)dist^2_{wed}(\pmb{x}_i,\pmb{x}_j)=w_1dist^2_{ij,1}+...+w_ddist^2_{ij,d}=(\pmb{x}_i-\pmb{x}_j)^T\pmb{W}(\pmb{x}_i-\pmb{x}_j)

其中W=diag(w)\pmb{W}=diag(\pmb{w})

更进一步,W\pmb{W}限制为对角矩阵,即其认为不同特征间无关,但是现实中特征是可能相关的(如一个人的身高和体重),因此将对角矩阵替换成一个普通的半正定矩阵M\pmb{M}即可得到马氏距离的公式:

distmah2(xi,xj)=(xixj)TM(xixj)=xixjM2dist^2_{mah}(\pmb{x}_i,\pmb{x}_j)=(\pmb{x}_i-\pmb{x}_j)^T\pmb{M}(\pmb{x}_i-\pmb{x}_j)=||\pmb{x}_i-\pmb{x}_j||_M^2

M\pmb{M}亦可称为度量矩阵,度量学习的目的就是学习出M\pmb{M},在现实任务中通常还需要根据任务需求,增加一些限制条件来求解最优的M\pmb{M}