机器学习-支持向量机

news2024/12/23 22:26:11

目录

一支持向量机

1.支持向量机SVM

2构建svm目标函数

3.拉格朗日乘法,kkt条件

拉格朗日乘法:

kkt条件

 对偶问题

 4.最小化SVM目标函数

kkt条件:

 对偶转换:

 5软间隔及优化

优化svm目标函数

 构造拉格朗日函数

对偶转换关系:

求解结果:

总结:

都看到这里了点个赞吧!


 

一支持向量机

1.支持向量机SVM

        支持向量机(support vector machines,SVM)是一种二分类算法,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,如果对应的样本特征少,一个普通的SVM就是一条线将样本分隔开,但是要求线到两个类别最近样本点的距离要最大。

对两类样本点进行分类,如下图,有a线、b线、c线三条线都可以将两类样本点很好的分开类,凭直觉就知道b线是最好的,那是为什么呢?根据概念,要求线到两个类别最近样本点的距离要最大。

 b线就是我们根据支持向量机要找到的分割线,这条线需要到两个类别最近的样本点最远,图上的距离就是d,由于这条线处于两个类别的中间,所以到两个类别的距离都是d。支持向量机SVM算法就是在寻找一个最优的决策边界(上图中的两条虚线)来确定分类线b,所说的支持向量(support vector)就是距离决策边界最近的点(上图中p1、p2、p3点,只不过边界穿过了这些点)。如果没有这些支持向量点,b线的位置就要改变,所以SVM就是根据这些支持向量点来最大化margin,来找到了最优的分类线(machine,分类器),这也是SVM分类算法名称的由来。

2构建svm目标函数

 以上面的二分类问题,假设支持向量机最终要找的线是l2,决策边界两条线是l1和l3,那么假设l2的方程为y2=wx+b,要确定l2直线,只需要确定w和b即可,此外,由于l1和l3是l2的决策分类边界线,一定与l2平行的,平行的意味着斜率不变,b改变。而且l2到l1和l3的距离是一样的所以l1和l3的方程可以写成:y1=wx+b-d,y3=wx+b+d。当然机器学习一般表示为wT⋅x+b=0wT⋅x+b=-c,wT⋅x+b=c

然后根据高中所学的点到点的距离公式,平行线的距离公式就可以推出d 

 我们希望的是决策边界上的样本点到l2直线的距离d越大越好。我们可以直接计算l1或l3上的点到直线l2的距离。这里是二维的,如果是n维的数据那么点到点的距离公式和平行线的距离公式就为:

 我们可以看到无论计算点到直线的距离还是两个平行线之间的距离,最终结果都是d。对于l1直线y=wx+b-d我们可以两边同时除以d结果不变,y/d=wx/d+b-1,也就是wx/d-y/d+b/d=-1,同理得l2和l3分别可变成wx/d-y/d+b/d=0,wx/d-y/d+b/d=1。带入距离公式:

 我们希望决策边界上的点到超平面l2距离d越大越好。我们将l3上方的点分类标记为“1”类别,将l1下方的点分类标记为“-1”类别,那么我们可以得到如下公式:

 &wTxi+b≥1y=1①式&wTxi+b≤-1y=-1②式

所以对于所有样本点我们需要在满足y⋅wTxi+b≥1条件下,最大化d=1/\left \| W \right \|,就是最小化w,等效于最小化二分之一\left \| W \right \|的平方,这样转换的目的就是为了后期优化过程中求导时方便操作,不会影响最终的结果,所以在支持向量机SVM中要确定一个分类线,我们要做的就是在y⋅wTxi+b≥1条件下最小化二分之一\left \| W \right \|的平方,记作:

 以上n代表样本总数,缩写s.t表示“Subject to”是“服从某某条件”的意思,上述公式描述的是一个典型的不等式约束条件下的二次型函数优化问题,同时也是支持向量机的基本数学模型,这里我们称支持向量机的目标函数。

3.拉格朗日乘法,kkt条件

拉格朗日乘法:

