拉格朗日乘子法
在学习对偶算法之前,首先我们需要了解一点数学知识——拉格朗日乘子法。它和高数中的拉格朗日乘数法很类似,都用于最优化的求解。不同的点是乘数法用于限制条件为等式的情况,而乘子法用于限制条件为不等式的情况。下面我们介绍一下两种方法,侧重点放在乘子法上面。

1、拉格朗日乘数法——等式约束

下面简单介绍下拉格朗日乘数法。
设给定二元函数z=ƒ(x,y)和附加条件φ(x,y)=0,为寻找z=ƒ(x,y)在附加条件下的极值点。

1. 先做拉格朗日函数F(x,y,λ)=f(x,y)+λφ(x,y) ,其中λ为参数。
2. 令F(x,y,λ)对x和y和λ的一阶偏导数等于零,得到
       Fx′=ƒx′(x,y)+λφx′(x,y)=0F'_x=ƒ'_x(x,y)+λφ'_x(x,y)=0Fx′​=ƒx′​(x,y)+λφx′​(x,y)=0
     Fy′=ƒy′(x,y)+λφy′(x,y)=0F'_y=ƒ'_y(x,y)+λφ'_y(x,y)=0Fy′​=ƒy′​(x,y)+λφy′​(x,y)=0
     Fλ′=φ(x,y)=0F'_λ=φ(x,y)=0Fλ′​=φ(x,y)=0
3. 由上述方程组解出x,y及λ,如此求得的(x,y),就是函数z=ƒ(x,y)在附加条件φ(x,y)=0下的可能极值点。若这样的点只有一个,由实际问题可直接确定此即所求的点。

2、拉格朗日乘子法——不等式约束

目标函数f(x),不等式约束g(x),有的教程会添加上等式约束条件h(x)=0。
此时最优化问题描述如下:
minf(x)s.t.gi(x)⩽0;hi(x)=0(2.1)\tag{2.1}min\ \ f(x) \\ s.t. \ \ \ g_i(x)\leqslant0 \ ; \ h_i(x)=0min  f(x)s.t.   gi​(x)⩽0 ; hi​(x)=0(2.1)

定义不等式约束下的拉格朗日函数L:
L(x,λ,μ)=f(x)+∑1pλigi(x)+∑1qμjhj(x)(2.2)L(x,λ,μ)=f(x)+\sum\limits_{1}\limits^{p}λ_ig_i(x)+\sum\limits_{1}\limits^{q}μ_jh_j(x) \tag{2.2}L(x,λ,μ)=f(x)+1∑p​λi​gi​(x)+1∑q​μj​hj​(x)(2.2)

其中λ和μ叫做乘子,也是分别是g(x)和h(x)的约束系数。


学习的对偶算法
为了求解线性可分支持向量机的最优化问题,将它作为原始的最优化问题,应用拉格朗日对偶性,通过求解对偶问题(dual problem)得到原始问题的最优解,这就是线性可分支持向量机的对偶算法(dual algorithm)。
网页链接:拉格朗日对偶性
首先,我们来回顾一下原始的最优化问题,即原始问题:
min⁡w,b12∣∣w∣∣2s.t.yi(wTxi+b)⩾1,i=1,2,……,m(2.3)\min\limits_{w,b} \frac{1}{2}||w||^2 \\s.t. \ \ \ y_i(w^Tx_i+b) \geqslant 1,i=1,2,……,m \tag{2.3}w,bmin​21​∣∣w∣∣2s.t.   yi​(wTxi​+b)⩾1,i=1,2,……,m(2.3)

根据上面的拉格朗日乘子法介绍来看,我们需要的约束函数是g(x)⩽0g(x)\leqslant0g(x)⩽0,因此我们将原始问题的约束条件改为s.t.1−yi(wTxi+b)⩽0s.t. \ \ \ 1-y_i(w^Tx_i+b)\leqslant0s.t.   1−yi​(wTxi​+b)⩽0。然后,对上式中的约束添加拉格朗日乘子αi⩾0α_i\geqslant0αi​⩾0我们可以得到不等式约束条件下的拉格朗日函数L:
L(w,b,α)=12∣∣w∣∣2+∑i=1mαi[1−yi(wTxi+b)](2.4)L(w,b,α) = \frac{1}{2}||w||^2 + \sum\limits_{i=1}^{m}α_i[1-y_i(w^Tx_i+b)] \tag{2.4} L(w,b,α)=21​∣∣w∣∣2+i=1∑m​αi​[1−yi​(wTxi​+b)](2.4)

因为αi⩾0α_i\geqslant0αi​⩾0,且1−yi(wTxi+b)⩽01-y_i(w^Tx_i+b)\leqslant01−yi​(wTxi​+b)⩽0。显然有:
max⁡αL(w,b,α)=12∣∣w∣∣2(2.5)\max\limits_{α} \ \ L(w,b,α) = \frac{1}{2}||w||^2 \tag{2.5}αmax​  L(w,b,α)=21​∣∣w∣∣2(2.5)

