【机器学习】支持向量机SVM学习(1)

来源:互联网 发布:免费淘宝网店模板代码 编辑:程序博客网 时间:2024/04/29 10:22

支持向量机SVM学习(1)

Email:chentravelling@163.com


      1月4号,去搜狐大数据中心面试了一个图像处理实习生岗位,本人对图像相对来讲熟悉一点,正好这个岗位是和机器学习相结合,所以自己就大胆去了,本着学一点面试经验的目的,之前也从没有过面试经历。在简历里自己写了熟悉SVM分类器,去了以后果然被问到了SVM的原理,自己傻傻的只能说自己只是用过SVM,也研究过原理,但是功夫不够,确实没太明白SVM的工作原理。当然,最后没有要我,毕竟4号到今天已经过去两天了..毫无消息,但是收获还是很大。回来后,记录了一下面试的问题,一个一个弥补吧,从SVM开始。以前看SVM的时候,也查阅了很多资料,大多数都是走马观花,没有仔细阅读和推敲,所以看了很多遍都是一头雾水,不知所云,面试的时候我坦白自己没看明白,面试官也说需要耐性,着实太尴尬了。今天又看了一些资料,自己用笔也整理了一番。学习SVM分类器,个人觉得还是要循序渐进,毕竟里面涉及到的知识还是很多。

       我就不赘述什么叫SVM了,或者何年何月何人提出的了。只是我们必须知道分类的目的就是要将待分类的数据分为N类,SVM只能用在二类问题,二类!多类问题效果不好,我们就先默认这一点,我们要用一种分类器把一堆数据分为两类即可,那么这里就想到了logistic函数,由logistic函数一步一步得到我们的SVM分类器。

一、logistic

       logistic函数图像如下所示,可知自变量范围是(负无穷,正无穷),被映射到了(0,1)的范围,而映射后的值被认为是y=1的概率。


现在我们假设函数(公式1)

其中函数g为logistic函数,x则为特征向量。根据前面提到的,映射后的值表示y=1的概率,所以有了下面这个等式:(公式2)


现在我们结合上面的logistic函数图来分析一下:

1)对于一个特征x,如果>0.5,就归为y=1这一类,反之为y=0这一类。

2)从公式1也可以看出,映射后的值取决于

3)当clip_image012时,clip_image006[3]=1,反之clip_image006[4]=0。如果我们只从clip_image008[3]出发,希望模型达到的目标无非就是让训练数据中y=1的特征clip_image012[1],而是y=0的特征clip_image014

Logistic回归就是要学习得到clip_image016,使得正例的特征远大于0,负例的特征远小于0,强调在全部训练实例上达到这个目标,而实际的SVM分类器需要考虑的是将距离分类线最近的那个点到超平面的距离最大化,很绕口,后面再谈。现在我们知道logistic函数映射的结果为0,1两类,此时我们用-1和1替换0和1,同时clip_image016[1]替换成w和b。以前的clip_image021,其中认为clip_image023。现在我们替换clip_image025为b,后面替换clip_image027clip_image029(即clip_image031)。这样,我们让clip_image033,进一步clip_image035。也就是说除了y由y=0变为y=-1,只是标记不同外,与logistic回归的形式化表示没区别(关于这一点,不要太在乎clip_image035的映射结果也是(0,1),说白了,我们之前把<0.5的归为0这一类,此时我们把它归为-1这一类即可)。再明确下假设函数

clip_image037

上一节提到过我们只需考虑clip_image008[4]的正负问题,而不用关心g(z),因此我们这里将g(z)做一个简化,将其简单映射到y=-1和y=1上。映射关系如下:

clip_image039结合前面的分析,这个映射关系也是非常容易接受的咯,logistic就暂时讨论在这。

二、函数间隔(functional margin)和几何间隔(geometric margin)

给定一个训练样本clip_image041,x是特征,y是结果标签。i表示第i个样本。我们定义函数间隔如下:

clip_image043