假设x=x1,x2,...,xn是一个n维向量,f(x)h(x)含有x的函数,我们需要找到满足h(x)=0条件下f(x)最小值,也就是将向量X带入h(x)中结果为0,带入f(x)中结果要最小,我们可以引入一个可以任意取值的自变量\lambda将两个函数h(x)和f(x)联系起来:

 L(x,λ)叫做Lagrange函数(拉格朗日函数),λ叫做拉格朗日乘子(其实就是系数)。令L(x,λ)对x的导数为0,对λ的导数为0,求解出x,λ 的值,那么x就是函数f(x)在附加条件h(x)下极值点。

以上就是拉格朗日乘数法,通俗理解拉格朗日乘数法就是将含有等式条件约束优化问题转换成了无约束优化问题构造出拉格朗日函数L(x,λ),让L(x,λ)对未知数x和λ进行求导,得到一组方程式,可以计算出对应的x和λ结果,这个x对应的f(x)函数值就是在条件h(x)下的最小值点。

kkt条件

        其实kkt条件和拉格朗日差不多,差别就在拉格朗日的条件是h(x)=0,而kkt是h(x)<=0,而kkt是解决不等式问题,拉格朗日是解决等式问题,也就是假设x=x1,x2,...,xn是一个n维向量,f(x)h(x)含有x的函数,我们需要找到满足h(x)≤0条件下f(x)最小值,针对上式,显然是一个不等式约束最优化问题,不能再使用拉格朗日乘数法,因为拉格朗日乘数法是针对等式约束最优化问题。

那我们可以考虑加入一个“松弛变量”a**2让条件h(x)≤0来达到等式的效果,即使条件变成h(x)+a2=0,这里加上a2的原因是保证加的一定是非负数,即:a2≥0,但是目前不知道这个a2值是多少,一定会找到一个合适的a2值使h(x)+a2=0成立。我们就把他变成等式约束了,就可以使用拉格朗日来操作了,只是多了a这个参数

然后分别对三个参数求导

 

 

从上式⑥式可知λa=0,我们分两种情况讨论:

  1. λ=0,a≠0

由于λ=0,根据③式可知,约束不起作用,根据①式可知h(x)≤0

  1. λ≠0,a=0

由于λ≠0,根据③式可知λ>0。由于a=0,约束条件起作用,根据⑤式可知,h(x)=0

综上两个步骤我们可以得到λ⋅h(x)=0,且在约束条件起作用时,λ>0,h(x)=0;约束条件不起作用时,λ=0,h(x)≤0

上面方程组中的⑥式可以改写成λ⋅h(x)=0。由于a**2≥0,所以将⑤式也可以改写成h(x)≤0,所以上面方程组也可以转换成如下:

 

以上便是不等式约束优化问题的KKTKarush-Kuhn-Tucker)条件,我们回到最开始要处理的问题上,根据③式可知,我们需要找到合适的xλ,a值使L(xλ,a)最小,但是合适的xλ,a必须满足KKT条件。

我们对③式的优化问题可以进行优化如下

满足最小化⑧式对应的x,λ值一定也要满足KKT条件,假设现在我们找到了合适的参数x值使f(x)取得最小值P【注意:这里根据①式来说,计算f(x)的最小值,这里假设合适参数x值对应的f(x)的值P就是最小值,不存在比这更小的值。】,由于⑧式中λh(x)一定小于等于零,所以一定有 

为了找到最优的λ值,我们一定想要L(x,λ)接近P,即找到合适的λ最大化L(x,λ),可以写成maxλL(x,λ),所以⑧式求解合适的x,λ值最终可以转换成如下 

 对偶问题

对偶问题是我们定义的一种问题,对于一个不等式约束的原问题(不懂的搜一下)

\lambda参数下的最大值,x参数下的最小值

 我们定义对偶问题为(对上面方程的求解等效求解下面方程)

 其实就是把min和max对调了一下,当然对应的变量也要变换

 对偶问题有什么好处呢?对于原问题,我们要先求里面的max,再求外面的min。而对于对偶问题,我们可以先求里面的min。有时候,先确定里面关于x的函数最小值,比原问题先求解关于λ的最大值,要更加容易解

 但是原问题跟对偶问题并不是等价的,这里有一个强对偶性、弱对偶性的概念,弱对偶性是对于所有的对偶问题都有的一个性质,弱对偶:

 其中 x*λ*是函数取最大值最小值的时候对应的最优解,也就是说,原问题始终大于等于对偶问题

 如果两个问题是强对偶的,那么这两个问题其实是等价的问题

 所有的下凸函数都满足强对偶性,也就是说所有下凸函数都满足上式

 

 4.最小化SVM目标函数

