支持向量机SVM原理

news/2024/6/29 11:09:57 标签: 支持向量机, 算法, 机器学习

目录

支持向量机SVM原理

SVM原理

从线性分类器说起

SVM的目标是最大化分类间隔

转化为对偶问题求解


支持向量机SVM原理

 

 

 

 

 

 

 

 

 

 

【数之道】支持向量机SVM是什么,八分钟直觉理解其本质_哔哩哔哩_bilibili 

 

 

SVM是由Vapnik等人于1995年提出的,在之后的20多年里它都是最具影响力的机器学习算法之一。SVM不仅可以用于分类问题,还可以用于回归问题。在深度学习出现之前,基于高斯核的SVM在很多问题上一度取得了最好的效果。

SVM也因为具有较好的泛化性能,适合小样本等优点,被广泛应用于各种实际问题。

为了更好地理解下文,我们首先由简至繁地梳理一下支持向量机学习方法:

  • 线性可分SVM:当训练数据线性可分时,通过硬间隔(hard margin,什么是硬、软间隔下面会讲)最大化得到一个线性分类器,即硬间隔SVM。

  • 线性SVM:当训练数据非线性可分,但是可以近似线性可分时,通过软间隔(soft margin)最大化也可以得到一个线性分类器,即软间隔SVM。

  • 非线性SVM:当训练数据线性不可分时,通过使用核技巧(kernel trick)和软间隔最大化,可以得到非线性SVM。

SVM原理

SVM原理的数学推导过程冗长而复杂,后文我们一一拆解,首先简要总结如下:

 

  • 简单的SVM可以从线性分类器推导出来,根据最大化分类间隔的优化目标,线性可分问题中的SVM是可以求解的。

  • SVM优化问题是一个凸优化问题,并且满足Slater条件,因此强对偶成立,通过拉格朗日对偶可以将其转化成对偶问题求解。

  • 通过加入松弛变量和惩罚因子,可以将SVM推广到线性不可分的情况,具体做法是对违反约束条件的训练样本进行惩罚,得到线性不可分问题的SVM优化训练。

  • 通过核函数,可以将支持向量机转化成非线性模型,此时的对偶问题也是凸优化问题。

  • 支持向量机的求解,常用方法是SMO算法,它是一种分治法,每次选择两个变量进行优化。两变量优化问题是一个带等式和不等式约束条件的二次函数极值问题,可以求出解析解。并且这个问题也是凸优化问题,优化变量的选择通过KKT条件来确定。

从线性分类器说起

SVM起源于线性分类器,如果不使用非线性核函数,SVM就是线性分类器。线性分类器是维空间中的分类超平面,它将空间切分成两部分,分别对应于正样本和负样本所在的区域。对于二维空间,线性分类器是一条直线;对于三维空间,它是一个平面;超平面是在更高维空间的推广。

 

 

SVM的目标是最大化分类间隔

一般情况下,给定一组训练样本可以得到不止一个可行的线性分类器,如下图的例子。那么在所有可行的线性分类器中,什么样的分类器是好的呢?为了得到好的泛化性能,分类平面应该不偏向于任何一类,并且离两个类的样本都尽可能的远。这样,落在直线两边这个间隔内的样本都能被正确分类。这种最大化分类间隔的目标就是SVM的基本思想。SVM算法认为下图中的分类器A在性能上优于分类器B,其依据是A的分类间隔比B要大

 

SVM的目标是寻找一个分类超平面,不仅能正确的分类每一个样本,且要使得每一类样本中距离超平面最近的样本到超平面的距离尽可能的远。根据解析几何中点到平面的距离公式,每个样本离分类超平面的距离为: 

 

 

上式即支持向量机SVM的基本型,或者说是线性SVM最优化问题的数学描述。这是一个凸二次规划(convex quadratic programming)问题。

接下来,就要讨论如何利用最优化技术求解上述公式描述的问题。相信到这里的SVM并不难,不过接下来就会出现一些令人望而生畏的数学术语了,凸二次优化、拉格朗日对偶、KKT条件、Slater条件等等

 

转化为对偶问题求解

这里我们先复习一下求解最优化问题的方法,根据待优化问题是否有约束,以及约束的类型,可以把求解方式分为以下三种:

  1. 无约束优化问题:直接求导、最速下降法、共轭梯度法、牛顿法等;

  2. 等式约束优化问题:拉格朗日(Lagrange)乘子法;

  3. 不等式约束优化问题:KKT条件(Karush–Kuhn–Tucker这三个人名字的缩写)。

