支持向量机(三)序列最小最优化算法(SMO)

序列最小最优化算法(SMO算法) 前面三篇我已经谈了谈我对支持向量机的理解,推到了各类支持向量机的对偶算法,这一篇的SMO算法主要是用来解这个对偶问题: 阅读详情

        在支持向量机(一)和支持向量机(二)两篇文章中,我们分别介绍了线性可分的支持向量机和线性向量机,从中可知,我们最终的目的是要计算得出支持向量对应的拉格朗日乘子α,但是我们并没有说怎么算。这篇文章主要介绍了序列化最小优化算法,用来计算α。在介绍之前我们先简单介绍一下其中用到的核函数。

  1. 核函数

        首先我们看下面的两个图:

                                                            

        我们看上面的两个图,右边的明显是可以用一个直线将数据分开,那就是线性可分的,而左边的图是用一个曲线将数据分开的,这个问题就称之为非线性可分的问题。而非线性问题往往不好求解,而我们希望的就是能用线性求解的问题来求解非线性的问题,方法就是进行一个变换,将非线性问题变成线性问题。

        再看上面左图,是个椭圆的形式,给出椭圆的函数,这个函数明显是非线性函数,下面我们将其做变换令:

                                                                              

                                                                             

        然后我们将其原式替换,得到:

                                                                

        可以看到经过简单的变换,将原来的非线性问题转化为了式1的线性问题。这就是核技巧的基本思想。

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

        进行数据映射的话,我们就用到了核函数:

                                                              

        其中K(x,z)就是核函数,φ(x)成为映射函数,就是将原空间映射到新空间的映射方式,对应上面的例子φ(x)=x2,φ(x)∙φ(z)就是两个映射的內积。

        下面我们再看先线性支持向量机的目标函数:

                                                

        我们将式2中的xi和xj的內积替换成映射的內积,即映射后的求解最优值问题:

                                                  

        然后求解最优解

        线性支持向量机的最终分类函数形式如下:

                                            

        同样将xi和x的內积形式替换为K(xi,x)得:

                                         

        我们常用的核函数有:

       (1)多项式核函数

                                          

       对应的是支持向量机是一个p次多项式分类器,在此情形下,分类决策函数是:

                                

        (2)高斯核函数

                                  

      对应的支持向量机是高斯径向基函数分类器,在此情况下分类决策函数是

                          

       (3)字符串核函数

        这个核函数不做介绍,有兴趣可以自己看。李航《统计学习方法》中有详细介绍。

       