因此原始问题min⁡w,b12∣∣w∣∣2\min\limits_{w,b}\frac{1}{2}||w||^2w,bmin​21​∣∣w∣∣2可以写成:
min⁡w,bmax⁡αL(w,b,α)==>max⁡αmin⁡w,bL(w,b,α)(2.6)\min\limits_{w,b} \ \max\limits_{α} \ L(w,b,α) ==> \max\limits_{α} \min\limits_{w,b} \ L(w,b,α) \tag{2.6}w,bmin​ αmax​ L(w,b,α)==>αmax​w,bmin​ L(w,b,α)(2.6)此时我们就得到了原始问题的对偶问题 max⁡αmin⁡w,bL(w,b,α)\max\limits_{α} \min\limits_{w,b} \ L(w,b,α)αmax​w,bmin​ L(w,b,α)。


对偶问题的求解
首先,我们先看内层的最优化问题,即min⁡w,bL(w,b,α)\min\limits_{w,b} \ L(w,b,α)w,bmin​ L(w,b,α)。
用L(w,b,α)分别对w,b进行求导,令=0,得到下面两个式子:
        w=∑i=1mαiyixiw = \sum\limits_{i=1}^{m}α_iy_ix_iw=i=1∑m​αi​yi​xi​
        0=∑i=1mαiyi0 = \sum\limits_{i=1}^{m}α_iy_i0=i=1∑m​αi​yi​
将上面两个公式带入max⁡αmin⁡w,bL(w,b,α)\max\limits_{α} \min\limits_{w,b} \ L(w,b,α)αmax​w,bmin​ L(w,b,α)中,可以消去w和b(具体过程省略,可自行推导,较简单),得到下面的公式:
max⁡α∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxiTxjs.t.∑i=1mαiyi=0;i⩾0,i=1,2,…,m(2.7)\max\limits_{α}\ \ \sum\limits_ {i=1}^{m}α_i - \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}α_iα_jy_iy_jx_i^Tx_j \tag{2.7} s.t. \ \ \ \sum\limits_{i=1}^{m}α_iy_i = 0;\ \ \ _i\geqslant 0,i = 1,2,…,m αmax​  i=1∑m​αi​−21​i=1∑m​j=1∑m​αi​αj​yi​yj​xiT​xj​s.t.   i=1∑m​αi​yi​=0;   i​⩾0,i=1,2,…,m(2.7)
通过上面的式子可以解出α,然后求出w和b,然后就能得到最终的模型f(x)=wTxi+bf(x) = w^Tx_i + bf(x)=wTxi​+b。
具体的求解方法SMO看下一小节。


SMO
SMO(Sequential Minimal Optimization),顺序最小优化算法。其基本思想先固定αiα_iαi​之外的所有参数,然后求αiα_iαi​上的极值。因为存在∑i=1mαiyi=0\sum\limits_{i=1}^{m}α_iy_i = 0i=1∑m​αi​yi​=0的限制,所以固定αiα_iαi​之外的其他变量,则αiα_iαi​可以由其他变量表示。

具体过程:

SMO每次选择两个变量αiα_iαi​和αjα_jαj​,并固定其他的参数。这样在参数初始化后,SMO不断执行以下的两个步骤直至收敛:

  • 选取一对需更新的变量αiα_iαi​和αjα_jαj​
  • 固定αiα_iαi​和αjα_jαj​之外的参数,求解max⁡α∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxiTxj\max\limits_{α}\ \ \sum\limits_ {i=1}^{m}α_i - \frac{1}{2}\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{m}α_iα_jy_iy_jx_i^Tx_jαmax​  i=1∑m​αi​−21​i=1∑m​j=1∑m​αi​αj​yi​yj​xiT​xj​获取更新后的αiα_iαi​和αjα_jαj​

SMO算法之所以很高效,恰恰在于在固定其他参数后,仅优化剩下两个参数的过程能非常高效。因为αiα_iαi​和αjα_jαj​之间的约束可重写为:
αiyi+αjyj=c,αi⩾0,αj⩾0(2.8)α_iy_i + α_jy_j = c,α_i\geqslant0 ,α_j\geqslant0 \tag{2.8}αi​yi​+αj​yj​=c,αi​⩾0,αj​⩾0(2.8)

将αiyi+αjyj=cα_iy_i + α_jy_j = cαi​yi​+αj​yj​=c进行变形,变为
αj=c−αiyiyj(2.9)α_j = \frac{c-α_iy_i}{y_j} \tag{2.9}αj​=yj​c−αi​yi​​(2.9)

将(2.9)带入到(2.7),可以消去式中的αjα_jαj​。然后(2.7)就变成了有关单变量αiα_iαi​的二次规划问题,很简单就可以求解出αiα_iαi​的最优解。随后用同样的方法求解出αjα_jαj​。

那么参数b怎么确定呢?我们注意到任意的支持向量(xs,ys)(x_s,y_s)(xs​,ys​)都有ys⋅f(xs)=1y_s·f(x_s)=1ys​⋅f(xs​)=1即:
ys(∑i∈sαiyixiTxs+b)=1(2.10)y_s(\sum\limits_{i∈s}α_iy_ix_i^Tx_s+b)=1 \tag{2.10}ys​(i∈s∑​αi​yi​xiT​xs​+b)=1(2.10)

