机器学习,详解SVM软间隔与对偶问题
今天是机器学习专题的第34篇文章,我们继续来聊聊SVM模型。
我们在上一篇文章当中推导了SVM模型在硬间隔的原理以及公式,最后我们消去了所有的变量,只剩下了\(\alpha\)。在硬间隔模型当中,样本是线性可分的,也就是说-1和1的类别可以找到一个平面将它完美分开。但是在实际当中,这样的情况几乎是不存在的。道理也很简单,完美是不存在的,总有些样本会出错。
那针对这样的问题我们应该怎么解决呢?
软间隔
在上文当中我们说了,在实际的场景当中,数据不可能是百分百线性可分的,即使真的能硬生生地找到这样的一个分隔平面区分开样本,那么也很有可能陷入过拟合当中,也是不值得追求的。
因此,我们需要对分类器的标准稍稍放松,允许部分样本出错。但是这就带来了一个问题,在硬间隔的场景当中,间隔就等于距离分隔平面最近的支持向量到分隔平面的距离。那么,在允许出错的情况下,这个间隔又该怎么算呢?
为了解决这个问题,我们需要对原本的公式进行变形,引入一个新的变量叫做松弛变量。松弛变量我们用希腊字母\(\xi\)来表示,这个松弛变量允许我们适当放松$y_i(\omega^T x_i + b) \ge 1 \(这个限制条件,我们将它变成\)y_i(\omega^T x_i + b) \ge 1-\xi_i $。
也就是说对于每一条样本我们都会有一个对应的松弛变量\(\xi_i\),它一共有几种情况。
- \(\xi=0\),表示样本能够正确分类
- \(0 < \xi < 1\),表示样本在分割平面和支持向量之间
- \(\xi = 1\),表示样本在分割平面上
- \(\xi \ge 1\),表示样本异常
我们可以结合下面这张图来理解一下,会容易一些:

