机器学习笔记13——支持向量机(SVM)模型原理以及python实现案例

2023-11-04

1、概述

\quad \quad 支持向量机(support vector machines,SVM)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是 间隔最大化, 可以形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题,支持向量机的学习算法是求解凸二次规划的最优化算法。。由简至繁的模型包括:

  • 当训练样本线性可分时,通过硬间隔最大化,学习一个线性可分支持向量机,又称为硬间隔支持向量机;
  • 当训练样本近似线性可分时,通过软间隔最大化,学习一个线性支持向量机,又称为硬软间隔支持向量机;
  • 当训练样本线性不可分时,通过核技巧和软间隔最大化,学习一个非线性支持向量机;

2、基本概念

2.1 线性可分

\quad \quad 可以很容易就在数据中给出一条直线将两组数据点分开。

在这里插入图片描述
\quad \quad 在二维空间上,两类点被一条直线完全分开叫做线性可分。具体定义可见感知机那一篇文章。

2.2 函数间隔和几何间隔

【函数间隔定义】:

\quad \quad 对于给定的训练数据集T和超平面(w,b)[ w x + b = 0 wx+b=0 wx+b=0]:

  • 定义超平面(w,b)关于样本点 ( x i , y i ) (x_i,y_i) (xi,yi)的函数间隔为:

γ i ^ = y i ( w x i + b ) \hat{\gamma_i}=y_i(wx_i+b) γi^=yi(wxi+b)

  • 定义超平面(w,b)关于训练数据集T的函数间隔为超平面(w,b)关于T中所有样本点 ( x i , y i ) (x_i,y_i) (xi,yi)的函数间隔之最小值,即

γ ^ = m i n i = 1 , . . , N γ i ^ \hat{\gamma}=\mathop{\mathbb{min}}\limits_{i=1,..,N}\hat{\gamma_i} γ^=i=1,..,Nminγi^

【函数间隔意义】:

\quad \quad 函数间隔可以表示分类预测的正确性及确信度,在超平面 w x + b = 0 wx+b=0 wx+b=0确定的情况下, ∣ w ⋅ x + b ∣ \left | w\cdot x+b \right | wx+b能够相对地表示点x距离超平面的远近,而 w ⋅ x + b w\cdot x+b wx+b的符号与类标记y的符号是否一致能够表示分类是否正确,所以可以用 y ( w ⋅ x + b ) y(w\cdot x+b) y(wx+b)来表示分类的正确性及确信度,这就是函数间隔。

【函数间隔缺陷】:

\quad \quad 分离超平面 w x + b = 0 wx+b=0 wx+b=0,只要成比例的改变法向量 w w w和b,例如将他们改变 2 w 2w 2w和2b,超平面并没有改变,但函数间隔却变为原来的2倍。这一事实,可以对分离超平面的法向量 w w w加某些约束,如规范化, ∣ ∣ w ∣ ∣ = 1 ||w||=1 w=1,使得间隔是确定的,这时函数间隔就变为几何间隔(见下文)。

【几何间隔定义】:

\quad \quad 对于给定的训练数据集T和超平面(w,b):

  • 定义超平面(w,b)关于样本点 ( x i , y i ) (x_i,y_i) (xi,yi)的几何间隔为:

γ i = y i ( w ∣ ∣ w ∣ ∣ x i + b ∣ ∣ w ∣ ∣ ) \gamma_i=y_i(\frac{w}{||w||}x_i+\frac{b}{||w||}) γi=yi(wwxi+wb)

  • 定义超平面(w,b)关于训练数据集T的几何间隔为超平面(w,b)关于T中所有样本点 ( x i , y i ) (x_i,y_i) (xi,yi)的几何间隔之最小值,即
    γ = m i n i = 1 , . . , N γ i \gamma=\mathop{\mathbb{min}}\limits_{i=1,..,N}\gamma_i γ=i=1,..,Nminγi
    其中 ∣ ∣ w ∣ ∣ ||w|| w L 2 L_2 L2范数。

【函数间隔与几何间隔的关系】:

γ i = γ ^ i ∣ ∣ w ∣ ∣ \gamma_i=\frac{\hat\gamma_i}{||w||} γi=wγ^i
γ = γ ^ ∣ ∣ w ∣ ∣ \gamma=\frac{\hat\gamma}{||w||} γ=wγ^

如果 ∣ ∣ w ∣ ∣ = 1 ||w||=1 w=1,那么函数间隔和几何间隔相等。如果超参数w和b成比例的变化(超平面没有改变),函数间隔也按比例变化,而几何间隔不变。

