support vector machine简介

support vector machine.

第一次了解svm是在Andrew的公开课上,可惜他讲的比较浅,仅仅介绍了一点基础知识,包括一些术语都没有涉及。然而最近在看machine learning in action里面也有一章专门讲svm的,可惜英语不过关只能先找中文的看看然后才能看英文的。。。于是我看了许多关于(不算许多)svm的博客,发现这东西博大精深,可挖的东西很多,特此写下来总结一下,也算是梳理自己对svm的理解思路了

1.支持向量机概述

至于什么是向量机我觉得我应该不用再说了,它也是一种线性分隔器,但它比logistic regression高就高在它更注重到分隔的优化性,这也是我们需要重点讨论的内容,同时还会涉及到kernel的引入和松弛变量的内容。

2.间隔,函数间隔和几何间隔

其实我们所讲到的svm就是寻找一个线性函数,从而对样本进行线性分类,而这样的一个线性函数如果不考虑它的维度的话,我们称之为超平面。不过我们用svm解决的多是离散值的问题,而我们的线性函数又是一个实值函数,于是我们需要找到一个阀值,从而模拟出离散值的解。
我们定义函数间隔为:
但是我们发现函数间隔在w和b增大一倍后值也增大了一倍,那还怎么求间隔最小值?(增大其实直线并没有改变,值却变大了,这是不符合我们的目的的),于是我们衍生出了几何间隔,即在函数间隔除以||w||。其实几何间隔也是可以用向量的运算推出来的(其实就是推出来的2333)这样我们发现如下关系:
ç=ç几何||w||(原谅我打不出来那个符号。。)我们可以看到,ç几何和||w||成反比,为了简化后续计算我们将ç定为1(我也母鸡为啥,反正不影响优化的求值问题),这样求解ç几何的最大值就转化为求||w||的最小值,那么如果用图像来表示整个分类空间的话,我们拒绝分类的区域的垂直长度就是2/||w||,注意,1是我们定的,然后真正的margin应该是两个间隔的长度。所以我们理一下,现在我们需要求的ç几何最大值被转化为了求1/2||w||^2的最小值。

3.优化问题的求解

对于一个优化问题,我们有一个优化目标和一些约束条件,基于这些约束条件我们求的目标的最优值,而这里的||w||的约束条件是s.t.yi[(w.T*xi)+b]>=1(for i in all dataset)。对于这样的优化问题我们又称其为规划,而由于可行域为凸集,故称其为二次规划。巧的是,经过证明可知二次规划一定有解(全局最优解)。但是我们会不带约束条件的最优问题求解(求导取最值)也会带等式约束条件的最优化问题求解(使用larange乘子法),唯独现在这个不等约束条件不会。那我们可以转化嘛,转化成等式不就可以解了?

4.问题的转换

我们将某一类点集设为正集x+,另一部份设为负集x-,那么我们现在需要找到的g(x)使得g(x+)≥1,g(x-)≤-1,至于为什么取+-1,是因为我们之前默认间隔是1,而在(-1,1)之间的点拒绝判断。从而样本确定了w,即
w=a1x1+a2x2+…+anxn(for i in range(n)).
这些an就称为拉格朗日乘子,xi为样本点。
但是我们发现如果不改变样本点的位置而改变其标签一样会对分类造成影响,也就表明w实际上也与标签有关,所以w被改写成:
w=a1y1x1+a2y2x2+…+anynxn(for i in range(n))。
其实在上述中很多ai都是等于0的,但只有那些不等于0的ai后面跟的数据点才会对w起决定性左右,而这些样本点都是处于分界的边界处,也就是说这些点确定了分界线的最终位置,因而,这些点被称之为支持向量。
让我们现在来简化一下刚才点问题。
w=∑(aiyixi)
g(x)=<∑(aiyixi),x>+b.
又因为ai,yi都不是向量所以可以提出来,故g(x)can be represented as.
g(x)=∑aiyi

5.线性不可分问题肿么办?

我们总是考虑对于二维空间的线性分类问题,但是如果这个二维空间分不了怎么办?那我可以把它映射到多维空间去,这样就可分了。有个栗子,对于一条直线有一部分线段为白色,剩余两边两部分为黑色,如果想用一条直线将其分割,that‘s impossible,but if you find a quadratic function,这个二次函数与这条直线的交点刚好过线段的两个顶点那么是不是把它给分开了?没错,对于线性不可分问题我们可以将其映射到多维空间求解,但是这种映射并没有什么指导方法,所以很麻烦,你并不知道该怎么映射。但我们的目标已经确定了:
f(x’)=

6.松弛向量

实际上映射到高维空间并不能保证问题一定能够被解决,设想如果我们映射到高维后刚好有一个点的位置很奇葩造成原本的线性可分变成了近似线性可分,那岂不是很不爽?所以我们需要提高svm的容错性,如何提高容错性?其实很简单,只要对我们原本设下的间隔加一个松弛变量就可以了。写的简单点就是.
yi[(w.T*xi)+b]≥1-çi. (ç这里就是松弛向量,即对于那些偏离较远的点给予它们一定的宽容),不过我现在还是不知道容错向量该如何设置。。。这样我们就允许一些点到分类平面的距离不满足要求。当然为了保证我们求出来的解ç不是无穷大。。。我们需要修改最优化问题的目标以确保这个问题的实际性。
min 1/2*||w||^2+C∑çi.
s.t. yi[(w.T*xi)+b]≤1-çi
ç这里就是松弛向量,至于C,被称为惩罚因子,这东西是干嘛的呢,其实就是代表我们对于这个偏离的点的重视程度,如果我们不想错分这个点就把C设大一点,这样一旦忽视那么值就会很大,而如果我们觉得这个点是噪点,是错误,那么我们可以将C设小,从而增加其容错性。
归纳一下就是说其实svm是这么一个东西,运用kernel和松弛向量的线性可分问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值