一开始并不理解函数间隔为什么是这样定义的,后来才发现这个公式和数学上点到直线的距离公式是相一致的,这个函数间隔是人为定义的,那么

1)当clip_image045时,在我们的g(z)定义中,clip_image047clip_image049的值实际上就是clip_image051。反之亦然。为了使函数间隔最大(更大的信心确定该例是正例还是反例),当clip_image045[1]时,clip_image053应该是个大正数,反之是个大负数。因此函数间隔代表了我们认为特征是正例还是反例的确信度。

2)继续考虑w和b,如果同时加大w和b,比如在clip_image055前面乘个系数比如2,那么所有点的函数间隔都会增大二倍,这个对求解问题来说不应该有影响,因为我们要求解的是clip_image057,同时扩大w和b对结果是无影响的。这样,我们为了限制w和b,可能需要加入归一化条件,毕竟求解的目标是确定唯一一个w和b,而不是多组线性相关的向量。这个归一化一会再考虑。

刚刚我们定义的函数间隔是针对某一个样本的,现在我们定义全局样本上的函数间隔

clip_image058

说白了就是在训练样本上分类正例和负例确信度最小那个函数间隔。

接下来定义几何间隔,先看图

clip_image059

假设我们有了B点所在的clip_image057[1]分割面。任何其他一点,比如A到该面的距离以clip_image061表示,假设B就是A在分割面上的投影。我们知道向量BA的方向是clip_image063(分割面的梯度),单位向量是clip_image065。A点是clip_image041[1],所以B点是x=clip_image067,带入clip_image057[2]得,

clip_image069

进一步得到

clip_image070

clip_image061[1]实际上就是点到平面距离。

再换种更加优雅的写法:

clip_image071

clip_image073时,不就是函数间隔吗?是的,前面提到的函数间隔归一化结果就是几何间隔。他们为什么会一样呢?因为函数间隔是我们定义的,在定义的时候就有几何间隔的色彩。同样,同时扩大w和b,w扩大几倍,clip_image075就扩大几倍,结果无影响。同样定义全局的几何间隔clip_image076

三、最优间隔分类器(optimal margin classifier)

回想前面我们提到我们的目标是寻找一个超平面,使得离超平面比较近的点能有更大的间距。也就是我们不考虑所有的点都必须远离超平面,我们关心求得的超平面能够让所有点中离它最近的点具有最大间距。形象的说,我们将上面的图看作是一张纸,我们要找一条折线,按照这条折线折叠后,离折线最近的点的间距比其他折线都要大。形式化表示为:

clip_image077

这里用clip_image075[1]=1规约w,使得clip_image079是几何间隔。

到此,我们已经将模型定义出来了。如果求得了w和b,那么来一个特征x,我们就能够分类了,称为最优间隔分类器。接下的问题就是如何求解w和b的问题了。

由于clip_image081不是凸函数,我们想先处理转化一下,考虑几何间隔和函数间隔的关系,clip_image083,我们改写一下上面的式子:

clip_image084

这时候其实我们求的最大值仍然是几何间隔,只不过此时的w不受clip_image081[1]的约束了。然而这个时候目标函数仍然不是凸函数,没法直接代入优化软件里计算。我们还要改写。前面说到同时扩大w和b对结果没有影响,但我们最后要求的仍然是w和b的确定值,不是他们的一组倍数值,因此,我们需要对clip_image086做一些限制,以保证我们解是唯一的。这里为了简便我们取clip_image088。这样的意义是将全局的函数间隔定义为1,也即是将离超平面最近的点的距离定义为clip_image090。由于clip_image090[1]的最大值相当于求clip_image092的最小值,因此改写后结果为:

clip_image093

这下好了,只有线性约束了,而且是个典型的二次规划问题(目标函数是自变量的二次函数)。


      个别地方可能还是不能完全理解,但至少到目前为止还算基本能懂,比前几次看的时候进步很多,文章大部分参考了JerryLead的文章,表示感谢。

0 0
原创粉丝点击