2.3 间隔最大化(硬间隔最大化)

\quad \quad 支持向量机学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。对线性可分的数据集而言,线性可分分离超平面有无穷多个(等价于感知机),但是几何间隔最大的分离超平面是唯一的。

\quad \quad 间隔最大化的直观解释是:对训练数据集找到几何间隔最大化的超平面意味着以充分大的确信度对训练数据进行分类。
也就是说,不仅能够将正负实例点分开,而且对于离超平面最近的点也以尽可能大的确信度将它们分开,这样的超平面会有很好的泛化能力。

1、最大间隔分离超平面

  • 两类样本分别分割在该超平面的两侧;
  • 两侧距离超平面最近的样本点到超平面的距离被最大化了。

如何求几何间隔最大的分离超平面,可以表示为约束最优化问题:
在这里插入图片描述

即我们希望最大化超平面(w,b)关于训练数据集的几何间隔 γ \gamma γ,约束条件表示是超平面(w,b)关于每个训练样本点的几何间隔至少是 γ \gamma γ

考虑几何间隔和函数间隔的关系以及最优化问题与常数无关的情况,目标函数可以转换为:
在这里插入图片描述
\quad \quad 函数间隔 γ ^ \hat{\gamma} γ^的取值并不影响最优化问题的解。事实上,假设将w和b按比例改变为 λ w \lambda w λw λ b \lambda b λb,这时函数间隔变为 λ γ ^ \lambda\hat{\gamma} λγ^。函数间隔的这一改变对上面最优化问题的不等式约束没有影响,对目标函数的优化也没有影响,也就是说,它产生一个等价的最优化问题。这样,就可以取 γ ^ = 1 \hat{\gamma}=1 γ^=1。将 γ ^ = 1 \hat{\gamma}=1 γ^=1代入上面的最优化问题,注意到最大化 1 ∣ ∣ w ∣ ∣ \frac{1}{||w||} w1和最小化 1 2 ∣ ∣ w ∣ ∣ 2 \frac12||w||^2 21w2是等价的,于是就得到下面的线性可分支持向量机学习的最优化问题:
在这里插入图片描述

上述是一个凸二次规划问题。

这便是 支持向量机的基本型

2、线性可分训练数据集的最大间隔分离超平面是存在且唯一的

2.4 凸优化问题

\quad \quad 凸优化问题是指约束最优化问题
在这里插入图片描述

\quad \quad 其中,目标函数 f ( w ) f(w) f(w)和约束函数 g i ( w ) g_i(w) gi(w)都是 R n R^n Rn上的连续可微的凸函数,约束函数 h i ( w ) h_i(w) hi(w) R n R^n Rn上的仿射函数。
\quad \quad 当目标函数 f ( w ) f(w) f(w)是二次函数且约束函数 g i ( w ) g_i(w) gi(w)是仿射函数时,上述凸最优化问题成为凸二次规划问题。

2.5 支持向量和间隔边界

【支持向量】
\quad \quad 在线性可分情况下,训练数据集的样本点中与分离超平面距离最近的样本点的实例称为支持向量。支持向量是满足上述约束条件等号成立即 y i ( w x i + b ) − 1 = 0 y_i(wx_i+b)-1=0 yi(wxi+b)1=0的点。

  • y i = + 1 y_i=+1 yi=+1的正例点,支持向量在超平面 H 1 : w x + b = 1 H_1:wx+b=1 H1:wx+b=1上。

  • y i = − 1 y_i=-1 yi=1的负例点,支持向量在超平面 H 2 : w x + b = − 1 H_2:wx+b=-1 H2:wx+b=1上。

\quad \quad 如图7.3 所示,在 H 1 H_1 H1 H 2 H_2 H2上的点就是支持向量

在这里插入图片描述

【间隔边界】
\quad \quad 超平面 H 1 : w x + b = 1 H_1:wx+b=1 H1:wx+b=1 H 2 : w x + b = − 1 H_2:wx+b=-1 H2:wx+b=1称为间隔边界。
【间隔】
\quad \quad H 1 H_1 H1 H 2 H_2 H2之间的距离称为间隔即两个异类支持向量到超平面的距离之和: 2 ∣ ∣ w ∣ ∣ \frac{2}{||w||} w2

在这里插入图片描述

2.6 对偶问题

\quad \quad 式(1)是一个 带约束的凸二次规划(convex quadratic programming)问题(凸问题就意味着必定能求到全局最优解,而不会陷入局部最优)。对这样一个问题,可以直接用现成的优化计算包求解,但这一小节介绍的是一种更高效的方法。