2.序列最小最优化算法

        支持向量机的学习问题是求解凸二次规划问题,其目的要求N个拉格朗日乘子,序列最小最优化算法(SMO),选择两个变量,固定其他变量,然后针对这两个变量构建一个二次规划问题;这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,应为这会使得原始二次规划问题的目标函数值变的更小;更重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。

        假设我们选择作为选择的两个变量进行求解,然后代入目标问题:

                            

                          条件:

                                  ,

        每次求解,我们先固定其中一个,假设为α1,然后另一个用约束条件自动确定,下面我们先介绍一下关于两个变量的约束问题。这个约束可以用二维空间上的图形表示:

                               

                                                                图1

       图1是表示和的等式约束问题,使得在平行于盒子[0,C]×[0,C]的对角直线上。我们看式3,中的y1和y2只是用来判断是否分类正确,1表示正确,-1表示不正确,所以式3就可以简化成(y1≠y2),(y1=y2),因为我们是固定其他α的,所以式3中右边那一坨我们就可以用k来代替了。在每次求这一组解的时候,我们是先确定一个α1,然后通过约束问题确定α2,这样其实就是变成了一个单变量的最优化问题。

        假设问题的初始可行解是,最优解是,并且假设在沿着约束方向未经剪辑时α2的最优解是,这个解是指每次经过计算得来的新的α2,但这个解可能是违反约束条件的,然后经过约束条件约束调整后才是,而其约束条件是:

                                                

        L和H是上下界,其中0<=L,H<=C,L<=H。L与H也是图1中所在的对角线段断点的界。如果y1≠y2,则如图1左侧所示:

                                               

        如果是y1=y2,则如图1右侧的图所示:

                                              

        为什么得出上面两个计算的表达式,我们可以将图1中的图像函数化,α2是因变量,所以我们得出函数α2-α1=k(这里的k不要和图1中的k混为一样,是不一样的,按理说应该是符号相反的),k即为截距,结合0<=α2<=C,L≤α2new≤H两个条件,我们就可以得出上面求L和H的表达式;由于L和H的值是动态变化的,并且是范围是不断缩小的,所以我们就可以通过这个迭代的过程求出对应的α。

        下面就是具体的计算过程,以及计算所用到的一些函数

        首先记:

                                     

        令

                        

        Ei表示在α1和α2情况下,输入的xi对应的预测值和实际值之间的差值。

        沿着约束方向未经剪辑时的解是:

                              

        其中

                           

         式4是要通过公式推理出来的,具体的推理过程在李航《统计学习方法》中有详细过程。α2new,unc是未经剪辑过的值,就是直接通过公式计算出来的,下面对其进行剪辑,也就是通过约束条件对其进行约束:

                               

        由 求得 ,是

                         

        对于式6,当y1和y2不同号时( ),α1和α2的变化量是相同的,但是方向是相反的(一个值减小,一个值增加);当y1和y2同号时(),α1和α2的变化量是相同的,方向也是相同的(同时增加或者减少某个值)。因为参考图1,对应的直线是需要在和对角线平行的方向上平移的,这就规定了这两种情况下α1和α2的变化关系。

        在SMO中我们每次计算都要选择两个变量进行优化,其中至少一个是违反KKT条件的。下面我们进行第一个变量的选择。

        SMO选择第一个变量的过程称为外层循环。外层循环下训练样本中选取违反KKT条件最严重的的样本点,并将其对应的变量作为第一个变量。具体的检验训练样本点(xi,yi)是否满足KKT条件,即

                             
                        

                        

         其中的。怎么得出上面的KKT条件,首先,然后可以集合我的另一篇文章支持向量机(二)中的支持向量相关解释理解。该检验是在ε范围内进行的,在检验过程中,外层循环首先比那里所有满足条件的 样本点,即在间隔边界上的点,检验它们是否满足KKT条件。如果这些样本点都满足KKT条件,那么遍历整个训练集,检验他们是否满足KKT条件。

        接下来我们进行第二个变量的选择。SMO称第二个变量的选择过程为内层循环。假设在外层循环中已经找到了第一个变量α1,那么选择第二个变量α2的标准是希望其有足够大的变化,这样才可以使其下降速度够快。由式4和式5可知 是依赖的,所以一种简单的做法是选择α2,使其对应的最大。因为α1是已经定了的,E1也是定了的,所以如果E1是正的,那么选择最小的Ei作为E2,如果E1是负的,那么选择最大的Ei作为E2。所以要实现这个过程,就需要提前计算所有的Ei并将其保存起来。

        在特殊情况下,如果内存循环通过以上方法选择的α2不能使木变函数有足够的的下降,那么遍历在间隔边界上的支持向量点,以此将其对应的变量作为α2试用,直到目标函数有足够的下降。如果还是找不到,那么就编列整个训练集。如果还是找不到,就放弃前面选择的α1,重新选择α1开始。

        下面我们进行阈值b和差值Ei的计算。每次计算完两个变量后,都要重新就计算b值的。当时,由KKT条件可知:

                                                             

       那么可以得到:

                                    

        又由E1的定义可知,

                                

我们将式7和式8联立,得到如下表达式:

                                    

        公式中E1、K11、K21都是可以通过前面提到的公式计算出来的,和是可以通过内外层循环(变量选择过程)找出来的,和也是可以通过上面的过程计算出来的。

        同样,如果,那么:

                                

       如果和同时,那么说明都在间隔边界上,所以;如果和是0或者C,那么不在间隔边界上,则以及他们之间的数都是符合KKT条件的阈值,这是选择他们的中点作为bnew。

        每次优化完两个变量的时候,我们需要重新更新E值以及他们对应的α:

                                 

        S是所有支持向量xi的集合。

        下面给出SMO算法的步骤:

       输入:训练数据集T={(x1,y1),(x2,y2),…,(xn,yn)},其中yi={-1,+1},精度ε。

        输出近似解:

  1. 取初始值,令k=0;
  2. 选取优化变量,解析求将两个变量的最优化问题,求得最优解,更新α为
  3. 若在精度范围内满足停止条件:

                          

       其中

                   

        则转4;否则令k=k+1,转2;

      4.取α=α(k+1)

        怎么理解上面的停止条件,是最优化问题中的条件决定的。这个只是说满足条件,但是不一定所有的样本点分类正确,样本点分类错误的点也是可以满足优化问题中的条件的,所以不能将两者弄混在一起了。