松弛变量虽然可以让我们表示那些被错误分类的样本,但是我们当然不希望它随意松弛,这样模型的效果就不能保证了。所以我们把它加入损失函数当中,希望在松弛得尽量少的前提下保证模型尽可能划分正确。这样我们可以重写模型的学习条件:
&\min\quad \frac{1}{2}||\omega||^2 + C\sum_{i=1}^m\xi_i\\
& \begin{array}{r@{\quad}r@{}l@{\quad}l}
s.t.&y_i(\omega^Tx_i+b)\geq1-\xi_i, &i=1,2,3\ldots,n\\
&\xi_i \geq 0,&i=1,2,3\ldots,n\\
\end{array}
\end{align*}\]
这里的C是一个常数,可以理解成惩罚参数。我们希望\(||\omega||^2\)尽量小,也希望\(\sum \xi_i\)尽量小,这个参数C就是用来协调两者的。C越大代表我们对模型的分类要求越严格,越不希望出现错误分类的情况,C越小代表我们对松弛变量的要求越低。
从形式上来看模型的学习目标函数和之前的硬间隔差别并不大,只是多了一个变量而已。这也是我们希望的,在改动尽量小的前提下让模型支持分隔错误的情况。
模型推导
对于上面的式子我们同样使用拉格朗日公式进行化简,将它转化成没有约束的问题。
首先,我们确定几个值。第一个是我们要优化的目标:\(f(x)=\min_{\omega, b, \xi}\frac{1}{2}||\omega||^2 + C\sum_{i=1}^m \xi_i\)
第二个是不等式约束,拉格朗日乘子法当中限定不等式必须都是小于等于0的形式,所以我们要将原式中的式子做一个简单的转化:
g(x) = 1 - \xi_i - y_i(\omega^Tx_i + b) \leq 0 \\
h(x) = -\xi_i \le 0
\end{aligned}
\]
最后是引入拉格朗日乘子: \(\alpha = (\alpha_1, \alpha_2, \cdots, \alpha_m), \beta = (\beta_1, \beta_2, \cdots, \beta_m)\)
我们写出广义拉格朗日函数:\(L(\omega, b, \xi, \alpha, \beta) = \frac{1}{2}||\omega||^2 + C\sum_{i=1}^m \xi_i, + \sum_{i=1}^m \alpha_i(1 - \xi_i - y_i(\omega^Tx_i + b)) -\sum_{i=1}^m \beta_i\xi_i\)
我们要求的是这个函数的最值,也就是\(\min_{\omega, b, \xi}\max_{\alpha \ge 0, \beta\ge 0}L(\omega, b, \xi, \alpha, \beta)\)。
在处理硬间隔的时候,我们讲过对偶问题,对于软间隔也是一样。我们求L函数的对偶函数的极值。
对偶问题
原函数的对偶问题是\(\max_{\alpha \ge0, \beta \ge 0}\min_{\omega, b, \xi}L(\omega, b, \xi, \alpha, \beta)\),这个对偶问题要成立需要满足KKT条件。
我们先把这个KKT条件放一放,先来看一下对偶问题当中的内部的极小值。这个极小值没有任何约束条件,所以我们可以放心大胆地通过求导来来计算极值。这个同样是高中数学的内容,我们分别计算\(\frac{\partial L}{\partial \omega}\),\(\frac{\partial L}{\partial b}\)和\(\frac{\partial L}{\partial \xi}\)。
求导之后,我们可以得到:
\frac{\partial L}{\partial \omega} = 0 &\rightarrow \omega = \sum_{i=1}^m \alpha_i y_i x_i \\
\frac{\partial L}{\partial b} = 0 &\rightarrow \sum_{i=1}^m \alpha_i y_i = 0 \\
\frac{\partial L}{\partial \xi} = 0 &\rightarrow \beta_i = C - \alpha_i
\end{aligned}
\]
我们把这三个式子带入对偶函数可以得到:
L(\omega, b, \xi, \alpha,\beta) &= \frac{1}{2} \sum_{i=1}^m \sum_{j=1}^m \alpha_i \alpha_j y_iy_jx_i^Tx_j + C\sum_{i=1}^m \xi_i + \sum_{i=1}^m \alpha_i (1 - \xi_i) - \sum_{i=1}^m (C - \alpha_i) \xi_i \\
&= \sum_{i=1}^m\alpha_i - \frac{1}{2}\sum_{i=1}^m \sum_{j=1}^m \alpha_i \alpha_j y_iy_jx_i^Tx_j
\end{aligned}
\]
由于\(\beta_i \ge 0\),所以我们可以得到\(0 \le \alpha_i \le C\),所以最后我们可以把式子化简成:
&\max_{\alpha} \sum_{i=1}^m\alpha_i - \frac{1}{2} \sum_{i=1}^m \sum_{j=1}^m \alpha_i \alpha_j y_iy_jx_i^Tx_j\\
& \begin{array}{r@{\quad}r@{}l@{\quad}l}
s.t.& \sum_{i=1}^m \alpha_i y_i = 0 \\
& 0 \le \alpha_i \le C,&i=1,2,3\ldots,m\\
\end{array}
\end{align*}\]
将原始化简了之后,我们再回过头来看KKT条件。KKT条件单独理解看起来有点乱,其实我们可以分成三个部分,分别是原始问题可行:
1 - \xi_i - y_i(\omega^Tx_i + b) \le 0 \\
-\xi_i \le 0
\end{aligned}
\]
对偶问题可行:
\alpha_i \ge 0 \\
\beta_i = C - \alpha_i
\end{aligned}
\]
以及松弛可行:
\alpha_i (1 - \xi - y_i(\omega^Tx_i + b)) = 0 \\
\beta_i \xi_i = 0
\end{aligned}
\]
我们观察一下倒数第二个条件:\(\alpha_i (1 - \xi - y_i(\omega^Tx_i + b)) = 0\)。
这是两个式子相乘并且等于0,无非两种情况,要么\(\alpha_i = 0\),要么后面那串等于0。我们分情况讨论。
- 如果\(\alpha_i = 0\),那么\(y_i(\omega^Tx_i + b) - 1 \ge 0\),样本分类正确,不会对模型产生影响。
- 如果\(\alpha_i > 0\),那么\(y_i(\omega^Tx_i + b) = 1 - \xi_i\),则样本是支持向量。由于\(C = \alpha_i + \beta_i\) ,并且\(\beta_i \xi_i= 0\)。我们又可以分情况:
- \(\alpha_i < C\),那么\(\beta_i > 0\),所以\(\xi_i = 0\),那么样本在边界上
- 如果\(\alpha_i = C\),那么\(\beta_i = 0\),如果此时\(\xi \le 1\),那么样本被正确分类,否则样本被错误分类
经过了化简之后,式子当中只剩下了变量\(\alpha\),我们要做的就是找到满足约束条件并且使得式子取极值时的\(\alpha\),这个\(\alpha\)要怎么求呢?我们这里先放一放,将在下一篇文章当中详解讲解。
今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、转发、点赞)。