通过1.2小节我们知道SVM目标函数如下,s.t表示在什么条件之下

根据拉格朗日乘数法、KKT条件、对偶问题我们可以按照如下步骤来计算SVM目标函数最优的一组w值

kkt条件:

 因为上式子的条件是不等式约束,那么就的用kkt条件

根据kkt条件推出的的式子9带入SVM目标函数得:

 以上不等式转换成拉格朗日函数必须满足KKT条件,详见KKT条件,这里满足的KKT条件如下

 

计算分割线w和b的值:

 对偶转换:

由于原始目标函数是个下凸函数,根据1.3.3中对偶问题可知L(w,b,λ)一定是强对偶问题,所以可以将a式改写成如下

 针对b式,我们假设参数λ固定,使L(w,b,λ)对参数w和b进行求导得到如下

 

 进一步可以得到

 按照解方程组的思想,我们现在将以上计算得到的结果代入到b式中得到

 

我们可以发现以上公式经过转换只含有λ的方程求极值问题,但是λ含有λiλj…这些未知数(注意不是2个),那么我们要求的一组w如何得到呢?只要针对以上公式得到λ值后,我们可以根据c式进一步求解到对应的一组w值。针对上式求极值问题,我们常用 SMO(Sequential Minimal Optimization) 算法求解λiλj…

注意:d式中(xixj)代表两个向量的点积,也叫内积,例如:xi=(xi1,xi2),xj=(xj1,xj2)那么两个向量点积结果为xi1xj1+xi2xj2

 当λ>0时,一定有1-yiwTxi+b=0,对于这样的样本就属于支持向量点,就在分类边界上,我们将对应的w代入到yiwTxi+b=1中,然后两边乘yi,得到yi**2wTxi+b=yi。由于yi**2=1,所以:

 假设我们有S个支持向量,以上b的计算可以使用任意一个支持向量代入计算即可,如果数据严格是线性可分的,这些b结果是一致的对于数据不是严格线性可分的情况,参照后面的软间隔问题,一般我们可以采用一种更健壮的方式,将所有支持向量对应的b都求出,然后将其平均值作为最后的结果,最终b的结果如下

 5软间隔及优化

以上讨论问题都是基于样本点完全的线性可分,我们称为硬间隔如下图

如果存在部分样本点不能完全线性可分,大部分样本点线性可分的情况,如下图所示

 

那么我们就需要用到软间隔,相比于硬间隔的苛刻条件,我们允许个别样本点出现在间隔带里面

 

 即我们允许部分样本点不满足约束条件y⋅wTxi+b≥1

为了度量这个间隔软到何种程度,我们为每个样本引入一个“松弛变量ξi,ξi≥0,(中文:克西)加入松弛变量后,我们的约束条件变成y⋅wTxi+b≥1-ξi,这样不等式就不会那么严格,数据点在不同的约束条件下的情况如下

 

  1. 内部点:y⋅wTxi+b>1,即ξi=0
  2. 边界点:y⋅wTxi+b=1,即ξi=0
  1. 正确误差点:y⋅wTxi+b=1-ξi,即0<ξi<1
  2. 错误误差点:y⋅wTxi+b=1-ξi,即ξi≥1
优化svm目标函数

加入软间隔后我们的目标函数变成了

其中C是一个大于0的常数,这里在原有的目标函数中加入Ci=1nξi可以理解为错误样本的惩罚程度,我们希望在对应条件下min12w2+Ci=1nξi变小,对应的也是希望Ci=1nξi变小,当C为无穷大,ξi必然无穷小,这样的话SVM就变成一个完全线性可分的SVM。如果C为有对应的值时,ξi对应的会有一个大于0的值,这样的SVM就是允许部分样本不遵守约束条件。

接下来我们对新的目标函数h式求解最优化问题,步骤与1.4 SVM“硬间隔”完全线性可分步骤完全一

 构造拉格朗日函数

