k近邻学习(knn)是一种监督学习算法,它直接使用测试样本和训练样本,没有显示的训练过程,工作机制如下:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个邻居的信息来进行预测。通常,对于不同类型的任务,使用的预测方法不同:
此外,还可以基于距离远近进行加权平衡或加权投票,距离越近的样本权重越大。
knn为懒惰学习的著名代表,此类学习在训练阶段仅仅是把训练样本保存起来,训练时间开销为0,待收到测试样本之后再进行处理。
急切学习:在训练阶段就对训练样本进行学习处理的学习方法。
knn算法的核心在于k值的选取和距离的度量
knn虽然简单,但是它的泛化错误率不超过贝叶斯最优分类器的错误率的两倍。
上一小节的讨论是基于一个重要假设:任意测试样本 x x x附近任意小的 θ \theta θ距离范围内总能找到一个训练样本,即训练样本的采样密度足够大。但是,这种假设在现实任务中常常很难满足,若属性维数较多时,要保证每个测试样本都有对应的训练样本,对样本数量的要求非常大。
这种在高维情形下出现的样本稀疏、距离计算困难等问题,是所有机器学习方法共同面临的严重阻碍,被称为维数灾难。缓解维数灾难的一个重要途径是降维,即通过某种数学变换将原始高维属性空间转变为一个低维子空间,这个子空间中样本密度大幅度提高,距离计算也更为容易。
高维数据样本中,与学习任务密切相关的某个低维分布即为高维空间的一个低维嵌入(embedding)。
上图中,原始高维空间中的样本点在降维后的低维嵌入子空间中更容易进行学习。
不管是使用核函数升维还是对数据降维,我们都希望原始空间样本点之间的距离在新空间中基本保持不变,这样才不会使得原始空间样本之间的关系及总体分布发生较大的改变。“多维缩放”(MDS)正是基于这样的思想,MDS要求原始空间样本之间的距离在降维后的低维空间中得以保持。
注:
令降维后的样本坐标矩阵Z被中心化,中心化是指将每个样本向量减去整个样本集的均值向量,故所有样本向量求和得到一个零向量。这样易知:矩阵B的每一列以及每一列求和均为0,因为提取公因子后都有一项为所有样本向量的和向量。
图片来源文章链接
由B的特性以及式(10.3),可推得:
由(10.3)到(10.9)可得 b i j b_{ij} bij的表达式:
推导过程:
由式(10.10)可知,我们可以通过降维前后保持不变的距离矩阵D计算出每一个 b i j b_{ij} bij,从而求解内积矩阵B( B = Z T Z B=Z^TZ B=ZTZ),只需对B进行特征值分解便可得到Z。
MDS算法的流程如下:
基于线性变换来进行降维的方法都称为线性降维方法,它们都符合式(10.13)的基本形式。不同之处是对低维子空间的性质有不同的要求,相当于对 W W W施加了不同的约束(如主成分分析就可由要求低维子空间对样本具有最大可分性推导得到)
主成分分析(PCA)是一种最常用的降维方法。不同于MDS采用距离保持的方法,主成分分析直接通过一个线性变换,将原始空间中的样本投影到新的低维空间中。简单来理解这一过程便是:PCA采用一组新的基来表示样本点,其中每一个基向量都是原来基向量的线性组合,通过使用尽可能少的新基向量来表出样本,从而达到降维的目的。
假设使用d’个新基向量来表示原来样本,实质上是将样本投影到一个由d’个基向量确定的一个超平面上(即舍弃了一些维度)。
要用一个超平面对空间中所有高维样本进行恰当的表达,最理想的情形是:若这些样本点都能在超平面上表出且这些表出在超平面上都能够很好地分散开来。但是一般使用较原空间低一些维度的超平面来做到这两点十分不容易,因此我们退一步海阔天空,要求这个超平面应具有如下两个性质:
有趣的是:最近重构性与最大可分性虽然从不同的出发点来定义优化问题中的目标函数,但最终这两种特性得到了完全相同的优化问题:
最近重构性:
最大可分性:
接着使用拉格朗日乘子法求解以上优化问题,得到:
因此,只需对协方差矩阵进行特征值分解即可求解出W,PCA的整个算法流程如下:
之前在支持向量机那一章中,SVM在处理非线性可分的样本时,使用核函数将样本投影到高维特征空间,再对样本在高维特征空间中使用超平面划分。这里也是同样的问题:若我们的样本数据点本身就不是线性分布,那还如何用一个超平面去近似表出呢?因此也就引入核函数,即先将样本映射到高维空间,再在高维空间寻找线性降维的方法。
若核函数已知,即知道如何将低维的坐标变换为高维坐标,这时我们只需先将数据映射到高维特征空间,再在高维空间中运用PCA即可。
一般情况下,我们并不知道核函数的具体的映射规则,例如Sigmoid、高斯核等,我们只知道如何计算高维空间中的样本内积,这就引出了KPCA的一个重要创新之处:空间中的任一向量,都可以由该空间的所有样本表示。证明过程如下:
注:式(10.19)来源于式(10.17)
这样我们便可以将高维特征空间中的投影向量 w i w_i wi使用所有高维样本点线性表出,接着代入PCA的求解问题,得到:
其中:
只需对核矩阵K进行特征分解,便可以得出投影向量 w i wi wi对应的系数向量α,因此选取特征值前d’大对应的特征向量便是d’个系数向量。
这时对于需要降维的样本点,只需按照以下步骤便可以求出其降维后的坐标。可以看出:KPCA在计算降维后的坐标表示时,需要与所有样本点计算核函数值并求和,因此该算法的计算开销十分大。
流形学习是一类借鉴了拓扑流形概念的降维方法,流形是指在局部与欧氏空间同胚的空间,即它在局部具有欧氏空间的性质,能用欧氏距离进行距离计算。这样即使高维空间的分布十分复杂,但是在局部上依然满足欧式空间的性质,基于流形学习的降维正是这种邻域保持 的思想。其中等度量映射(Isomap)试图在降维前后保持邻域内样本之间的距离,而局部线性嵌入(LLE)则是保持邻域内样本之间的线性关系,下面将分别对这两种著名的流行学习方法进行介绍。
等度量的基本出发点是:认为低维流形嵌入到高维空间之后,直接在高维空间中计算直线距离具有误导性,因为高维空间中的直线距离在低维嵌入流形上是不可达的。
因此利用流形在局部上与欧式空间同胚的性质,可以使用近邻距离来逼近测地线距离,即对于一个样本点,它与近邻内的样本点之间是可达的,且距离使用欧式距离计算,这样整个样本空间就形成了一张近邻图,高维空间中两个样本之间的距离就转为计算近邻连接图上两点间的最短路径问题。可采用著名的Dijkstra算法或Floyd算法计算最短距离,得到高维空间中任意两点之间的距离后便可以使用MDS算法来其计算低维空间中的坐标。
注:测地线距离为两点之间的本真距离。由上图可明显看出,a图高维空间直线距离与测地线距离(弯曲的红线)差别较大,而b图中的近邻距离则与测地线距离较近,故可用来近似测地线距离。
若邻域范围指定过大,则会造成“短路问题”,即本身距离很远却成了近邻,将距离近的那些样本扼杀在摇篮。
若邻域范围指定过小,则会造成“断路问题”,即有些样本点无法可达了,整个世界村被划分为互不可达的小部落。
Isomap算法是保持邻域距离,而LLE算法则是试图保持领域内的线性关系,假定样本 x i x_i xi的坐标可以通过它的邻域样本线性表出:
LLE算法主要有两步:
注:第四行中,对于不在当前样本 x i x_i xi的邻域区域内的样本 x j x_j xj, w i j = 0 w_{ij}=0 wij=0使得无论其如何变化都对 x i x_i xi和 z i z_i zi没有任何影响。这种将变动限制在局部的思想在许多地方都有用。
前面讨论的降维方法都是为了应对维数灾难而提出的方法,即都试图将原空间投影到一个合适的低维空间中,接着在低维空间中进行学习任务从而产生比较好的性能。
寻找合适的空间,实质上就是在寻找一个合适的距离度量。事实上,不管高维空间还是低维空间都潜在对应着一个距离度量,那可不可以直接学习出一个距离度量来等效降维呢?这便是度量学习(metric learning)的基本动机。
首先,要学习出距离度量必须先定义一个合适的距离度量形式:
若各个属性重要程度不一样即都有一个权重,则得到加权的平方欧式距离:
由于 W W W是一个对角矩阵,即非对角元素都为0,则意味着坐标轴是正交的,即属性间无关,这与现实中的实际问题有出入(如人的身高和体重是正相关的,其对应的坐标轴不再正交)。为此,将(10.33)中的 W W W替换为一个普通的半正定对称矩阵 M M M,于是得到了马氏距离:
通用马氏距离中 M M M也称度量矩阵(为了保持距离非负且对称, M M M必须是(半)正定对称矩阵,即必有正交基 P P P使得 M M M能写为 M = P P T M=PP^T M=PPT),度量学习则是对 M M M进行学习。
标准的马氏距离中 M M M是协方差矩阵的逆,马氏距离是一种考虑属性之间相关性且尺度无关(即无须去量纲)的距离度量。
同样对于度量学习,也需要设置一个优化目标,西瓜书中介绍的是错误率和相似性两种优化目标。
- 降维是将原高维空间嵌入到一个合适的低维子空间中,接着在低维空间中进行学习任务;
- 度量学习则是试图去学习出一个距离度量来等效降维的效果,两者都是为了解决维数灾难带来的诸多问题。
- 也许大家最后心存疑惑,那kNN呢,为什么一开头就说了kNN算法,但是好像和后面没有半毛钱关系?正是因为在降维算法中,低维子空间的维数d’通常都由人为指定,因此我们需要使用一些低开销的学习器来选取合适的d’,kNN这家伙懒到家了根本无心学习,在训练阶段开销为零,测试阶段也只是遍历计算了距离,因此拿kNN来进行交叉验证就十分有优势了~同时降维后样本密度增大同时距离计算变易,更为kNN来展示它独特的十八般手艺提供了用武之地。----参考链接