\quad \quad 首先为式(1)的每条约束添加拉格朗日乘子 a i ≥ 0 a_i \geq 0 ai0 (对应m个样本的m条约束),得到该问题的拉格朗日函数:

L ( w , b , a ) = 1 2 ∥ w ∥ 2 + ∑ i = 1 m a i ( 1 − y i ( w x i + b ) ) L(w,b,a)= \frac{1}{2}∥w∥^2+\sum_{i=1}^ma_i(1-y_i(wx_i+b)) L(w,b,a)=21w2+i=1mai(1yi(wxi+b))

根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题:
m a x a m i n w , b L ( w , b , a ) max_amin_{w,b}L(w,b,a) maxaminw,bL(w,b,a)
详情

3、线性可分支持向量机

3.1定义

\quad \quad 给定线性可分训练数据集,通过间隔最大化或等价地求解相应的凸二次规划问题学习得到的分离超平面为
w ∗ x + b ∗ = 0 w^* x+b^*=0 wx+b=0
以及相应的分类决策函数
f ( x ) = s i g n ( w ∗ x + b ∗ ) f(x)=sign(w^*x+b^*) f(x)=sign(wx+b)
称为线性可分支持向量机

3.2 优化目标

1、线性可分支持向量机原始的最优化目标

在这里插入图片描述

推导:
在这里插入图片描述
如图所示,根据支持向量的定义(离超平面最近的点)我们知道,支持向量到超平面的距离为 d,其他点到超平面的距离大于 d。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、线性可分支持向量机的对偶最优化目标:

在这里插入图片描述

其中, α i \alpha_i αi为拉格朗日乘子。

在这里插入图片描述
算法:
在这里插入图片描述
在这里插入图片描述

推导:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将步骤三的目标函数由极大转换成极小,就得到对偶最优化目标:

4、线性支持向量机

4.1定义

\quad \quad 对于给定的线性不可分的训练数据集,通过求解相应的凸二次规划问题,即软间隔最大化问题(7.32)~(7.34),得到的分离超平面为
w ∗ x + b ∗ = 0 w^* x+b^*=0 wx+b=0
以及相应的分类决策函数
f ( x ) = s i g n ( w ∗ x + b ∗ ) f(x)=sign(w^*x+b^*) f(x)=sign(wx+b)
称为线性支持向量机

\quad \quad 线性不可分的线性支持向量机的学习问题即凸二次规划问题(原问题):
在这里插入图片描述
其中, ξ i \xi_i ξi为松弛变量

5、非线性支持向量机

\quad \quad 事实上,大部分时候数据并不是线性可分的,这个时候满足这样条件的超平面就根本不存在。在上文中,我们已经了解到了SVM处理线性可分的情况,那对于非线性的数据SVM咋处理呢?对于非线性的情况,SVM 的处理方法是选择一个核函数 κ(⋅,⋅) ,通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。

\quad \quad 具体来说,在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。如图所示,一堆数据在二维空间无法划分,从而映射到三维空间里划分:

在这里插入图片描述
\quad \quad 用线性分类方法求解非线性分类问题一般分为两步:

  • 首先使用一个变换将原空间的数据映射到新空间;
  • 然后在新空间里用线性分类方法从训练数据中学习分类模型。

\quad \quad 核技巧就属于这样的方法。

5.1 核函数

5.1.1 定义

\quad \quad χ \chi χ是输入空间(欧式空间 R n R^n Rn的子集或离散集合),又设 H H H为特征空间(希尔伯特空间),如果存在一个从 χ \chi χ H H H的映射
ϕ ( x ) : χ → H \phi(x):\chi\rightarrow{}H ϕ(x):χH
使得对所有 x , z ∈ χ x,z\in\chi x,zχ,函数 K ( X , Z ) K(X,Z) K(X,Z)满足条件
K ( X , Z ) = ϕ ( x ) ⋅ ϕ ( z ) K(X,Z)=\phi(x)\cdot\phi(z) K(X,Z)=ϕ(x)ϕ(z)
则称 K ( X , Z ) K(X,Z) K(X,Z)为核函数, ϕ ( x ) \phi(x) ϕ(x)为映射函数,式中 ϕ ( x ) ⋅ ϕ ( z ) \phi(x)\cdot\phi(z) ϕ(x)ϕ(z) ϕ ( x ) \phi(x) ϕ(x) ϕ ( z ) \phi(z) ϕ(z)的内积。

5.1.2 核技巧

\quad \quad 核技巧的想法是:在学习与预测中只定义核函数K(x,z),而不显式定义映射函数 ϕ ( x ) \phi(x) ϕ(x)

