SVM(未完待续)

1.间隔(Margins)

考虑逻辑回归,概率值是由模型预测出来的,给定,如果,则,预测最终类别就为1.

对于一个正类样本越大,也就越大,我们也就更大程度上确定该样本属于类别1.也就是说如果,那么预测就非常可信,类似地,如果,我们就能很自信是正确的预测.换种角度,对于给定的训练集,如果我们拟合出合适的参数,对于任何一正类样本,使得,对于任何负类样本(),使得,那么就可以说拟合出了很好的参数,因为这个参数对应的分类器可以将样本很“自信”地区分开来,如果拟合出侧参数使得 = 0,这就使得=0,也就是说很难确定到底是哪一类,也就是参数使得的值距离0越远越好,这样就越加容易确定出给定特征所属类别。

考虑下面的图:

上面的直线就是决策边界(也叫分割超平面)根据所得A,B,C是三个已经被分出类的点。注意到,点A距离决策边界很远,如果被问对于A的值得预测是多少,我们可以很大胆且自信的说.反观点C,距离决策边界很近,虽然我们根据当前的决策边界也预测,但是当决策边界作出很小的改变,就很容易使得,因此我们对A的预测比对C的预测更加自信,也就是说如果某点距离决策边界越远,那么根据此决策边界对该点作出的预测就更加可信。

2.符号标记

为了使得讨论SVM更加清晰,首先来介绍一些符号标记。我们将用来表示正负类,用来表示参数,我们要学习出的分类器模型如下:

其中,如果,否则

3.函数间隔和几何间隔(Functional and geometric margins)

给定某一训练样本,我们定义的关于参数函数间隔:

.

如果,为了让函数间隔较大(正如前面讨论,为了预测更加可信和正确),需要是一个很大的正值,当,

同样为了让函数间隔较大,就需要是一个绝对值很大的负值。简单来说,当是一个很大的正值时,我们对样本的预测的正确性就会相当大,因此一个较大的函数间隔就意味着更加可信和正确的预测。然而增大绝对值得方法其实很简单,用代替就很容易达到目的,但这样做真的可行或者有意义吗?考虑下面的讨论。

对于一个线性分类器,我们选择上面提到的函数(只能取1或者-1),如果我们用代替,显然有,也就是说的值就没变,即只取决于的符号,而不是值的大小。但是,用代替后,导致上面提到的函数间隔也变为原来的两倍。但是,如果原来预测=0.5,就是=0.5,意味着是1或者-1类的几率是一样的,很难确定到底是哪一类,即使代替后函数间隔变为原来的2倍,由于没变,所以还是很难确定,所以增大函数间隔后并没有提高预测的可信度和准确性,那么之前说的“一个较大的函数间隔就意味着更加可信和正确的预测”是不是有问题呢?显然是有问题的,所以为了解决这个问题,我们得从函数间隔的定义入手:采取一种归一化手段,令,用代替。后面会继续讨论这个问题。

给定训练集,前面是代表训练集中某一个样本的函数间隔,我们定义训练集的函数间隔是训练集中所有样本的函数间隔中最小的那个,用表示训练集的函数间隔,则根据定义:

下面讨论几何间隔,考虑下面图片:

在参数还是的情况下决策边界如上面直线所示。因为决策边界的方程是=0,根据几何知识可以知道,决策边界是与向量垂直的。考虑点A代表着某个训练样本被标记为1类,点A到决策边界的距离就是线段AB的长度,用表示,注意区别于

如何计算出A的值呢?可以看出是与同向的单位向量,A代表,因此点B就可以表示为

但是点B是决策边界上的一点,根据决策边界的方程=0可以得到:

解出

然而这只是位于决策边界上方的正样本的,更加一般地,我们定义出任意训练集中的样本的

这就是任意样本的几何间隔(geometric margin).

,函数间隔就和几何间隔相等,这就将两种不同间隔联系了起来。