机器学习(九):支持向量机SVM(超详细理论基础) 机器学习(九):支持向量机SVM 一,前言 从学习机器学习到现在,也实现了大大小小得多个算法了。下面便会对机器学习中较为出名的一种算法SVM进行原理阐述和理论推导。可能内容比较多,还需要慢慢查看。 二,SVM是什么?  SVM的英文全称是Support Vector Machines,我们叫它支持向量机。支持向量机是我们用于分类的一种算法。让我们以一个小故事的形式,开启我们的SVM之旅吧。  在很... 阅读详情

相关推荐

支持向量机(SVM)凸二次规划的求解——序列最小最优化算法(SMO)原理及python实现

原问题: min⁡α12∑i=1N∑j=1NαiαjyiyjK(xi,xj)−∑i=1Nαi\min_\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αmin​21​i=1∑N​j=1∑N​αi​αj​yi​yj​K(xi​,xj​)−i=1∑N​αi​ s....

qq_39320588的博客 1万+

序列最小优化算法(SMO)

来源:http://zh.wikipedia.org/wiki/%E5%BA%8F%E5%88%97%E6%9C%80%E5%B0%8F%E4%BC%98%E5%8C%96%E7%AE%97%E6%B3%95 维基百科,自由的百科全书 序列最小优化算法(英语:Sequential minimal optimization, SMO)是一种用于解决支持向量机训练过

alaclp的专栏 3700

重磅!最全最有效!SVM凸规划求解采用序列最小最优化算法(SMO)的python实现

SMO是求解软间隔线性SVM(带核函数)的对偶问题的一种启发式算法,运算效率很高,大大推动了SVM算法的实际应用。 SMO算法的原理在之前的文章:支持向量机(SVM)凸二次规划的求解——序列最小最优化算法(SMO)原理及python实现有十分详细的介绍,这里直接展示代码 from sklearn import datasets import matplotlib.pyplot as plt # 画...

qq_39320588的博客 7221

手推序列最小优化(sequential minimal optimization,SMO)算法

在前面几篇关于SVM的文章中,我们在计算过程中都有意无意地跳过了拉格朗日乘子的计算,SMO算法就是求解这些参数的具体方法。

KI的博客 10万+

超详细网安学习路线(Day1-Day2)

渗透测试(Penetration Testing),就是一种通过模拟恶意攻击者的技术与方法,挫败目标系统安全控制措施,取得访问控制权,并发现具备业务影响后果安全隐患的一种安全测试与评估方法。简单来说,就是合法去入侵别人的系统,来帮助其找出漏洞,增强防护能力。

aobulaien001的博客 3389

idea 编译打包nacos2.0.3源码,生成可执行jar 包常见问题

idea 编译打包nacos2.0.3源码,生成可执行jar 包常见问题

fyihdg的专栏 1218

SMO(序列最小优化)算法论文及原理详述

今日拜读了Platt的关于SMO的论文:Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Machines。直译过来就是:序列最小优化:一种训练支持向量机的快速方法。 文章目录一、论文内容概述论文摘要1 简介部分1.2 以前的支持向量方法2 序列最小优化2.1求解两个拉格朗日乘数2.2选择优化哪个乘数的启发式方法2.3阈值计算2.4线性支持向量机的优化2.5 代码细节2.6与以往算法的关系3基准SMO3

weixin_42213622的博客 5118

NVIDIA Tao Toolkit环境配置踩坑

请搭配食用该文章为 Tao 安装中可能出现的问题进行解答,如果存在本文章中没出现的问题,欢迎提问,由我复现后更新文章。由于大部分云服务器厂商不能支持 docker,因此我使用的环境为2023年5月27日在平台租的 3080 旧版环境进行实验。

qq_36630208的博客 771