为什么定义核函数,而不显式的定义映射函数?

1)要求解的目标函数里面是输入实例 x i x_i xi x j x_j xj的内积形式,而核函数的定义形式就是将原始输入空间的实例映射到高纬的特征空间后的实例的内积。所以可以直接定义核函数不用定义映射函数。
2)映射后的特征空间一般是高维的,在其空间内求内积不太容易。并且对于给定的核函数K(x,z),特征空间与映射函数的取法并不唯一。

核技巧在支持向量机中的应用

\quad \quad 在线性支持向量机的对偶问题中,无论是目标函数还是决策函数(分离超平面)都只涉及输入实例与实例之间的内积。在对偶问题的目标函数中的内积 x i ⋅ x j x_i \cdot x_j xixj 可以用核函数 K ( x i , x j ) = ϕ ( x i ) ⋅ ( x j ) K(x_i,x_j)=\phi(x_i) \cdot( x_j) K(xi,xj)=ϕ(xi)(xj)来代替。此时对偶问题的目标函数成为:
W ( α ) = 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i , x j ) − ∑ i = 1 N α i W(\alpha)=\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_jK(x_i,x_j)-\sum_{i=1}^N\alpha_i W(α)=21i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαi

同样分类决策函数中的内积也可以用核函数代替,而分类决策函数式成为:

在这里插入图片描述

\quad \quad 这等价于经过映射函数 ϕ \phi ϕ将原来的输入空间变换到一个新的特征空间,将输入空间中的内积 x i ⋅ x j x_i \cdot x_j xixj 变换为特征空间中的内积 ϕ ( x i ) ⋅ ( x j ) \phi(x_i) \cdot( x_j) ϕ(xi)(xj),在新的特征空间里从训练样本中学习线性支持向量机。当映射函数是非线性函数时,学习到的含有核函数的支持向量机是非线性分类模型。

\quad \quad 在核函数K(x,z)给定的条件下,可以利用解线性分类问题的方法求解非线性分类问题的支持向量机。学习是隐式地在特征空间进行的,不需要显式的定义特征空间和映射函数。这样的技巧称作核技巧。

5.1.3 常用核函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2 非线性支持向量分类机

5.2.1 定义

从非线性分类训练集,通过核函数与软间隔最大化,或凸二次规划(7.95)~(7.97),学习得到的分类决策函数:

f ( x ) = s i g n ( ∑ i = 1 N α i ∗ y i K ( x , x i ) + b ∗ ) f(x)=sign(\sum_{i=1}^N\alpha_i^*y_iK(x,x_i)+b^*) f(x)=sign(i=1NαiyiK(x,xi)+b)
称为非线性支持向量, K ( x , z ) K(x,z) K(x,z)是正定核函数。

5.2.2 算法

在这里插入图片描述

参考资料:
1、https://zhuanlan.zhihu.com/p/77750026
2、https://blog.csdn.net/c406495762/article/details/78072313
3、https://blog.csdn.net/TeFuirnever/article/details/99458334
4、

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习笔记13——支持向量机(SVM)模型原理以及python实现案例 的相关文章