但是,当我们用代替,函数间隔会变为原来的2倍,而几何间隔却不会变(这个在后面性质会很有用),

这就解释了为什么前面用代替,函数间隔变大,而分类准确度和可信度没有变化,因为函数间隔虽然变大,但是反映到实际的图形中,我们可以看到该点到分类边界的距离 (几何间隔)并没有变化,分类准确度和可信度当然不会提高,所以函数间隔存在局限性,而几何间隔就不存在这种问题,只要几何间隔变大,在图形中很显然就可以反映出分类可信度的提高。

最后定义出训练集的几何间隔,就是所有样本个体的几何间隔最小的间隔:

4.最佳间隔分类器

根据之前的讨论,在给定训练集的情况下,最重要是找到一个决策边界最大化该训练集的几何间隔,最终的分类结果就是,几何间隔就像一条河沟一样,一边是正类,另一边是负类。

现在假设给定的训练集是线性可分的,即可以用超平面将样本分成正负类。那么如何得到最大几何间隔呢?于是自然我们想到优化下面的问题:

第一个约束保证所有函数间隔都至少为 ,进一步保证函数间隔和几何间隔相等(为了解决上面讨论过的函数间隔的局限性),这样就保证了所有几何间隔都至少为.优化这个问题,我们就可以得到最大几何间隔时的参数.

由于的限制,使得上述优化的问题,变成了一个非凸的问题,就很用常规的解析的方法去优化,于是把问题转换一下,由前面讨论可知,函数间隔和几何间隔有如下关系:

=

于是优化问题可以转换为:

然而, 仍然是一个非凸目标,下面继续

回想我们之前说过,对随意扩大或者缩小任意倍数对最终分类的性能是没有什么影响的,下面就要利用这一点。

我们限制含有参数的函数间隔必须为1:

于是 ,而最大化和最小化是等价的,

于是问题进一步转化:

成功转化非凸目标到一个可解析的凸目标,而且只有一个线性约束,它的解就是最佳间隔分类器。

传统的二次规划就可以解决这个问题。但是当问题维数是在高维的时候,二次规划的效率就成了一个问题,为了解决这个问题,引入拉格朗日对偶(Lagrange duality)

5.拉格朗日对偶(Lagrange duality)

下面讨论注重思想,不要在意公式。

考虑下面问题:

转化为无约束问题求解:定义拉格朗日算子:

这里是拉格朗日乘子,对拉格朗日算子求偏导并让导数为0:

解出.

上面的问题只有一个等式约束,下面讨论更为一般的既含有等数约束,又含有不等式约束。

定义一个原问题:

类似与上面问题的求解方式,定义一个拉格朗日算子:

这里都是拉格朗日乘子.

考虑下面数值:

假如给定,假如不满足原约束条件,即

那么:

相反,如果满足原约束条件,那么:

由此可见,在满足原约束条件下,和我们所要解决的问题目标有着相同的值,如不满足原约束条件,

就趋向正无穷.于是我们发现下面等式成立:

于是定义,称为原问题的目标值.

现在来讨论一个稍微有些不同问题:

注意是最大化给定的目标,而这问题是最小化给定的目标.

由此得到如问题,称为对偶问题:

回头看看原问题:,可以发现,原问题和对偶问题除了“max”和“min”

交换了位置之外,其余的完全一样.

同样,我们定义对偶问题的目标值:.

于是,可以得出对偶问题和原问题的关系:

(函数极小值的极大值肯定小于极大值的极小值)

但是,在一定条件下有:

所以,在这个条件成立的时候,有时为了方便,我们可以解原问题的对偶问题而不去直接解原问题。下面讨论原问题和对偶问题目标值相等的条件。

将最初的问题再写出来:

假设函数和约束条件都是凸函数,约束条件是线性函数(即存在使得成立),进一步假设

是严格可行,对于所有即至少存在一个使得.

