赞
踩
理想假设:密采样。但与现实不符。
K近邻学习kNN:
现实情况:高维情形下出现的数据样本稀疏、距离计算困难等问题,称为维数灾难。
缓解途径2种:1)降维;2)特征选择。
降维,就是通过某种数学变换将原始高维属性空间转变为一个低维子空间,在这个子空间中样本密度大幅提高,距离计算也变的更为容易。
降维原因,低维嵌入(观测或收集到的数据样本虽是高维的,但与学习任务密切相关的可能只是某个低维分布,即高维空间中的一个低维嵌入。)
降维方法:
1)线性降维方法
假设从高维空间到低维空间的函数映射是线性的。
(1)多维缩放方法MDS。
(2)主成分分析PCA:最常用的降维方法。
2)非线性降维方法
(1)核化线性降维:
基于核技巧对线性降维方法进行核化。
核主成分分析KPCA。为获得投影后的坐标,需对所有样本求和,计算开销略大。
3.流形学习:
借鉴拓扑流形概念的降维方法。
(1)等度量映射:Isomap。
出发点:低维流形嵌入高维空间后,直接在高维空间中计算直线距离具有误导性,因为高维空间中的直线距离在低维嵌入流形上是不可达的。
Isomap试图保持近邻样本之间的距离
(2)局部线性嵌入:LLE
LLE试图保持邻域内样本的线性关系
4.度量学习:
直接尝试学习出一个合适的距离度量,不用间接的找出一个合适的低维空间。
近邻成分分析NCA求得距离度量矩阵M。
-----------------------------------------------------------------------------------------------------------------------------
k近邻学习是一种监督学习算法,在给定的训练样本集中,基于某种距离度量,找出与训练集最靠近的kk个训练样本,然后基于这k个邻居信息来进行预测。
投票法:通常在分类任务中使用,判别方法是选择这kk个样本中出现最多的类别标记作为预测结果。
平均法:通常在回归任务中使用,判别方法是将这kk个样本的实值输出标记的平均值最为预测结果。
加权平均或加权投票:根据距离远近来决定权重,距离越近,权重越大。
kNN虽然是一种监督学习方法,但是它却没有显式的训练过程,而是当有新样本需要预测时,才来计算出最近的k个邻居,因此kNN是一种典型的懒惰学习方法,再来回想一下朴素贝叶斯的流程,训练的过程就是参数估计,因此朴素贝叶斯也可以懒惰式学习,此类技术在训练阶段开销为零,待收到测试样本后再进行计算。相应地我们称那些一有训练数据立马开工的算法为“急切学习”,可见前面我们学习的大部分算法都归属于急切学习。
KNN算法的核心在于k值的选取以及距离的度量。
对于距离度量,不同的度量方法得到的k个近邻不尽相同,从而对最终的投票结果产生了影响,因此选择一个合适的距离度量方法也十分重要。在上一篇聚类算法中,在度量样本相似性时介绍了常用的几种距离计算方法,包括闵可夫斯基距离,曼哈顿距离,VDM等。在实际应用中,kNN的距离度量函数一般根据样本的特性来选择合适的距离度量,同时应对数据进行去量纲/归一化处理来消除大量纲属性的强权政治影响。
维数(diamensionality):样本的特征数;
“维数灾难”:
1). 在高维情形下,数据样本将变得十分稀疏,因为此时要满足训练样本为“密采样”的总体样本数目巨大,训练样本的稀疏使得其代表总体分布的能力大大减弱,从而消减了学习器的泛化能力;
2).当维数很高时,计算距离也变得十分复杂,甚至连计算内积都不再容易,这也是为什么支持向量机(SVM)使用核函数“低维计算,高维表现”的原因。
缓解维数灾难方法:降维(维数约简),也就是通过某种数学变换将原始高维属性空间转变为一个低维“子空间”,在这个子空间中样本密度大幅提高,距离计算也变得更为容易。
在很多时候,人们观测或收集到的数据样本虽然是高维的,但与学习任务密切相关的也许仅是某个低维分布,即高维空间中的一个低维嵌入。
线性降维方法:基于线性变换来进行降维的方法。
2.1、多维缩放MDS
“多维缩放”(MDS):要求原始空间样本之间的距离在降维后的低维空间中得以保持。
假定m个样本在原始空间中任意两两样本之间的距离矩阵为D∈R(m*m),我们的目标便是获得样本在低维空间中的表示Z∈R(d’*m , d’< d),且任意两个样本在低维空间中的欧式距离等于原始空间中的距离,即||zi-zj||=Dist(ij)。因此接下来我们要做的就是根据已有的距离矩阵D来求解出降维后的坐标矩阵Z。
令降维后的样本坐标矩阵Z被中心化,中心化是指将每个样本向量减去整个样本集的均值向量,故所有样本向量求和得到一个零向量。这样易知:矩阵B的每一列以及每一列求和均为0,因为提取公因子后都有一项为所有样本向量的和向量。
根据上面矩阵B的特征,我们很容易得到等式(2)、(3)以及(4):
这时根据(1)–(4)式我们便可以计算出bij,即bij=(1)-(2)(1/m)-(3)(1/m)+(4)*(1/(m^2)),再逐一地计算每个b(ij),就得到了降维后低维空间中的内积矩阵B(B=Z’*Z),只需对B进行特征值分解便可以得到Z。MDS的算法流程如下图所示:
不同于MDS采用距离保持的方法,主成分分析(PCA)直接通过一个线性变换,将原始空间中的样本投影到新的低维空间中。简单来理解这一过程便是:PCA采用一组新的基来表示样本点,其中每一个基向量都是原来基向量的线性组合,通过使用尽可能少的新基向量来表出样本,从而达到降维的目的。
假设使用d’个新基向量来表示原来样本,实质上是将样本投影到一个由d’个基向量确定的一个超平面上(即舍弃了一些维度),要用一个超平面对空间中所有高维样本进行恰当的表达,最理想的情形是:若这些样本点都能在超平面上表出且这些表出在超平面上都能够很好地分散开来。但是一般使用较原空间低一些维度的超平面来做到这两点十分不容易,因此我们退一步海阔天空,要求这个超平面应具有如下两个性质:
最近重构性:样本点到超平面的距离足够近,即尽可能在超平面附近;
最大可分性:样本点在超平面上的投影尽可能地分散开来,即投影后的坐标具有区分性。
这里十分神奇的是:最近重构性与最大可分性虽然从不同的出发点来定义优化问题中的目标函数,但最终这两种特性得到了完全相同的优化问题:
接着使用拉格朗日乘子法求解上面的优化问题,得到:
因此只需对协方差矩阵进行特征值分解即可求解出W,PCA算法的整个流程如下图所示:
参阅:http://blog.csdn.net/hellotruth/article/details/30750823
在很多问题上,可能需要非线性映射才能找到恰当的低维嵌入。非线性降维常用的一种方法,就是基于核技巧对线性降维方法进行“核化”。
核主成分分析(KPCA):
若样本数据点本身就不是线性分布,那还如何使用一个超平面去近似表出呢?因此也就引入了核函数,即先将样本映射到高维空间,再在高维空间中使用线性降维的方法。
核化主成分分析(KPCA)的思想:若核函数的形式已知,即我们知道如何将低维的坐标变换为高维坐标,这时我们只需先将数据映射到高维特征空间,再在高维空间中运用PCA即可。但是一般情况下,我们并不知道核函数具体的映射规则,例如:Sigmoid、高斯核等,我们只知道如何计算高维空间中的样本内积,这时就引出了KPCA的一个重要创新之处:即空间中的任一向量,都可以由该空间中的所有样本线性表示。
这样我们便可以将高维特征空间中的投影向量wi使用所有高维样本点线性表出,接着代入PCA的求解问题,得到:
化简到最后一步,只需对核矩阵K进行特征分解,便可以得出投影向量wi对应的系数向量α,因此选取特征值前d’大对应的特征向量便是d’个系数向量。这时对于需要降维的样本点,只需按照以下步骤便可以求出其降维后的坐标。可以看出:KPCA在计算降维后的坐标表示时,需要与所有样本点计算核函数值并求和,因此该算法的计算开销十分大。
流形学习(manifold learning)是一种借助拓扑流形概念的降维方法,流形是指在局部与欧式空间同胚的空间(即在局部与欧式空间具有相同的性质),能用欧氏距离计算样本之间的距离。这样即使高维空间的分布十分复杂,但是在局部上依然满足欧式空间的性质,基于流形学习的降维正是这种“邻域保持”的思想。其中等度量映射(Isomap)试图在降维前后保持邻域内样本之间的距离,而局部线性嵌入(LLE)则是保持邻域内样本之间的线性关系。
等度量映射的基本出发点是:高维空间中的直线距离具有误导性,因为有时高维空间中的直线距离在低维空间中是不可达的。因此利用流形在局部上与欧式空间同胚的性质,可以使用近邻距离来逼近测地线距离,即对于一个样本点,它与近邻内的样本点之间是可达的,且距离使用欧式距离计算,这样整个样本空间就形成了一张近邻图,高维空间中两个样本之间的距离就转为最短路径问题。可采用著名的Dijkstra算法或Floyd算法计算最短距离,得到高维空间中任意两点之间的距离后便可以使用MDS算法来其计算低维空间中的坐标。
从MDS算法的描述中我们可以知道:MDS先求出了低维空间的内积矩阵B,接着使用特征值分解计算出了样本在低维空间中的坐标,但是并没有给出通用的投影向量w,因此对于需要降维的新样本无从下手,书中给出的权宜之计是利用已知高/低维坐标的样本作为训练集学习出一个“投影器”,便可以用高维坐标预测出低维坐标。Isomap算法流程如下图:
对于近邻图的构建,常用的有两种方法:一种是指定近邻点个数,像kNN一样选取k个最近的邻居;另一种是指定邻域半径,距离小于该阈值的被认为是它的近邻点。但两种方法均会出现下面的问题:
若邻域范围指定过大,则会造成“短路问题”,即本身距离很远却成了近邻,将距离近的那些样本扼杀在摇篮。
若邻域范围指定过小,则会造成“断路问题”,即有些样本点无法可达了,整个世界村被划分为互不可达的小部落。
不同于Isomap算法去保持邻域距离,LLE算法试图去保持邻域内的线性关系,假定样本xi的坐标可以通过它的邻域样本线性表出:
LLE算法分为两步走,首先第一步根据近邻关系计算出所有样本的邻域重构系数w:
接着根据邻域重构系数不变,去求解低维坐标:
这样利用矩阵M,优化问题可以重写为:
M特征值分解后最小的d’个特征值对应的特征向量组成Z,LLE算法的具体流程如下图所示:
在机器学习中,对高维数据进行降维的主要目的是希望找到一个合适的低维空间,在此空间中进行学习能比原始空间性能更好。事实上,每个空间对应了在样本属性上定义的一个距离度量,而寻找合适的空间,实质上就是在寻找一个合适的距离度量。因此我们可以尝试直接学习出一个合适的距离度量。也就是度量学习。 按照降维后的方式来进行距离的计算,这便是度量学习的初衷。
首先要学习出距离度量必须先定义一个合适的距离度量形式。对两个样本xi与xj,它们之间的平方欧式距离为:
若各个属性重要程度不一样即都有一个权重,则得到加权的平方欧式距离:
此时各个属性之间都是相互独立无关的,但现实中往往会存在属性之间有关联的情形,例如:身高和体重,一般人越高,体重也会重一些,他们之间存在较大的相关性。这样计算距离就不能分属性单独计算,于是就引入经典的马氏距离(Mahalanobis distance):
标准的马氏距离中M是协方差矩阵的逆,马氏距离是一种考虑属性之间相关性且尺度无关(即无须去量纲)的距离度量。
矩阵M也称为“度量矩阵”,为保证距离度量的非负性与对称性,M必须为(半)正定对称矩阵,这样就为度量学习定义好了距离度量的形式,换句话说:度量学习便是对度量矩阵进行学习。
降维是将原高维空间嵌入到一个合适的低维子空间中,接着在低维空间中进行学习任务;
度量学习则是试图去学习出一个距离度量来等效降维的效果;
两者都是为了解决维数灾难带来的诸多问题。正是因为在降维算法中,低维子空间的维数d’通常都由人为指定,因此我们需要使用一些低开销的学习器来选取合适的d’,kNN属于懒惰学习,在训练阶段开销为零,测试阶段也只是遍历计算了距离,因此拿kNN来进行交叉验证就十分有优势了~同时降维后样本密度增大同时距离计算变易。
------*-*---------------------------------------------------------------------------------------------------------*-*----
更多详细内容请关注公众号:目标检测和深度学习
-------…^-^……----------------------------------------------------------------------------------------------------------…^-^……--
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。