SMO(Sequential minimal optimization)算法的详细实现过程

SMO算法主要是为优化SVM(支持向量机)的求解而产生的,SVM的公式基本上都可以推到如下这步: maxα∑i=1mαi−12∑i=1m∑j=1mαiαjyiyjxiTxjmax_{\alpha}\sum_{i=1}^{m}\alpha_{i}-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_{i}\alpha_{j}y_{i}y_{j}x_{i}^{T...

技术分享 1631

YOLOv11多模态融合实战:基于YOLOFuse的RGB与红外线(IR)协同检测技术解析

本文深入解析了YOLOv11多模态融合技术,重点介绍基于YOLOFuse框架的RGB与红外线(IR)协同检测方法。通过动态权重分配、跨模态特征对齐等创新设计,实现在低光照等复杂环境下的高精度目标检测,mAP提升高达37%。文章包含实战案例、训练技巧和部署方案,为计算机视觉开发者提供完整的多模态融合解决方案。

weixin_29038345的博客 292

思科路由器、交换机组网实验报告

通过思科模拟器搭建路由交换网络

ghj528的博客 1335

支持向量机SVM(4)-序列最小最优化(sequential minimal optimization SMO)算法

SVM序列最小最优化算法SMOSMO算法简介两个变量二次规划的求解方法变量的选择方法SMO算法流程 SMO算法简介 序列最小最优化(sequential minimal optimization SMO)算法 ,由Platt于1998年提出,可以高效地实现支持向量机学习问题. SMO算法要解如下凸二次规划的对偶问题 min⁡α12∑i=1N∑j=1NαiαjyiyjK(xi,xj)−∑i=1Nαi...

xu_aml的博客 518

深信服PT1-AF实验考试

深信服PT1-AF实验考试实验练习可以去深信服的在线实验平台(链接如下):深信服在线实验平台 (sangfor.com.cn)实验考试其实就是把所有的每一部分实验综合了起来以下内容仅做参考,不确保一样。

m0_72019240的博客 7116

机器学习:SVM(三)——序列最小最优化(SMO)算法

前面都只是讨论了向量机的最终形式以及推导过程,但是最终形式的求解没有给出。有许多最优化算法可以用于问题求解,但是当训练样本容量很大时,这些算法往往变得非常低效,以致无法使用。而SMO算法便是一种便捷高效算法。其实理清思路后,原理很好理解。避免麻烦直接贴图片。 参考: 李航《统计学习方法》 周志华《机器学习》 [https://www.jianshu.com/p/55458...

a16111597162163的博客 404

【异常】Openclaw Gateway进程异常停止问题分析与解决方案

本文分析了Gateway服务异常停止的问题,提出了三种解决方案。核心问题是缺乏进程守护和自动恢复机制,导致服务崩溃后无法自行重启。推荐方案是使用PM2进程管理工具(方案1),提供进程监控、自动重启和开机自启功能。替代方案包括自定义守护脚本(方案2)和supervisord管理(方案3)。这些方案都能有效解决当前服务脆弱性问题,显著提升服务可用性,其中PM2方案成熟度高、配置简单,是首选解决方案。实施后可将服务从人工干预转变为自动恢复,确保业务连续性。

奶爸的编程之路,也就一周冷个三天 457

28、解耦控制与晶圆表面缺陷模式识别

本文介绍了两种不同领域的技术方法:基于端口受控哈密顿(PCH)的三水箱液位系统解耦控制方法,以及基于无监督学习的晶圆表面缺陷模式识别方法。前者通过能量整形实现系统解耦与稳定控制,具有良好的抗干扰性和鲁棒性;后者采用无监督预训练与分类微调两阶段策略,利用WaUSM采样方法提升特征提取能力,在WM-811K数据集上实现了先进的分类性能。文章对比了两种方法的核心技术与优势,并探讨了其在工业控制与半导体制造中的应用前景及未来发展方向,为相关领域的研究与实践提供了有价值的参考。

git9versioner的博客 75

支持向量机之序列最小最优化算法

基础博客 线性可分支持向量机 对偶学习算法 线性支持向量机 非线性支持向量机简介序列最小最优化(sequential minimal optimization,SMO)算法,是1988年Platt提出的。 论文PDF链接应用SMO算法要解决的凸二次规划的对偶问题是: minα12∑Ni=1∑Nj=1αiαjyiyjK(xi,xj)−∑Ni=1\color{Red}{\underset

水滴石穿 4168

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

机器学习算法与Python实践之(四)支持向量机(SVM)实现

机器学习算法与Python实践之(四)支持向量机(SVM)实现zouxy09@qq.comhttp://blog.youkuaiyun.com/zouxy09        机器学习算法与Python实践这个系列主要是参考《机器学习实战》这本书。因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法。恰好遇见这本同样定位的书籍,所以就参考这本

zouxy09的专栏 14万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

smo算法matlab实现,SVM之序列最小最优化算法(SMO算法)

SVM回顾支持向量机(SVM)的一大特点是最大化间距(max margin)。对于如上图的二分类问题,虽然有很多线可以将左右两部分分开,但是只有中间的红线效果是最好的,因为它的可活动范围(margin)是最大的,从直观上来说很好理解。对于线性二分类问题,假设分类面为$$\begin{equation} u=\vec w \cdot \vec x-b \end{equation}$$则margin为...

weixin_33648352的博客 1732

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SVM——详细讲解SMO算法优化两个变量以及变量的选择

SMO(序列最小最优化)求解对偶问题的最优解 以非线性支持向量机的对偶问题为例,使用SMO算法求解最优参数α* 。 非线性支持向量机的对偶问题如下:

watermelon12138的博客 7014

序列最小最优化算法(SMO) SVM凸优化求

1998年,由Platt提出的序列最小最优化算法(SMO)可以高效的求解上述SVM问题,它把原始求解N个参数二次规划问题分解成很多个子二次规划问题分别求解,每个子问题只需要求解2个参数,方法类似于坐标上升,节省时间成本和降低了内存需求。每次启发式选择两个变量进行优化,不断循环,直到达到函数最优值。 https://blog.youkuaiyun.com/m_buddy/article/details/524...

u014033218的专栏 2516

支持向量机SVM及python实现

支持向量机 SVM是一种二分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;核技巧使他成为实质上的非线性分类器。SVM是求解凸二次规划的问题最优化问题。 SVM可分为: 线性可分支持向量机:数据线性可分,通过硬间隔最大化,学习一个线性分类器。 线性支持向量机:数据近似线性可分,通过软间隔最大化,学习一个分类器。 非线性支持向量机:数据线性不可分,通过使用核技巧及软间隔最大化。 技术: SMO 核函数 序列最小最优化 输入空间为欧氏空间或这是离散集合、.

qq_43683133的博客 5418

支持向量机SVM之-SMO算法

序列

code__online的博客 3722

一文看懂 序列最小最优化算法---SMO

一、SMO的背景介绍 序列最小最优化算法(sequential minimal optimization,SMO)于1998年被John Platt发明,是一种用于解决支持向量机训练期间出现的二次规划问题的算法。在SMO之前也有一些算法用于解决此类问题,但是这些算法都比较复杂,所以高效的SMO提出之时就在SVM社区引起了一阵轰动。 二、从SVM说起—SMO要解决什么 如何优化SVM的参数?首先我们通过拉格朗日乘子法建立拉格朗日函数,再根据拉格朗日的对偶性求解极大极小值问题。这些,我已经在《支持向量机一:线性

钉马掌的小铁匠的博客 2723

采用SMO优化算法训练SVM(实战篇)

算法笔记更新~ 引入   SVM(支持向量机),相信有一些机器学习基础的朋友对这个算法应该早已耳熟。SVM是现有的机器学习基础算法里较为能扛的一个。此篇文章偏向实战,对svm背后繁杂而又精致的数学知识不做展开叙述,在这一方面,笔者在学习时参考的是东大一位教授的知乎文章:零基础学习SVM,教授讲解的十分详细,引人入胜。层层递进的同时令人不禁感慨数学的美妙!如果你对svm最后的目标函数一无所知,同时又有兴趣探个究竟,强烈安利你移步上述链接。 SVM经过一番推导之后,得到的目标函数为: 对这个优化目标函数,解

GG_freedom 4747
上一篇: 支持向量机(二)线性支持向量机与软间隔最大化
下一篇: 提升方法(AdaBoost算法)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值