人工智能
平时都是直接使用现成的libsvm,虽然对于SVM原理理解有一定的难度,但是仍然试着知其然,亦知其所以然。本文主要是SVM的概念性的分享。
支持向量机(Support Vector Machine,SVM)是Corinna Cortes和Vapnik等于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。
支持向量机,其含义是通过支持向量运算的分类器。其中“机”的意思是机器,可以理解为分类器。
什么是支持向量呢?在求解的过程中,会发现只根据部分数据就可以确定分类器,这些数据称为支持向量。
见下图,在一个二维环境中,其中点R,S,G点和其它靠近中间黑线的点可以看作为支持向量,它们可以决定分类器,也就是黑线的具体参数。
支持向量机(Support vector machines,SVM)与神经网络类似,都是学习型的机制,但与神经网络不同的是SVM使用的是数学方法和优化技术。
为了更好的理解SVM,下面从logistic回归出发,引出了SVM,既揭示了模型间的联系,也让人觉得过渡更自然。
Logistic回归目的是从特征学习出一个0/1分类模型,而这个模型是将特性的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用logistic函数(或称作sigmoid函数)将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率。
形式化表示就是
假设函数
其中x是n维特征向量,函数g就是logistic函数。
那么g(z)的图像是
可以看到,将无穷映射到了(0,1)。
而假设函数就是特征属于y=1的概率。
当我们要判别一个新来的特征属于哪个类时,只需求hθ(x),若大于0.5就是y=1的类,反之属于y=0类。
再审视一下hθ(x),发现hθ(x)只和θT有关,θT(x)》0,那么hθ(x)》0.5,g(z)只不过是用来映射,真实的类别决定权还在θT(x)。还有当时θT(x)≥0,hθ(x)=1,反之hθ(x)=0。如果我们只从θT(x)出发,希望模型达到的目标无非就是让训练数据中y=1的特征θT(x)≥0,而是y=0的特征θT(x)≤0。Logistic回归就是要学习得到θ,使得正例的特征远大于0,负例的特征远小于0,强调在全部训练实例上达到这个目标。
图形化表示如下:
中间那条线是θT(x),logistic回顾强调所有点尽可能地远离中间那条线。学习出的结果也就中间那条线。考虑上面3个点A、B和C。从图中我们可以确定A是×类别的,然而C我们是不太确定的,B还算能够确定。这样我们可以得出结论,我们更应该关心靠近中间分割线的点,让他们尽可能地远离中间线,而不是在所有点上达到最优。因为那样的话,要使得一部分点靠近中间线来换取另外一部分点更加远离中间线。我想这就是支持向量机的思路和logistic回归的不同点,一个考虑局部(不关心已经确定远离的点),一个考虑全局(已经远离的点可能通过调整中间线使其能够更加远离)。这是我的个人直观理解。
形式化表示
函数间隔(functional margin)和几何间隔(geometric margin)
刚刚我们定义的函数间隔是针对某一个样本的,现在我们定义全局样本上的函数间隔
说白了就是在训练样本上分类正例和负例确信度最小那个函数间隔。
接下来定义几何间隔,先看图
回想前面我们提到我们的目标是寻找一个超平面,使得离超平面比较近的点能有更大的间距。也就是我们不考虑所有的点都必须远离超平面,我们关心求得的超平面能够让所有点中离它最近的点具有最大间距。形象的说,我们将上面的图看作是一张纸,我们要找一条折线,按照这条折线折叠后,离折线最近的点的间距比其他折线都要大。形式化表示为:
这里用||w||=1规约w,使得是wTx+bi(因没法输入公式,写成这样子了)几何间隔。
到此,我们已经将模型定义出来了。如果求得了w和b,那么来一个特征x,我们就能够分类了,称为最优间隔分类器。接下的问题就是如何求解w和b的问题了。
由于||w||=1不是凸函数,我们想先处理转化一下,考虑几何间隔和函数间隔的关系,公式:
我们改写为:
这时候其实我们求的最大值仍然是几何间隔,只不过此时的w不受||w||=1的约束了。然而这个时候目标函数仍然不是凸函数,没法直接代入优化软件里计算。我们还要改写。前面说到同时扩大w和b对结果没有影响,但我们最后要求的仍然是w和b的确定值,不是他们的一组倍数值。
这下好了,只有线性约束了,而且是个典型的二次规划问题(目标函数是自变量的二次函数)。代入优化软件可解。到这里发现,虽然没有先画好图,画好分类超平面,在图上标示出间隔那么直观,但每一步推导有理有据,依靠思路的流畅性来推导出目标函数和约束。
全部0条评论
快来发表一下你的评论吧 !