将h式目标函数改写成如下

构造拉格朗日函数如下

 

 上式中λi,μi是拉格朗日乘子,w,b,ξ是我们要计算的主问题参数

对偶转换关系:

        目标函数是个下凸函数,对应的拉格朗日函数复合强对偶性,所以可以根据强对偶向,将对偶问题转换为

 

 

 

 我们发现上式中求μ没有关系,但是为什么可以消掉是因为,所以在约束条件中一定有此条件,所以我们得到最终的目标函数可以写成如下

推导到以上之后,我们发现结果和硬间隔结果一样,参照1.4.3 d式,只是结果中多了约束条件C=λi+μi

求解结果:

同样我们也可以利用SMO算法对式L求解得到一组合适的λ值和μ值,由于综上所述,我们可以的到最终的w和b的值如下

 

 

这里得到的w和b虽然和硬分割结果一样,但是这是加入松弛变量之后得到的w和b的值,根据L式的条件C=λi+μiλi≥0,μi≥0,结合h式,C越大,必然导致松弛越小,如果C无穷大,那么就意味着模型过拟合,在训练SVM时,C是我们需要调节的参数。

那么确定w和b之后,我们就能构造出最大分割超平面:wT⋅x+b=0,新来样本对应的特征代入后得到的结果如果是大于0那么属于一类,小于0属于另一类

总结:

SVM向量机就是使用拉格朗日,kkt条件,对偶问题来求的线或超平面的参数W和b,从而对目标进行分类的一个算法

都看到这里了点个赞吧!

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

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

相关文章

orbslam2代码解读(4):loopclosing回环检测线程

书接上回&#xff0c;介绍完了局部建图线程&#xff0c;局部建图线程在进行局部BA之后&#xff0c;也会将新的关键帧mpLoopCloser放进回环线程的mlpLoopKeyFrameQueue容器中。所以这时候回环检测线程就根据这个新的关键帧来进行回环检测的操作。 回环检测的主要程序 // 线程主…

177.二叉树:从前序与中序遍历序列构造二叉树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

176.二叉树:从中序与后序遍历序列构造二叉树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

OpenGauss常操作

OpenGauss官网已经有很详细的说明了,但是对于新手而言还有一些需要注意的地方; 安装 yum一键安装; yum -y install libaio-devel yum -y install readline-devel yum -y install libnsl 单独创建用户和组; groupadd dbgroup useradd -g dbgroup omm passwd omm 取消打开文…

DriveWorld:一个预训练模型大幅提升检测+地图+跟踪+运动预测+Occ多个任务性能

1. 写在前面 以视觉为中心的自动驾驶技术近期因其较低的成本而引起了广泛关注&#xff0c;而预训练对于提取通用表示至关重要。然而&#xff0c;当前的以视觉为中心的预训练通常依赖于2D或3D预训练任务&#xff0c;忽视了自动驾驶作为4D场景理解任务的时序特征。这里通过引入一…

中国最受欢迎起名大师,国内顶级的姓名学大师是谁

唐王古镇龙泉边&#xff0c; 端午邀约凤凰山&#xff0c; 举国共享康宁日&#xff0c; 泉星福瑞天下安… 颜廷利敬献---福祐安康 中国最受欢迎起名大师&#xff0c;国内顶级的姓名学大师是谁&#xff1f;在齐鲁的心脏&#xff0c;济南的历史悠长的唐王古镇边&#xff0c;龙泉大…

香港优才是不是智商税?搞懂香港身份不后悔

很多中产家庭和明星通过不同方式获得香港身份&#xff0c;以享受其诸多优势&#xff0c;如子女教育和事业发展。明星如孙俪/邓超夫妇、汤唯、朗朗、章子怡和黄晓明等都获得了香港身份。 一、香港身份「优才计划」是什么&#xff1f;是否值得追求&#xff1f; 香港身份&#xf…

知识管理与集体创新——从企业到新型研发机构的实践与思考︱PMO大会

全国PMO专业人士年度盛会 鹏城实验室人力资源处人才发展主管&#xff0c;原华为供应链管理部知识管理负责人王万翎女士受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“知识管理与集体创新——从企业到新型研发机构的实践与思考”。大会将于6月29-…