随机推荐

  • 快速入门jest单元测试、mock测试、dom测试、快照测试

    写在前面 本文参考然叔老师的全栈架构成长计划课程中的单元测试部分 对课程学习做了总结 有兴趣的可以去B站搜索 全栈然叔 能够学习到比较前沿的东西 一 单元测试 JavaScript 缺少类型检查 编译期间无法定位到错误 单元测试可以帮助你测
  • 无向图的邻接矩阵

    无向图的邻接矩阵的定义 表示法 度 定义 逻辑结构分为两部分 V和E集合 其中 V是顶点 E是边 因此 用一个一维数组存放图中所有顶点数据 用一个二维数组存放顶点间关系 边或弧 的数据 这个二维数组称为邻接矩阵 邻接矩阵又分为有向图邻接矩阵
  • 多选框和按钮

    p 爱好 p
  • maven仓库地址https://mvnrepository.com/

    之前百度搜maven 前几个就能找到这个网址 现在不容易搜到了 记录一下 maven公共仓库地址 https mvnrepository com
  • response.setContentType()的作用及参数(转载)

    response setContentType MIME 的作用是使客户端浏览器 区分不同种类的数据 并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据 例如web浏览器就是通过MIME类型来判断文件是GIF图片 通过MIM
  • JVM 中的垃圾回收算法详解,一文读懂GC回收机制

    JVM 中的垃圾回收算法 垃圾回收是一种自动化的内存管理方式 它可以监测并清除内存中不再使用的对象 使得内存空间可以被回收并重新利用 在 JVM 中 垃圾回收器负责管理虚拟机的内存分配和回收 JVM 中常见的垃圾回收算法主要包括 标记 清除
  • MinGW-W64安装说明

    Architecture Threads Exception 运行平台 多线程 异常处理 Architecture 说明 i686 32位系统 x86 64 64位系统 Threads 说明 posix 使用std thread创建线程 w
  • jdk安装遇见的问题

    问题 安装jdk后 在cmd中输入 java version 显示了JDK的版本 但是输入 javac version 显示 javac 不是内部命令 说明CLASSPATH的环境变量不正确 解决办法 设置CLASSPATH为 JAVA H
  • Tensorflow-serving部署模型到服务器

    Tensorflow serving部署模型到服务器 1 启动docker systemctl start docker 2 查看已经下载的镜像 docker images 如果没有 那么拉取镜像 docker pull tensorflo
  • 【Java】BigDecimal使用不当导致的生产事故

    BigDecimal使用不当导致的生产事故 背景 事故详情 分析 总结 背景 我们在使用金额计算或者展示金额的时候经常会使用 BigDecimal 也是涉及金额时非常推荐的一个类型 BigDecimal 自身也提供了很多构造器方法 这些构造
  • Nginx+Tomcat(多实例)实现动静分离和负载均衡

    一 Tomcat 多实例部署 1 在安装好jdk环境后 添加两例tomcat服务 解压安装包 cd opt tar zxvf apache tomcat 9 0 16 tar gz 移动并复制一例 mkdir usr local tomca
  • vue使用高德地图获取定位

    先在vue config js中配置 module exports lintOnSave false configureWebpack externals AMap AMap
  • git命令之追溯文件修改记录:git blame 和 git show【笔记】

    目录 1 git blame 1 1 git blame用法 1 2 举例 2 git show 2 1 git show命令详解 语法 参数 说明 2 2 显示提交详情 语法 案例 2 3 显示标签详情 语法 案例 2 4 显示某次提交某
  • C++编写一个返回字符串的函数

    创建一个函数 函数返回一个指针 函数接受两个参数 一个字符 一个数字 使用new创建一个长度与数字参数相等的字符串 将每个元素都初始化为该字符 返回指向新字符串的指针 include
  • 博图V13+PLCSIM+ NettoplcsimS7o121+KEPServer模拟PLC运行及与上位机通信

    在做此相关的项目 之前一直要到工程现场才可以去开发 验证上位机程序 一直想在本地的笔记本电脑就能够完成模拟 现在用此技术就可以实现了 直接模拟运行PLC程序 然后通过NettoplcsimS7o121与KEPServer通信 这样就可以写上
  • 年轻人是应该先存钱还是先提高生活质量

    春节就快到了 大家是不是准备在这次的年货打折季中大大出手呢 也许你想先用花呗或者信用卡买买买 也有可能想把用来买东西的钱一点一点攒下来 虽然这二者都是为自己投资 但实际上有着本质上的区别 那究竟是应该先存钱还是先提高生活质量呢 先存钱还是先
  • ideavim 使用分享

    ideavim 使用分享 ideavim 使用 ideavim介绍 ideavim是JetBrains官方开发的模拟vim插件 熟练ideavim的人可以更快的进行操作 大部分操作都可以用键盘来代替 纯vim也能进行更高效的开发 但是一款适
  • Linux:Gentoo系统的安装笔记(一)

    这次我选择安装Gentoo 用来做我学习的笔记 这次我是使用虚拟机安装Gentoo 一是方便操作 二是可以看着手册 一边看一边操作 严格按照手册上的步骤执行 一般是不会出现问题的 查看手册最好学会看英文原版的 因为更新快 中文原版的可能很久
  • 指针指向字符串

    2017 06 27 原来一直没有用过这种用法 char p hello 这种方法是不能使用指针p去修改字符串内容的 一般来说 我理解的只有加上const修饰符才可以 实际上两者是等价的 这里的原因是 这个字符串本身放置在只读的内存空间里
  • 机器学习笔记13——支持向量机(SVM)模型原理以及python实现案例

    支持向量机 SVM 1 概述 2 基本概念 2 1 线性可分 2 2 函数间隔和几何间隔 2 3 间隔最大化 硬间隔最大化 2 4 凸优化问题 2 5 支持向量和间隔边界 2 6 对偶问题 3 线性可分支持向量机 3 1定义 3 2 优化目