从拉格朗日乘子法到SVM

前言

本文主要是讲了如何构建SVM的模型,并利用KKT条件构造其对偶型,从而求解问题,并讲述了SVM的硬间隔,软间隔和核函数三个境界。主要参考了周志华的《机器学习》,并在其中补充了自己的想法。由于内容较多,所以很多细节都省略掉了,只留下了整体的框架,该说的东西应该都说了。

SVM基本型

首先,我们先假设一个数据集线性可分的情况,也就是硬间隔的情况,如下图所示。

硬间隔

图1:线性可分情况

可以看到,数据集可以被无数条直线正确划分为两类,然而我们希望找到其中最好的一条线来划分这两个数据集,这条直线最好有较好的泛化能力,也就是说在面对未知的数据集的时候,也能够较为正确地划分数据,有较强的抗干扰性。那么怎么样的直线是最好的呢?我们来看下下面这幅图(此图出自林轩田的机器学习技法)。
最大间隔

图2:划分方式抗干扰能力比较

从图中看出,我们假设每个数据点都带有一定的噪声,也就是说在数据点周围的灰色区域可能都是和这个数据点相同类型的数据点,只不过因为某些噪声干扰产生了一些偏移,就是有方差的意思。那么上图中的第三种情况是最能容忍这种噪声的,也就是我们最希望得到的划分方式。
换另一种方式来说,假设我们有一条直线或超平面 wTx+b=0正确划分了数据集,将直线分别往上方和下方平移,直到碰到数据点,我们假设网上和往下平移的截距是相同的,比如都是 a(如果不同的话就平移一下wTx+b=0,即改变 b的值,总能找到满足条件的一条wTx+b=0)。
{wTx+b=awTx+b=a

为了之后方便处理,我们统一一下,将等式两边同时除以一个 a,即
{w:=w/ab:=b/a
于是,我们现在就有三条直线或超平面
wTx+b=1wTx+b=0wTx+b=1

如下图所示。
SVM基本型

图3:支持向量与间隔

其中,在直线上的点就被称为支持向量。我们现在的目的就是找到使得 wTx+b=1 wTx+b=1之间距离最大的参数 wb
那个这个距离,或者说这个间隔怎么求呢?这就要用到我们的支持向量了,这个间隔是由它们决定的。
假设有支持向量 x1 x2分别满足
{wTx1+b=1wTx2+b=1

两式相减则有
w(x1x2)=2

注意到 wx1 x2都是向量,那么由向量点乘的性质可以得到
||w||||x1x2||cosθ=2

注意到了吗?这里的 ||x1x2||cosθ就是间隔,不信可以自己画下图看。于是
d=||x1x2||cosθ=2||w||

我们假设现在是一个二分类问题,两类分别标记为 {+1,1},于是现在问题就转化为了
maxw,b 2||w||s.t.{yi=1,   wTxi+b1yi=1,wTxi+b1

将式子合起来并将求最大改成求最小则是
minw,b ||w||22s.t. yi(wTxi+b)1,i=1,2,...,m

这就是SVM的基本型。
这是一个凸二次规划问题,可以直接解决,但效率不高,我们希望找到更高效的方法,所以就去找它的对偶问题。这也是求不等式约束求极值的通用手段。
既然都讲到这里了,干脆先把拉格朗日乘子法和KKT条件都给讲了。

拉格朗日乘子法

拉格朗日乘子法针对的是等式约束,基本形式如下:

minx f(x)s.t.hi(x)=0,i=1,2,...,m

拉格朗日乘子法做的就是将约束条件添加到目标函数当中,使其变成一个无约束优化问题。可以这么做的原因是,只要满足 hi(x)=0,那么不管加多少个都是不改变目标值的。
minx,λL(x,λ)=f(x)+mi=1λihi(x)

我们假设 xp个特征,那么上式的极值点有如下的必要条件
Lxk=fxk+mi=1λihi(x)xk=0,k=1,2,...,pLλi=hi(x)=0,i=1,2,...,m

上式有 pxk mλi是待求的参数( k+m个未知数),同时有 p+m个等式方程,所以是可以求解得到 xk λi的值。
值得注意的是,以上的只是必要条件,并不是充分条件,所以求得结果后最好再检验一下(虽然实际情况下都忽略了这一步)。

KKT条件

KKT条件是在拉格朗日乘子法的基础上多了不等式的约束,其针对的问题的基本型如下所示。

minxf(x)s.t.{hi(x)=0, i=1,2,..,mgj(x)0, j=1,2,...,n

其对偶型为
minx,λ,μL(x,λ,μ)=f(x)+mi=1λihi(x)+nj=1μjgj(x)

此时最优解要满足的条件为
Lxk=fxk+mi=1λihi(x)xk+nj=1μjgj(x)xk=0,k=1,2,...,pLλi=hi(x)=0,i=1,2,...,mμjgi(x)=0,j=1,2,...,nμj0,j=1,2,...,n

至于为什么是这样,参考一下 这个吧,这里偷下懒。

SVM对偶问题

我们再来回顾一下我们得到的SVM基本型。

minw,b ||w||22s.t. 1yi(wTxi+b)0,i=1,2,...,m

很显然,这是一个只有不等式的约束的KKT条件问题。
于是,我们可以将问题转化为
minw,b,αL(w,b,α)=||w||22+mi=1αi(1yi(wTxi+b))

这个时候最优解满足的条件为
Lw=wmi=1αiyixi=0Lb=mi=1αiyi=0αi(yif(xi)1)=0, i=1,2,...,mαi0,i=1,2,...,m

值得注意的是,这里的 wx都是向量, f(xi)=wTxi+b
我们将上述方程组的前2个带入到原问题中,消去参数 wb,则原问题转化为
minα L(α)=12mi=1mj=1αiαjyiyjxTixjmi=1αi

这个时候,仍然需要满足
mi=1αiyi=0αi0,i=1,2,...,mαi(yif(xi)1)=0, i=1,2,...,m

这个时候,我们就可以用一个叫做SMO的算法来求解 α,这里不详细介绍这种算法了,不然篇幅太长了。求得 α之后,可以通过 wmi=1αiyixi=0这个式子来求得 w,而剩下的一个参数b则要通过支持向量代入求解。

软间隔

有时候,噪声太大,会因为某几个点而产生线性不可分的情况。这个时候,就要引入软间隔这个概念了。说白了,就是我们允许某些点是可以被错误分类的,但这种错分的情况要尽可能地少。

软间隔

图4:软间隔示意图

所以,我们引入了松弛变量和惩罚函数。
minw,b ||w||22+Cmi=1ϵis.t. yi(wTxi+b)1ϵi,ϵi0,i=1,2,...,m

容易看出,当 C为无穷大的时候,就成了硬间隔的状态;当C越小的时候,允许被错分的点就越多。
同样是利用KKT条件,我们可以得到其对偶问题
maxα mi=1αi12mi=1mj=1αiαjyiyjxTixjs.t.{mi=1αiyi=00αiC,i=1,2,...,m

同样地,这也是可以利用SMO算法求解的,这里不详细介绍。

核函数

以上问题是针对线性可分,或者是针对由于噪声而产生的个别点线性不可分,总体线性可分的情况。那么对于下图左这样本来就线性不可分的数据集该怎么处理呢?

非线性映射

图5:非线性映射

没错,就像上图所示的这样,我们把低维的样本空间映射到一个更高为的空间,使得样本点在高维空间上线性可分。我们用 ϕ(x)表示映射后的特征向量,于是,在特征空间中超平面所对应的模型为
f(x)=wTϕ(x)+b

类似上述的问题,我们有
minw,b ||w||22+Cmi=1ϵis.t. yi(wTϕ(xi)+b)1ϵi,ϵi0,i=1,2,...,m

其对偶问题为
maxα mi=1αi12mi=1mj=1αiαjyiyjϕ(xi)Tϕ(xj)s.t.{mi=1αiyi=00αiC,i=1,2,...,m

但是,这样的处理会导致维度灾难,也就是说本来几百维的一个东西会变成几千维,这样的计算量是无法接受的。于是,核函数就出现了,核函数是在低维空间上计算高维空间点积的一种方法,大大减少了数据量,也就是说,我们完全不用考虑 ϕ(x)是什么东西就能够计算 ϕ(xi)Tϕ(xj)我们将核函数记作
κ(xi,xj)=ϕ(xi)Tϕ(xj)

常用的核函数有如下几种,这里不详细介绍核函数。
表1:常用核函数

常用核函数

于是,我们的问题就转化为了
maxα mi=1αi12mi=1mj=1αiαjyiyjκ(xi,xj)s.t.{mi=1αiyi=00αiC,i=1,2,...,m

利用上式我们可以求出 α,然而,这并没有什么卵用。由于我们不知道 ϕ(x)是什么,所以仍旧求不出 f(x)=wTϕ(x)+b
真的是这样吗?别急。
在求对偶型的过程当中,我们会求 Lw对吧。由该式我们可以知道
w=mi=1αiyiϕ(xi)

我们将其代入 f(x)可得
f(x)=wTϕ(x)+b=mi=1αiyiϕ(xi)Tϕ(x)+b=mi=1αiyiκ(x,xi)+b

这样不就求出来了吗!核函数是不是很神奇!

结束语

本文讨论了SVM是怎么来的,以及硬间隔,软间隔,核函数这三个SVM的核心问题。许多细节都省略了,只留下了整体框架。
如有不足,还请指正~

参考文献

[1] 周志华. 机器学习 : = Machine learning[M]. 清华大学出版社, 2016.
[2] http://www.onmyphd.com/?p=lagrange.multipliers
[3] http://www.onmyphd.com/?p=kkt.karush.kuhn.tucker

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nodejs 创建一个静态资源服务器 +路由

0、补充 1、Node.js 创建的第一个应用 1、引入 http 模块 var http require("http"); 2、创建服务器 接下来我们使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 3000 端口。 函数通过 request, response 参数来接收和响应数据。 co…

python输出字体的大小_Python密码学编程:文件的加密与解密

在之前的章节中,编写的程序只能操作较少的信息,这些信息往往是以字符串的形式直接写在代码中的。但本章中的程序可以对整个文件进行加密和解密,文件的大小可以包括成千上万个字符。本章要点open()方法。读、写文件。write()、close()及read()…

电脑k歌软件_金麦客专业k歌app下载|金麦客专业k歌软件 手机安卓版v1.1.5.0 下载...

金麦客专业k歌app能够让用户通过手机直接连接电视,从而在安卓端实现金麦客点歌的目的,平台包含上万高清mv资源,让用户在歌唱时能够更好的代入氛围中,并且还能通过网络直接搜歌,从而在线下载播放,用户在演唱…

Nodejs ejs模板引擎

官方网站:https://www.npmjs.com/package/ejs 我们学的 EJS 是后台模板,可以把我们数据库和文件读取的数据显示到 Html 页面上面。它 是一个第三方模块,需要通过 npm 安装 npm install ejs –save 或者 cnpm install ejs --saveNodejs 中使用…

linux can总线接收数据串口打包上传_关于串口,你需要知道这些!!

嵌入式设备在电路中交换信息的时候必须通过共享一个通用的协议。现在嵌入式系统中已经定义了数百种通信协议来实现数据交换,一般来说可以将其分为两类:并行或串行。并行传输数据是指同时传输多个数据位,它们通常需要数据线和时钟线配合工作&a…

div里嵌套了img底部会有白块问题和图片一像素问题解决

div里嵌套了img底部会有白块 因为img默认是按基线(baseline)对齐的。对比一下图片和右边的p, q, y等字母,你会发现这三个字母的“小尾巴”和图片下方的空白一样高。下面这张图中的黑线就是那条基线。 解决方案:一:vertical-align: bottom&…

Nodejs 中的Get、Post

Get、Post 超文本传输协议(HTTP)的设计目的是保证客户端机器与服务器之间的通信。 在客户端和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。 GET - 从指定的资源请求数据。(一般用于获取数据&#…

电脑故障扫描修复软件_电脑故障分析:电脑安装软件提示没有权限的解决方法...

我们安装软件时如果没有权限就会导致安装故障,最近就有用户安装软件的时候出现了无法将数值写入键software的错误提示,请验证您对该键拥有足够的访问权限,或者与您的技术支持人员联系。那么遇到这种问题该怎么办呢?接下来就让我们…

Nodejs 路由封装 封装一个类似 express 的路由

1、模块化的方式封装 routes.js: const http require(http); const fs require(fs); const path require(path) const url require(url) const ejs require(ejs) let getFileMime function (extname) {// 把异步读取文件方法改为同步读取文件方法let data fs.readFileSy…

天翼网关 ddns设置_19,微服务网关之Zuul

这一次给大家分享微服务网关的相关知识,这个也是微服务架构中,相当重要的组件之一,来,下面听我徐徐道来1,API网关概览1.1,现有的交互模式存在什么问题?目前,是客户端会直接跟多个微服…

MongoDB 数据库创建、删除、表(集合) 创建删除、数据的增、删、改、查

一、 连接数据库 1、连接数据库 清屏命令:cls 查看所有数据库列表:show dbs 二、 创建数据库、查看、删除数据库 1、使用数据库、创建数据库 use itying 如果真的想把这个数据库创建成功,那么必须插入一个数据。 数据库中不能直接插入数据&#xff0…

从LeetCode 210. Course Schedule II 了解拓扑排序

问题简述 给定n节课,每节课按0~n-1编号。 在修某些课的时候需要有其它课的基础,必须先上先修课。现在用pair的形式来表示要先修的课,比如 [ [0,1], [1,2] ] 就表示在修课程1之前必须先修课程0,修课程2之前必须修课程1。现在需要给…

MongoDb 大数据查询优化、 MongoDB 索引、复合索引、唯一索引、 explain 分 析查询速度

一、索引基础 索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得 更快。 MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询优化技巧。 下面是创建索引的命令: db.user.ensureIndex…

ipconfig不是内部或外部_晶振有什么作用,如何选择合适的晶振,为什么有时候用内部晶振?...

一、 什么是晶振晶振,全名叫"晶体振荡器",它在电路当中起到产生振荡频率的作用,我们都知道,单片机可以看成是在时钟驱动下的时序逻辑电路,那么这个所需要的时钟就是晶振来产生,可以说它的单片机的…

Mongodb 账户权限配置

Mongodb 账户权限配置 1、第一步创建超级管理用户 use admindb.createUser({ user:admin, pwd:admin, roles:[{role:root,db:admin}] })2、第二步修改 Mongodb 数据库配置文件 默认路径:路径:C:\Program Files\MongoDB\Server\4.0\bin\mongod.cfg 打开…

笔记本电脑关机快捷键_2020年双十一值得入手的高性价比笔记本电脑外设推荐...

本文更新日期:2020.10.21 篇幅较长,请提前收藏关注电脑外设就是除主机外的大部分硬件设备都可称作外部设备,或叫外围设备,简称外设。计算机系统没有输入输出设备,就如计算机系统没有软件一样,是毫无意义的。…

MongoDB 的高级查询 aggregate 聚合管道

一、MongoDB 聚合管道&#xff08;Aggregation Pipeline&#xff09; 使用聚合管道可以对集合中的文档进行变换和组合。 实际项目&#xff1a;表关联查询、数据的统计。 MongoDB 中使用 db.COLLECTION_NAME.aggregate([{<stage>},...]) 方法 来构建和使用聚合管道。 先…

python函数在传参的时候,到底在传些什么?

C这样的语言用多了之后&#xff0c;在Python函数传递参数的时候&#xff0c;经常会遇到一个问题&#xff0c;我要传递一个引用怎么办&#xff1f; 比如我们想要传一个x到函数中做个运算改变x的值&#xff1a; def change(y):y 1x 1 print ("before change:", x) …

android学习笔记五。2、其他组件

一、ContentProvider内容提供者.是是android中一个应用向第三方共享数据的方式,android中的联系人,sms(短信记录)等都是通过这一方式来向外提供的 1、使用&#xff1a; 在应用中使用ContentProvider提供的数据并不是直接使用的,而是需要通过ContentResolver来实现的,ContentRes…

一维条形码识别c语言_条形码的优点

条形码是迄今为止最经济、实用的一种自动识别技术。条形码技术具有以下几个方面的优点A&#xff0e;输入速度快&#xff1a;与键盘输入相比&#xff0c;条形码输入的速度是键盘输入的5倍&#xff0c;并且能实现“即时数据输入”。B&#xff0e;可靠性高&#xff1a;键盘 输入数…