机器学习,详解SVM软间隔与对偶问题的更多相关文章
- 详解SVM模型——核函数是怎么回事
大家好,欢迎大家阅读周二机器学习专题,今天的这篇文章依然会讲SVM模型. 也许大家可能已经看腻了SVM模型了,觉得我是不是写不出新花样来,翻来覆去地炒冷饭.实际上也的确没什么新花样了,不出意外的话这是 ...
- 【机器学习详解】SMO算法剖析(转载)
[机器学习详解]SMO算法剖析 转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51227754 CSDN−勿在浮沙筑高台 本文力 ...
- 机器学习 | 详解GBDT在分类场景中的应用原理与公式推导
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...
- 详解svm和smo的出现
SupportVector Machines are learning models used forclassification: which individuals in a population ...
- HTML滚动字幕代码参数详解及Js间隔滚动代码
html文字滚动代码 <marquee style="WIDTH: 388px; HEIGHT: 200px" scrollamount="2" dire ...
- 深入理解SVM,软间隔与对偶问题
今天是机器学习专题的第33篇文章,我们继续来聊聊SVM模型. 在上一篇文章当中我们推到了SVM模型在线性可分的问题中的公式推导,我们最后得到的结论是一个带有不等式的二次项: \[\left\{\beg ...
- 机器学习--详解人脸对齐算法SDM-LBF
引自:http://blog.csdn.net/taily_duan/article/details/54584040 人脸对齐之SDM(Supervised Descent Method) 人脸对齐 ...
- 机器学习——详解经典聚类算法Kmeans
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第12篇文章,我们一起来看下Kmeans聚类算法. 在上一篇文章当中我们讨论了KNN算法,KNN算法非常形象,通过距离公 ...
- 机器学习——详解KD-Tree原理
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习的第15篇文章,之前的文章当中讲了Kmeans的相关优化,还讲了大名鼎鼎的EM算法.有些小伙伴表示喜欢看这些硬核的,于是今天上 ...
随机推荐
- three.js 着色器材质之变量(三)
这篇郭先生在练习一下着色器变量,在度娘上面或者官网上经常看到类似水波一样的效果,这篇就试着做一个这样的效果,顺便巩固一下顶点着色器和片元着色器,毕竟多多练习才能更好地掌握.效果如下图,在线案例请点击博 ...
- 咕咕咕清单(SCOI2020前)
本篇博客已停更 本篇博客已停更 本篇博客已停更 吐槽区: 2020.04.15: 从今天起我做过的题目都记录一下,想不想写题解就另说了 2020.04.17: 写了两天之后真实的发现这是博主的摸鱼日记 ...
- Prometheus Operator 教程:根据服务维度对 Prometheus 分片
原文链接:https://fuckcloudnative.io/posts/aggregate-metrics-user-prometheus-operator/ Promtheus 本身只支持单机部 ...
- 图数据库HugeGraph源码解读 (1) —— 入门介绍
HugeGraph介绍 以下引自官方文档: HugeGraph是一款易用.高效.通用的开源图数据库系统(Graph Database,GitHub项目地址), 实现了Apache TinkerPop3 ...
- C#LeetCode刷题之#189-旋转数组(Rotate Array)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3700 访问. 给定一个数组,将数组中的元素向右移动 k 个位置, ...
- Vue 内联模板(inline-template)
内联模板不会把子组件的内容分发渲染到父组件中 而是需要在父组件中实现其内容的渲染 父组件 <template> <div> <template-inline inline ...
- ElementUI——级联和树形省市区
项目中有用到省市区选择,我们是三个接口获取数据的,在此记录一下级联和树形的区别: 级联HTML: <el-cascader :props="region"></e ...
- jQuery的基础效果题
Jquery第二次考核 之真金不怕火炼 1. 名词解释 实例对象:var p1=new Person(); p1就是实例对象 构造:function Person(){} 原型对象:在 JavaS ...
- js对象的数据属性和访问器属性
js面向对象 ECMA-262第5版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征.ECMA-262定义这些特性是为了实现javascript引擎用的,因此 ...
- 把H2数据库从jar包部署到Kubernetes,并解决Ingress不支持TCP的问题
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! H2 Database是一个优秀的数据库,又小又方便,支持内存和文件形式,经常会在测试.POC(proof of conce ...