今天是机器学习专题的第33篇文章,我们继续来聊聊SVM模型。

在上一篇文章当中我们推到了SVM模型在线性可分的问题中的公式推导,我们最后得到的结论是一个带有不等式的二次项:

\[\left\{\begin{align*}
&\min_{\omega , b} \frac{1}{2}||\omega||^2\\
s.t.& \quad y_i(\omega^Tx + b) \ge 1, &i=1,2,3\ldots,m\\
\end{align*}\right.\]

想要了解具体推导过程的同学,可以参考我的上一篇文章:

传送门

其实上一篇的文章当中遗留了一个问题,就是我们希望得到\(||\omega||\)最小,为什么不直接求\(||\omega||\)最小,而非要求\(||\omega||^2\)最小呢?原因就在它的解法上,因为我们要将它转化成一个凸二次规划问题(Quadratic Programming)。QP问题也是计算科学当中一个很重要的领域,也是比较困难的领域,因为需要对计算机以及数学都有很深的造诣。

我个人感觉和实际的机器学习以及工程结合不是非常紧密,目前主要在SVM模型的原理推导上用到,所以我们可以只需要把SVM用到的公式原理理解就可以了。

求解过程

QP问题其实有专门的QP计算包可以求它的极值,我也曾经用过,但这并不是唯一的解法,并且这种解法有一个很大的缺点在于没办法套用核函数。所以我们一般不使用QP规划的方法来求解。

我们观察一下原式,很自然的会有一种感觉,就是那些不等式很烦人。我们希望消除掉这些不等式,也有办法,就是通过使用拉格朗日乘子法来将有约束的优化目标转化成无约束的优化函数。

我们来看下拉格朗日乘子法的使用过程,给定一个不等式约束问题:

\[\left\{\begin{align*}
&\min_{x} f(x)\\ s.t.& g_i(x) \le 0, i=1, 2, \cdots, k\\
&h_j(x) = 0, j=1, 2, \cdots, m\\ & \end{align*}\right.\]

对于这个看起来很复杂的方程组,我们引入一个广义朗格朗日函数,将它改写成这样:

\[L(x, \alpha, \beta)=f(x) + \sum_{i=1}^k \alpha_ig_i(x)+\sum_{j=1}^m \beta_jh_j(x), \quad \alpha_i \ge 0
\]

这个式子相比于上面的方程组看起来要简单一些,但是它有什么用呢?我们简单分析一下,会发现\(L \le f(x)\)。因为\(\alpha_i \ge 0\),并且\(g_i(x) \le 0\)。所以两者相加,\(L \le f(x)\),当\(\alpha_i = 0\)时L可以取到最大值,这时\(L = f(x)\)。所以我们要求的是\(\max L(x, \alpha, \beta)\)。

又由于我们要求的目标是\(f(x)\)的极小值,我们最终的目标是\(\min_{x} \max_{\alpha_i \ge 0} L(x, \alpha, \beta)\)。

对偶问题

接下来我们就要讨论著名的对偶问题了,所谓的对偶问题,实质上是将一个带有两个不等式的方程的不等式进行调换顺序。把\(\min \max L\)转变成\(\max \min L\),但问题是不等号的位置显然是有讲究的,不可以随意调换顺序,所以我们需要证明这样调换成立的。

为了方便起见,我们把原问题写成\(\theta_P(x)=\min_x \max_{\alpha, \beta}L(x, \alpha, \beta)\),我们再定义一个关于\(\alpha\)和\(\beta\)有关的方程:\(\theta_D(\alpha, \beta) = \min_{x}L(x, \alpha, \beta)\)。这个方程等式的右边是拉格朗日函数的最小化,因为x确定了之后,方程的结果就只和\(\alpha\)以及\(\beta\)相关,所以它是一个关于\(\alpha\)和\(\beta\)的函数。

我们对这个函数求极大值:

\[\max_{\alpha_i \ge 0} \theta_D(\alpha, \beta) = \max_{\alpha_i \ge 0} \min_{x} L(x, \alpha, \beta)
\]

不知道这个式子看起来是不是觉得有些眼熟,因为它和我们刚才推导得出来的原问题非常相似,只是不等号的位置不同。我们为什么要列出这两个式子呢?当然不是为了好玩的,主要是为了想要得到这样一条不等式:

\[\theta_D(\alpha, \beta) = \max_{\alpha_i \ge 0} \min_x L(x, \alpha, \beta) \le \min_x \max_{\alpha_i \ge 0} L(x, \alpha, \beta) = \theta_P(x)
\]

我们用拉格朗日方程做过度,就可以很容易证明这个式子:

\[\min_x L(x, \alpha, \beta) \le L(x, \alpha, \beta) \le \max_{\alpha_i \ge 0} L(x, \alpha, \beta)
\]

我们想要用对偶问题代替原问题,就需要上面这个不等号取等。对于拉格朗日方程取等的条件,数学家们已经有了严谨的证明,只需要满足Karush-Kuhn-Tucker条件(简称KTT条件)。KTT的条件推导也是一个挺复杂的过程,我们不做深入研究, 只需要知道它的存在就可以了。

KTT条件有这么几条,看起来多其实并不复杂。

\[\nabla_xL(x^*,\alpha^*, \beta^*)=0
\]

\[\nabla_\alpha L(x^*,\alpha^*, \beta^*)=0
\]

\[\nabla_\beta L(x^*,\alpha^*, \beta^*)=0
\]

\[\alpha_i^*g_i(x*)=0, i = 1, 2, 3\ldots m
\]

\[g_i(x*)=0, i = 1, 2, 3\ldots m
\]

\[\alpha_i\geq0, i = 1, 2, 3\ldots m
\]

\[h_i(x*)=0, j = 1, 2, 3\ldots l
\]

我们对照KTT条件,求解\(\theta_P(x)\)的极小值,这个就是高中数学的部分了。我们首先对原式进行化简:

\[\begin{aligned}
L(x, \omega, b) &= \frac{1}{2}||\omega||^2 + \sum_{i=1}^m\alpha_i(1 - y_i(\omega^T x_i + b))\\
&= \frac{1}{2}||\omega||^2 + \sum_{i=1}^m (\alpha_i - \alpha_i y_i \omega^Tx_i - \alpha_i y_ib) \\
&= \frac{1}{2}||\omega||^2 + \sum_{i=1}^m \alpha_i - \sum_{i=1}^m \alpha_i y_i\omega^Tx_i - \sum{i=1}^m \alpha_i y_ib
\end{aligned}
\]

再对\(\omega\)和\(b\)进行求导:

\[\frac{\partial L}{\partial \omega} = \frac{1}{2} * 2 * \omega + 0 - \sum_{i=1}^m \alpha_i y_i x_i - 0 = 0 \rightarrow \omega = \sum_{i=1}^m \alpha_i y_ix_i
\]

\[\frac{\partial L}{\partial b} = 0 + 0 - 0 - \sum{i=1}^m\alpha_i y_i = 0 \rightarrow \sum_{i=1}^m\alpha_i y_i = 0
\]

我们通过求导得出了\(\omega\)和\(\alpha\)之间的关系,也就是说只要我们确定了\(\alpha\)也就确定了\(\omega\),另外我们可以神奇地发现上面的式子当中已经没有了b,说明b已经被我们消去了。我们把上面求导得到的取极值时的\(\omega\)和\(b\)代入原式,消去\(\omega\)和\(b\),可以得到:

\[\begin{aligned}
\min_{\omega, b} L(x, \omega, b) &= \frac{1}{2}\omega^T\omega + \sum_{i=1}^m \alpha_i - \sum_{i=1}^m \alpha_iy_i\omega^Tx_i - \sum_{i=1}^m \alpha_iy_i b \\
&= -\frac{1}{2}\omega^T\sum_{i=1}^m \alpha_iy_i x_i + \sum_{i=1}^m \alpha_i - b\sum_{i=1}^m \alpha_iy_i \\
& = -\frac{1}{2}\omega^T\sum_{i=1}^m \alpha_iy_i x_i + \sum_{i=1}^m \alpha_i \\
& = \sum_{i=1}^m \alpha_i - \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m \alpha_i \alpha_j y_i y_j x_i^T x_j
\end{aligned}
\]

我们观察一下是这个式子,会发现x和y都是固定的值由样本确定,唯一的变量就只有\(\alpha\)了。我们要求的是上式的极大值,唯一的变量是\(\alpha\),求出了\(\alpha\)就可以推导得到对应的\(\omega\)和b。

那么这个\(\alpha\)怎么求呢?相关的内容我们放到下一篇文章。

今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、转发、点赞)。

原文链接,求个关注

深入理解SVM,软间隔与对偶问题的更多相关文章

  1. 机器学习,详解SVM软间隔与对偶问题

    今天是机器学习专题的第34篇文章,我们继续来聊聊SVM模型. 我们在上一篇文章当中推导了SVM模型在硬间隔的原理以及公式,最后我们消去了所有的变量,只剩下了\(\alpha\).在硬间隔模型当中,样本 ...

  2. 支持向量机(SVM)必备概念(凸集和凸函数,凸优化问题,软间隔,核函数,拉格朗日乘子法,对偶问题,slater条件、KKT条件)

    SVM目前被认为是最好的现成的分类器,SVM整个原理的推导过程也很是复杂啊,其中涉及到很多概念,如:凸集和凸函数,凸优化问题,软间隔,核函数,拉格朗日乘子法,对偶问题,slater条件.KKT条件还有 ...

  3. 5. 支持向量机(SVM)软间隔

    1. 感知机原理(Perceptron) 2. 感知机(Perceptron)基本形式和对偶形式实现 3. 支持向量机(SVM)拉格朗日对偶性(KKT) 4. 支持向量机(SVM)原理 5. 支持向量 ...

  4. 支持向量机 (二): 软间隔 svm 与 核函数

    软间隔最大化(线性不可分类svm) 上一篇求解出来的间隔被称为 "硬间隔(hard margin)",其可以将所有样本点划分正确且都在间隔边界之外,即所有样本点都满足 \(y_{i ...

  5. SVM核函数与软间隔

    核函数 在上文中我们已经了解到使用SVM处理线性可分的数据,而对于非线性数据需要引入核函数的概念它通过将数据映射到高维空间来实现线性可分.在线性不可分的情况下,支持向量机通过某种事先选择的非线性映射( ...

  6. 软间隔分类——SVM

    引入:1. 数据线性不可分:2. 映射到高维依然不是线性可分3. 出现噪声.如图: 对原始问题变形得到#2: 进行拉格朗日转换: 其中α和r是拉格朗日因子,均有不小于0的约束.按照之前的对偶问题的推导 ...

  7. 支持向量机(SVM)的推导(线性SVM、软间隔SVM、Kernel Trick)

    线性可分支持向量机 给定线性可分的训练数据集,通过间隔最大化或等价地求解相应的凸二次规划问题学习到的分离超平面为 \[w^{\ast }x+b^{\ast }=0\] 以及相应的决策函数 \[f\le ...

  8. 线性可分支持向量机与软间隔最大化--SVM(2)

    线性可分支持向量机与软间隔最大化--SVM 给定线性可分的数据集 假设输入空间(特征向量)为,输出空间为. 输入 表示实例的特征向量,对应于输入空间的点: 输出 表示示例的类别. 我们说可以通过间隔最 ...

  9. SVM中的软间隔最大化与硬间隔最大化

    参考文献:https://blog.csdn.net/Dominic_S/article/details/83002153 1.硬间隔最大化 对于以上的KKT条件可以看出,对于任意的训练样本总有ai= ...

随机推荐

  1. C++中unordered_map几种按键查询比较

    unorder_map有3种常见按键查值方法. 使用头文件<unordered_map>和<iostream>,以及命名空间std. 第一种是按键访问.如果键存在,则返回键对应 ...

  2. python7.2抛出自定义异常

    pwd="123456"if len(pwd)<8: ex= Exception("密码不能低于8位数!")#自定义异常 raise ex #抛出自定义的 ...

  3. python6.2类的封装

    class Card(object): def __init__(self,num,pwd,ban): self.num=num#卡号 self.pwd=pwd#密码 self.__ban=ban#余 ...

  4. 嵌入式linux下获取flash分区大小

    在嵌入式系统中,由于flash存储空间有限,或者是存储数据,实现数据的循环删除,需要获取到分区的使用情况,可以通过系统下的函数statfs来获取使用情况:实现代码如下: flashInfo.cpp # ...

  5. 009_go语言中的slices分片

    代码演示 package main import "fmt" func main() { s := make([]string, 3) fmt.Println("emp: ...

  6. react 样式冲突解决方案 styled-components

    前置 在 react 中解决组件样式冲突的方案中,如果您喜欢将 css 与 js 分离,可能更习惯于 CSS-Modules:如果习惯了 Vue.js 那样的单文件组件,可能习惯于使用 styled- ...

  7. EfficientNet

  8. Springboot快速入门篇,图文并茂

    Springboot快速入门篇,图文并茂 文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star!搜索关注微信公众号 [码出Offer] 领取各种学习资料! image-20 ...

  9. 【LeetCode/LintCode】 题解丨字节跳动试题:第k大的子数组

    给定一个长度为n的数组a,它有n(n+1)/2​​个子数组.请计算这些子数组的和,然后按照升序排列,并返回排序后第k个数. 1≤n≤10​^5 1≤a​i≤10^​9 1≤k≤​n(n+1)/2 在线 ...

  10. 定宽整形(C++11起)

    定义于头文件 cstdint中int8_t.int16_t.int32_t.int64_t 分别为宽度恰为 8 . 16 . 32 和 64 位的有符号整数类型无填充位并对负值使用补码(仅若实现支持该 ...