大家应该发现了,SVM的优化问题就是带有大量不等式约束的优化问题,属于最不容易求解的哪一类,那么如何求解呢?先说答案,可以用拉格朗日对偶将原问题(primal problem)转化成对偶问题(dual problem)来求解。之所以可以这么求解,还需要满足一些条件。

  1. 首先得是可以转化:因为SVM的优化问题问题是凸优化问题,且满足Slater条件,因此可以转为对偶问题。

  • 是凸优化问题,意味着可以用通行的数值优化算法得到全局最优解。

  • 凸规划指的是目标函数为凸函数,不等式约束函数也为凸函数,等式约束函数是仿射的(理解成是线性的也行)。

  • 满足Slater条件,意味着可以用拉格朗日对偶将其转化为对偶问题求解,对偶问题的求解难度远小于求解原问题(求解更高效)。

  • Slater条件告诉我们,在什么样的条件下凸优化问题与其Lagrange对偶问题是强对偶的,也就是什么条件下我们可以将原问题进行转化。所幸的是,这个条件告诉我们,一般情况下强对偶是成立的,因为该条件很弱。

  • Slater条件是指,如果满足原问题是凸优化问题,并且至少存在绝对一个绝对可行点,什么叫绝对可行点,就是一个可以让所有不等式约束都不取等号的可行点,那么就具有强对偶性。

  1. 其次是转化的条件:KKT条件是不等式约束的最优解的必要条件(对于凸规划,KKT条件就是充要条件了)。KKT条件将拉格朗日乘子法所处理的等式约束优化问题推广至不等式。在实际应用上,KKT条件(方程组)一般不存在解析解,有数值计算可供选用。

  2. 最后是转化的方法:拉格朗日乘子法的基本思想是把原始目标函数约束条件转化为新的目标函数的一部分,从而使有约束优化问题变成我们习惯的无约束优化问题。

总结一下,待解的SVM优化原问题是凸优化,且满足Slater条件,因此加上KKT条件,就可以用拉格朗日乘子法把它转化为对偶问题求解了。


http://www.niftyadmin.cn/n/4966634.html

相关文章

后端项目开发:分页功能的实现(Mybatis+pagehelper)

分页查询是项目中的常用功能&#xff0c;此处我们基于Mybatis对分页查询进行处理。 引入分页依赖 <!-- pagehelper --> <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId>…

React Antd form.getFieldsValue() 和 form.getFieldsValue(true) 有区别吗?

背景 突然发现 antd 的 getFieldsValue()是可以传一个 true 参数的&#xff0c;如题,React Antd form.getFieldsValue() 和 form.getFieldsValue(true) 有区别吗&#xff1f; 验证 确实不一样 结论 getFieldsValue 提供了多种重载方法&#xff1a; getFieldsValue(name…

【SpringCloud技术专题】「Gateway网关系列」(1)微服务网关服务的Gateway组件的原理介绍分析

为什么要有服务网关? 我们都知道在微服务架构中&#xff0c;系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢&#xff1f;难道要一个个的去调用吗&#xff1f;很显然这是不太实际的&#xff0c;我们需要有一个统一的接口与这些微服务打交道&#xf…

『C语言入门』分支和循环语句

文章目录 引言一、什么是语句&#xff1f;1.1表达式语句1.2赋值语句1.3函数调用语句1.4复合语句1.5空语句1.6控制语句 二、分支语句2.1 if语句2.1.1基本语法2.1.2使用else语句2.1.3嵌套if语句2.1.4多层if-else语句 2.2 switch语句2.2.1基本语法2.2.2示例2.2.3穿透 三、循环语句…

【Unity学习笔记】DOTween(1)基础介绍

本文中大部分内容学习来自DOTween官方文档 文章目录 什么是DOTween&#xff1f;DOSetOnTweenerSequenceTweenNested tween 初始化使用方式 什么是DOTween&#xff1f; DOTween是一个动画插件&#xff0c;Tween是补间的意思。这个插件以下简称DOT&#xff0c;DOT很方便使用&…

【seaweedfs】3、f4: Facebook’s Warm BLOB Storage System 分布式对象存储的冷热数据

论文地址 Facebook的照片、视频和其他需要可靠存储和快速访问的二进制大型对象(BLOB)的语料库非常庞大&#xff0c;而且还在继续增长。随着BLOB占用空间的增加&#xff0c;将它们存储在我们传统的存储系统-- Haystack 中变得越来越低效。为了提高我们的存储效率(以Blob的有效复…

Carla 学习笔记 1

使用系统 &#xff1a;ubuntu 22.04 Carla版本&#xff1a;0.9.13 安装过程&#xff1a;参考了预编译CARLA安装过程记录博客&#xff0c;虽然版本不太相同&#xff0c;但安装很顺利。预编译 CARLA 安装过程记录 Ubuntu 22.04 Carla 0.9.14_growing_dbs的博客-CSDN博客 参考资…

go学习之go的语法知识

文章目录 1.go语言开发注意事项2.golang常用的转义字符(escape char)3.golang开发常用的问题小结与提示&#xff1a; 4.go语言注释类型&#xff08;1&#xff09;.注释类型1&#xff09;行注释2&#xff09;块注释(多行注释) &#xff08;2&#xff09;使用细节&#xff1a;1&a…