springboot在线雅思学习平台 -计算机毕业设计源码44566

目 录 摘要 1 绪论 1.1系统背景 1.2课题背景及目的 2 1.3系统开发技术的特色 3 1.4 springboot框架介绍 3 1.5论文结构与章节安排 4 2 在线雅思学习平台系统分析 5 2.1 可行性分析 5 2.2 系统流程分析 5 2.2.1数据增加流程 5 2.2.2数据修改流程 6 2.2.3数据删除流程 6 2.3 …

Autoware 定位之EKF 滤波定位(四)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&…

网络抓取的最佳用户代理 2024 | 避免在抓取时被禁止使用 UA

你是经常进行网页抓取的人吗&#xff1f;你对你的隐私非常小心吗&#xff1f;那么你一定多次听说过“用户代理”。你知道什么是用户代理吗&#xff1f;它如何影响我们的在线生活呢&#xff1f; 请开始阅读&#xff0c;你会对这篇博客中的一切感兴趣&#xff01; 什么是用户代…

经典文献阅读之--FlashOcc(快速且内存高效的占用预测模块)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&…

调用华为API实现语音合成

目录 1.作者介绍2.华为云语音合成2.1 语音合成介绍2.2 华为语音合成服务2.3 应用场景 3. 实验过程以及结果3.1 获取API密钥3.2 调用语音合成算法API3.3 实验代码3.4 运行结果 1.作者介绍 袁斌&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2023级研究生 研究…

哥斯拉v4.01webshell实验

1、工具使用 生成有效载荷 选择载荷和加密器 放到对应web目录下&#xff0c;然后就可以添加管理 2 、JAVA_AES_RAW-JSPX/JSP 流量 第一组&#xff1a;请求34880&#xff0c;响应0 第二组&#xff1a;请求48&#xff0c;响应32 第三组&#xff1a;请求64&#xff0c;响应2576…

Navicat访问宝塔中的MySQL

开放数据库权限&#xff1a; 开放3306端口&#xff1a; 连接数据库&#xff1a; 对应好用户名与名称&#xff0c;要不会报错1024&#xff1a;

【每日一题】错误的集合

错误的集合 ✨审题&#xff1a;在一个1-n的数组中&#xff0c;会有一个元素重复&#xff0c;一个元素丢失&#xff1b;&#x1f449;目标;找到重复的元素和丢失的元素并放入一个数组中返还回去 ✨有没有想到单身狗问题的进阶版那个思路&#xff0c;找2个单身狗&#xff0c;一个…

升级和维护老旧LabVIEW程序

在升级老旧LabVIEW程序至64位环境时&#xff0c;需要解决兼容性、性能和稳定性等问题。本文从软件升级、硬件兼容性、程序优化、故障修复等多个角度详细分析。具体包括64位迁移注意事项、修复页面跳转崩溃、解决关闭程序后残留进程的问题&#xff0c;确保程序在新环境中的平稳运…

C++学习日记 | Lecture 7 函数进阶

资料来源&#xff1a;南科大 余仕琪 C/C Program Design LINK&#xff1a; CPP/week07 at main ShiqiYu/CPP GitHub7.1-default-arguments_哔哩哔哩_bilibili7.2-function-overloading_哔哩哔哩_bilibili7.3-function-templates_哔哩哔哩_bilibili7.4-function-pointers-an…

【课程总结】Day7:深度学习概述

前言 本篇文章&#xff0c;我们将通过示例来逐步学习理解导数、求函数最小值、深度学习的本质、以及使用numpy和pytorch实操深度学习训练过程。 线性回归 线性回归内容回顾 在《【课程总结】Day5(下)&#xff1a;PCA降维、SVD分解、聚类算法和集成学习》中&#xff0c;我们…

Diffusers代码学习-ControlNet(Inpaint)

对于Inpaint&#xff0c;需要一个初始图像、一个蒙版图像和一个描述用什么替换蒙版的提示词。ControlNet模型允许添加另一个控制图片来调节模型。让我们用Inpaint蒙版来调整模型。这样&#xff0c;ControlNet可以使用修复掩模作为控件来引导模型在蒙版区域内生成图像。 # 以下代…