在上述假设条件下,一定存在,使得是原问题的解,是对偶问题的解,并且.此外,满足KKT条件(Karush-Kuhn-Tucker conditions):

总的来说,如果满足KKT条件,原问题的解就和对偶问题的解相等.

特别注意条件(5)是对偶互补条件,它意味着如果,则=0,这将会成为后面讨论的一个关键.

6.最佳间隔分类器(续4)

在第4部分,为了找到最佳间隔分类器,采取优化下面的问题(原问题):

为和第5部分讨论的优化问题形式上统一,可以把这个优化问题的约束条件写为:

由KKT对偶互补条件可知:αigi(ω)=0,又由KKT条件可知,这里就是αi≥0.如果αi>0,则gi(ω)=0,即

 = 0,于是=1,而就是样本的函数间隔.由此可知,只有当样本函数间隔为1时,才有.

考虑下面的示意图:

实线代表最大间隔分割超平面.最靠近决策边界的点的间隔最小,有三个点(两个正样本和一个负样本)正好位于与决策边界平行的虚线上。由于在原问题的约束中规定了间隔为1,所以间隔为1的点只有3个,由前面讨论可知使得αi>0的点只有这三个,那么这三个点就是这个问题的支持向量(support vectors).可以看出支持向量的数目要远比训练样本数目小.

下面我们试图用对偶的方法解这个问题,构造原问题的拉格朗日算子:

根据KKT条件:

于是得到:

于是拉格朗日算子可以写为:

同样有KKT条件:

进一步简化:

于是得到对偶问题:

表示:

如何解这个对偶问题暂时不谈,假如已经解出了这对偶问题,得到了最优的α,那么根据上面的

就可以得到最佳的,即找到了,然后由下面的等式:

得到最优的b,即.

假设根据训练集现在已经拟合出了各个参数,对于新来的输入点,我们通过计算,当且仅当这个值大于0时,给出预测,而根据

因此,如果已经拟合出α,为了计算这个值只需要计算训练集中的点和的内积即可.由上面的讨论可知,除了支持向量对应的几个点对应的α不为0,其余情况下α均为0.所以累加的许多项都为0,我们只需计算出支持向量(往往数量很少)和的内积即可.

时间: 2024-10-31 10:47:05

SVM(未完待续)的相关文章

whatweb.rb 未完待续

#!/usr/bin/env ruby #表示ruby的执行环境 =begin # ruby中用=begin来表示注释的开始 .$$$ $. .$$$ $. $$$$ $$. .$$$ $$$ .$$$$$$. .$$$$$$$$$$. $$$$ $$. .$$$$$$$. .$$$$$$. $ $$ $$$ $ $$ $$$ $ $$$$$$. $$$$$ $$$$$$ $ $$ $$$ $ $$ $$ $ $$$$$$. $ `$ $$$ $ `$ $$$ $ `$ $$$ $$' $ `$

把握linux内核设计思想系列(未完待续......)

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 把握linux内核设计思想(一):系统调用 把握linux内核设计思想(二):硬中断及中断处理 把握linux内核设计思想(三):下半部机制之软中断 把握linux内核设计思想(四):下半部机制之tasklet 把握linux内核设计思想(五):下半部机制之工作队列及几种机制的选择 把握linux内核设计思想(六):内核时钟中断 把握linux内核设计思想(七):内核定时器和

[译]App Framework 2.1 (1)之 Quickstart (未完待续)

最近有移动App项目,选择了 Hybrid 的框架Cordova  和  App Framework 框架开发. 本来应该从配置循序渐进开始写的,但由于上班时间太忙,这段时间抽不出空来,只能根据心情和兴趣,想到哪写到哪,前面的部分以后慢慢补上. App Framework 前生是是叫 jqMobi 注意大家不要和 jQuery Mobile 混淆了,它们是两个不同的框架,一开始我还真混淆了0.01秒. 这里我先翻译一下Quickstart 部分,一是自己工作上用的上,二是也想顺便练练英文,最关键

