svm 高斯核为什么惩罚项越大_不简单的SVM

92bfe273a2882d4a760d9265cf684c26.png

目录

  • Intuition
  • 算法流程
  • 代码编写
  • 练习&真题
  • Reference
  • 附录
  • SVM的另一种实现

Intuition

讲系前面

SVM的直觉非常简单,但是数学推导和求解过程略显复杂。接下来我将从这几方面来对SVM展开叙述:

  • 线性可分支持向量机
  • 软间隔最大化的支持向量机
  • 使用核技巧
  • SMO求解支持向量机

线性可分支持向量机

支持向量机要解决的问题非常简单。想象有这么一个二分类问题,不同类别之间是线性可分的。SVM要做的是找到一条直线或一个平面,以最大置信度的方式把数据分离开来。跟Perceptron不一样的是SVM得到的是一个唯一解。

最大化置信度的意思是:距离这条线或者平面最近的那些点,我们要最大化他们的距离,如下图所示:

95507245776c80a1982180782013ce97.png

我们将上面这句话转换成数学语言:

其中第一个式子是点

(其中一个距离直线最近的点)距离直线的距离公式,如果读者有疑问可自行谷歌哦。

仔细观察第一个式子,我们发现,w和b同时扩大相同的倍数,优化的值不改变。那么若求得最优的

,w和b的值也是不唯一的。为了方便起见,我么让分子部分为1,并把最大化转换成最小化:

注意,以上是带不等式约束的优化问题,我们不能直接使用拉格朗日乘子法来构造目标函数,为此我们需要给出一个限制条件

。这个式子最直观的理解是,在
时,
,在
时,
可以大于0:

该函数是二次型的,并且符合KTT条件,所以可以直接通过偏导数把极值表示出来:

在这里出现了一个麻烦的东西,w变成了

的变量,也就是说等一下我们得到的式子是关于
变化的,那么我们需要
还是说
?为了解决这个问题,我们需要对原始问题加以变换:

上面的推导会在附录中给出。

接下来我们表示出

,将我们把求得的最值代入公式得:

第一个式子是二次型的,并且符合KKT条件,我们可以对

表示出来,但是我们发现,求解出来的
跟其他
关联在一起,不能够得出解析解。关于如何求解,后面会使用SMO解决。

到这里,我们算是把线性可分支持向量机给表示出来了。

软间隔最大化支持向量机

在实践上,基本上我们碰到的数据都是线性不可分的。就是说一条直线或者一个平面无法把不同类别色数据分离开来。更数学地来说就是这个式子

无法对所有的i都满足。所以我们引入松弛变量和惩罚系数的概念:

上面的C是惩罚因子,是模型初始化需要设置的参数。

松弛变量,在这里的作用就是给限制条件加上一个值使得等式重新成立。

使用拉格朗日乘子法构造我们的目标函数:

将我们需要求解的问题转化成对偶问题(更容易求解):

对我们的式子求偏导数得:

将上面三个式子代回目标函数得:

后三个式子可合并成:

使用核技巧

前面写的RBF net中讲到了一个叫RBF核 ,这个核可以直接用到支持向量机里面。这个核起到的作用是,将你的输入数据映射到无限维,从而使得数据线性可分。更加直白来说就是:输出的分类平面是一条曲线而不是直线。代入核函数得到下面这个式子:

SMO求解支持向量机

SMO全称是序列最小最优化算法。关于SMO的具体推导,读者可以仔细研读[2],下面只给出主要的思想和相关的更新公式。

在如此多变量的情况下,要最小化上面的目标函数,SMO给出了一个折中的方案。每次只取出其中的两个变量,比如说

,以其中一个为自变量求导数求出更新公式:

其中f(x)是svm的预测值

算法流程

  • 随机初始化所有参数
  • 使用SMO算法来求解所有参数

代码编写

在代码编写里面只进行傻瓜式的遍历,每次对两个

进行更新。但是在实际的应用上,是使用策略来对最重要的
来进行更新的:

相应的代码在:

https://github.com/JyiHUO/algorithm-from-scratch/tree/master/SVM​github.com
import 

练习&真题

  • 在线性支持向量机中,求出b的值(真题)
  • 证明:线性支持向量机的空隙距离为
    (真题)
  • 为什么线性可分支持向量机比Perceptron分类器鲁棒性更强?(真题)

Reference

  • 《统计学习方法》
  • https://zhuanlan.zhihu.com/p/29212107

附录

对偶问题的推导

首先看看我们的原问题:

我们要证明:

先看看下面这个式子:

我们仔细看右边部分,这个式子

总是大于0的,因为
必须也大于0,所以要得到最优的结果,所有的
必须为0,所以证得:

现在证明:

这个证明很简单,我们进行这么一个展开:

所以:

证明完毕

SVM的另一种实现

使用SMO来实现SVM的过程非常繁琐,那还有没有另一种方法来实现SVM算法?

答案是:使用合页损失函数来实现。它的目标函数是这样子的:

仔细观察,你可以发现当

就表明这个点事被错误分类了,所以loss增大。这跟在前面svm模型构建的不等式约束(
)是一样的。反之当
表示该分类点分类正确了,不需要增加loss值。

当我们求解这个目标函数的时候,使用梯度下降来迭代更新就可以了。

缺点就是:不能够使用kernel trick来求解数据非线性的情况。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值