即可获取参数b。虽然任何的支持向量都可以(2.10)获取b,但是现实中通常采用一种更鲁棒的做法,使用所有支持向量求解的平均值:
b=1∣s∣∑s∈S(1ys−∑i∈SαiyixiTxs)b = \frac{1}{|s|}\sum\limits_{s∈S} (\frac{1}{y_s}-\sum\limits_{i∈S}α_iy_ix_i^Tx_s)b=∣s∣1​s∈S∑​(ys​1​−i∈S∑​αi​yi​xiT​xs​)

最后w和b都求解出来后,结束。机器学习,学习的就是w和b这两个参数。


函数间隔到几何间隔的推导过程

SVM(二):对偶算法、SMO算法相关推荐

  1. 支持向量机SVM(五)SMO算法

    11 SMO优化算法(Sequential minimal optimization) SMO算法由Microsoft Research的John C. Platt在1998年提出,并成为最快的二次规 ...

  2. ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核)

    ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核) 目录 输出结果 设计思路 设计代码(部分代码) 输出结果 设计思路 设计代码(部分代码) var doTest = functi ...

  3. SVM原理推导和SMO算法

    第三次培训笔记 一.svm原理推导 svm原理用来解决二分类问题,使离超平面最近的点到该平面的距离最大化. 超平面是针对二分类问题,通过超平面将样本分为正类和负类,正类和负类的标签为yi,yi的取值只 ...

  4. SVM:通俗易懂的SMO算法

    前言 SVM算法中目标函数最终是一个关于aaa向量的函数.本文将通过SMO算法来极小化这个函数. SMO算法 首先我们再写一下带核函数的优化目标: min⏟a12∑i=1m∑j=1maiajyiyjK ...

  5. 深入理解SVM,详解SMO算法

    今天是机器学习专题第35篇文章,我们继续SVM模型的原理,今天我们来讲解的是SMO算法. 公式回顾 在之前的文章当中我们对硬间隔以及软间隔问题都进行了分析和公式推导,我们发现软间隔和硬间隔的形式非常接 ...

  6. 【机器学习算法-python实现】svm支持向量机(2)—简化版SMO算法

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景知识      通过上一节我们通过引入拉格朗日乗子得到支持向量机变形公式.详细变法可以参考这位大神的博客 ...

  7. 机器学习--支持向量机实战(二)简易SMO算法实现

    该简易算法其实完成的任务很简单,就是违反KKT条件的alpha进行符合KKT条件,然后通过不在边界的点进行迭代,然后使其alpha稳定下来下面的代码基本每一句都进行了详细的解释,具体看代码,但是建议没 ...

  8. SVM笔记之SMO算法

    目录 SMO序列最小最优化算法 变量更新 更新变量的选取 bbb和误差EiE_iEi​的计算 SMO序列最小最优化算法 SMO算法实际上用于SVM对偶问题求解中α∗\boldsymbol{\alpha ...

  9. 详解SVM支持向量机算法(四:坐标上升和SMO算法)

    作者:RayChiu_Labloy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 目录 背景 坐标上升算法 定义 过程 举个求解的栗子 基于坐标上升的SMO算法 SMO ...

最新文章

  1. 伯克利人工智能研究院最新研究:协作型工业机器人如何更智能?
  2. Materialized Views
  3. ES6专题——整理自阮一峰老师的ECMAScript 6入门
  4. Demosaic算法学习
  5. 百度优化有感,原创内容只是个传说
  6. 判断用户用手机访问还是用电脑访问网页
  7. 如何在html嵌入html网页
  8. kafka-3-故障排错
  9. Java课程设计报告
  10. 2021美赛什么时候出成绩?
  11. Web Server 配置及上传文件
  12. “绿坝-花季护航”软件
  13. MessageDigest 详解
  14. openwrt 添加usb网卡_树莓派安装OpenWrt教程
  15. 【数学史】大富翁的概率
  16. 利用C语言绘制操作系统图像界面
  17. nba app android,NBA app官方版
  18. CANdelaStudio从入门到精通总览
  19. java-编写简单的编辑器
  20. 苹果公司对失败的总结和展望未来

热门文章

  1. 《HTML 5+CSS 3入门经典》——第2章 去其糟粕,取其精华——HTML 5 的元素与属性...
  2. JavaScript-DOM-文本节点
  3. 风险管理系列课程二:利用图技术优化反洗钱解决方案
  4. gmoj 6087. 【GDOI2019模拟2019.3.26】获取名额 题解
  5. 曾经我们并肩作战,敬未来一杯,敬资本一杯
  6. 使用python连接mysql和发送post请求
  7. 非常好用的一个表设计工具EZDML使用详细教程
  8. 有限元分析的概念与应用(第四版)
  9. Android 主题切换(theme),语种切换,动态获取自定义属性(attr)值
  10. 第四周【项目2-长方形周长和面积】