数据结构与算法之--高级排序:shell排序和快速排序【未完待续】

高级排序比简单排序要快的多,简单排序的时间复杂度是O(N^2),希尔(shell)排序的是O(N*(logN)^2),而快速排序是O(N*logN). 说明:下面以int数组的从小到大排序为例. 希尔(shell)排序 希尔排序是基于插入排序的,首先回顾一下插入排序,假设插入是从左向右执行的,待插入元素的左边是有序的,且假如待插入元素比左边的都小,就需要挪动左边的所有元素,如下图所示: ==> 图1和图2:插入右边的temp柱需要outer标记位左边的五个柱子都向右挪动 如图3所示,相比插入排序

git个人使用总结 —— idea命令行、撤销commit (未完待续)

近期在使用git,最开始在idea界面操作,后来要求用命令行.刚开始还不是很习惯,感觉很麻烦,用了几天后感觉爽极了! 其实git的命令也不是很多,熟悉一段时间就差不多能顺利使用了.使用过程中遇到了各种各样的问题,有些小问题就在这里集中总结一下. 1.idea命令行.git安装后就自带终端git bash,使用起来很方便.但是用idea开发,开发后还要在相应文件夹下打开git bash很麻烦.其实idea也带有终端terminal,在最下方可以找到,在这里就可以执行命令.但是如果是默认方式安装的g

Unity3D快捷键 未完待续

Unity3D 点选Object+F Object在当前视角居中 CTRL+1/2 Scene/Game视图的切换 MonoDevelop CTRL+K  删除光标所在行的该行后面的代码 CTRL + ALT +C  注释/不注释该行 CTRL+ DOWN  像鼠标滚轮一样向下拖 CTRL + UP 像鼠标滚轮一样向上拖 CTRL + F  查找该脚本 CTRL + SHIFT + F 查找全部脚本 CTRL + H 替换代码 CTRL + SHIFT +W 关掉所有脚本 Unity3D快捷键

模板区域[未完待续](会定期的更新哦(有时间就更了))

写这个博客目的就是为了记录下学过的模板方便我这焫鷄复习吧//dalao们绕道 近期学的: (1)来自机房学长jjh大神教的求1~n的所有最小素因数和加上本焫鷄的批注 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath>//求1~n的最小质因数 using namespace std; const int MAXN=1e6+

NOIP2016 那些我所追求的 [未完待续]

人生第一场正式OI [Day -1] 2016-11-17 期中考试无心插柳柳成荫,考了全市第2班里第1(还不是因为只复习了不到两天考试),马上请了一个周的假准备NOIP(数学生物还是回去上课的) 灰哥跟我一块,tlq考吃了没请假 正好下个周老班出去学习了不害怕 星期4所有人都请假了,漫无目的地复习了一天题,参考题解补了一场模拟赛 晚上灰哥因为住宿直接回家了,还让我给XXX送纸条 SD NOIP的群好多人直播,我们就直播了个国际象棋(竟然有人说八皇后,我只升变了两个兵称为皇后),然而竟然默认开启

[daily][optimize] 去吃面 (python类型转换函数引申的性能优化)(未完待续)

前天,20161012,到望京面试.第四个职位,终于进了二面.好么,结果人力安排完了面试时间竟然没有通知我,也没有收到短信邀请.如果没有短信邀请门口的保安大哥是不让我进去大厦的.然后,我在11号接到了面试官直接打来的电话,问我为啥还没到,我说没人通知我我不知道呀.结果我就直接被他邀请去以访客的身份参加面试了.不知道人力的姑娘是不是认识我,且和我有仇,终于可以报复了... 然后,我终于如约到了,面试官带着我去前台登记.前台的妹子更萌...认为我是面试官,面试官是才是来面试的.我气质真的那么合吗?