精华内容
下载资源
问答
  • svm原理
    2021-08-27 18:37:08

    SVM简介

            给定训练样本集D= {(a1, b1),(a2, b2),. . . , (am, bm)},bi ∈ {-1,+1},分类学习最基本的想法就是基于训练集D在样本空间中找到一个划分超平面,将不同类别的样本分开.但能将训练样本分开的划分超平面可能有很多,如图所示,我们应该努力去找到哪一个呢?

            

             在样本空间中,划分超平面可通过如下线性方程来描述:
                                    wTx+b=0 ,
    其中w = (w1; w2; . . . ; wd)为法向量,决定了超平面的方向; b为位移项,决定了超平面与原点之间的距离.显然,划分超平面可被法向量w和位移b确定,
    下面我们将其记为(w,b).样本空间中任意点α到超平面(w,b)的距离可写为
                                    r=|wTx+b|/||w||,

            假设超平面(w,b)能将训练样本正确分类,即对于(ai,bi)∈ D,若yi=+1,则有wTxi+b >0;若yi=—1,则有wTzi+b<0.令
    wTxi+b ≥+1,yi=+1 ;

    w Txi+ b ≤-1,yi= -1 .
            如图所示,距离超平面最近的这几个训练样本点使上式的等号成立,它们被称为“支持向量”(support vector),两个异类支持向量到超平面的距离之和为
    r=2/||w||,它被称为“间隔”(margin).


            

            要想找到具有“最大间隔”(maximum margin)的划分超平面,也就是要找到能满足上式中约束的参数w和b,使得γ最大,即
            max 2/||w||
            s.t. y(wTxi+b)≥ 1,i=1,2,. . . , m.
    显然,为了最大化间隔,仅需最大化||wll的-1次方,这等价于最小化||w||的平方.于是上式可重写为min 1/2||w||的平方

    s.t. yi(wTxi+b)≥1,i= 1,2,.. . , m.

     拉格朗日乘子法

    设给定二元函数z=ƒ(x,y)和附加条件φ(x,y)=0,为寻找z=ƒ(x,y)在附加条件下的极值点,先做拉格朗日函数  ,其中λ为参数。

    F(x,y,λ)xyλ的一阶偏导数等于零,即

    F'x=ƒ'x(x,y)+λφ'x(x,y)=0 

    F'y=ƒ'y(x,y)+λφ'y(x,y)=0

    F'λ=φ(x,y)=0

    由上述方程组解出x,yλ,如此求得的(x,y),就是函数z=ƒ(x,y)在附加条件φ(x,y)=0下的可能极值点

    若这样的点只有一个,由实际问题可直接确定此即所求的点。

    图1

     SoftMargin

            当然,在最大化间隔的同时,不满足约束的样本应尽可能少.于是,优化目标可写为
                    ​​​​​​​        
    其中C>0是一个常数,是“0/1损失函数”
            ​​​​​​​        ​​​​​​​        
    显然,当C为无穷大时,上式迫使所有样本均满足约束;当C取有限值时,上式允许一些样本不满足约束.

     SMO算法

     SVM向量回归

            给定训练样本D = {(X1,Y1),(X2,Y2),...,(Xm,Ym)}, Yi ∈ R,希望学得一个回归模型,使得f(x)与y尽可能接近, w和b是待确定的模型参数.
    对样本(x, y),传统回归模型通常直接基于模型输出f(x)与真实输出y 之间的差别来计算损失,当且仅当f(x)与y完全相同时,损失才为零.与此不同,支持向量回归(Support Vector Regression,简称SVR)假设我们能容忍f(x)与y之间最多有ε的偏差,即仅当f(x)与y之间的差别绝对值大于ε时才计算损失.如图所示,这相当于以f(x)为中心,构建了一个宽度为2ε的间隔带,若训练样本落入此间隔带,则认为是被预测正确的.

     

     于是,SVR问题可形式化为
            ​​​​​​​
    其中C为正则化常数,是图所示的ε不敏感损失(c-insensitive loss)函数
            ​​​​​​​
    引入松弛变量,可将上式重写为
            

     

     

     

     

     

     

    更多相关内容
  • 本文来源于csdn,介绍了SVM,线性分类器,线性分类器的求解,松弛变量,SVM用于多类分类等。支持向量机(SupportVectorMachine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出...
  • svm基本原理,python代码实现,拉格朗日与KKT算法描述
  • SVM原理分析

    2018-03-20 18:24:25
    SVM原理分析,讲解SVM当中的数学原理,支持向量机,嘿嘿。
  • SVM原理讲解

    2018-06-03 09:00:37
    该word文档详细介绍了SVM基本原理,并对其进行了简要分析
  • SVM 原理详细推导

    千次阅读 2022-03-21 20:28:54
    SVM 是一个分类模型,如果训练数据可以完全用一个超平面分开,则称数据集为完全线性可分的,这时可以采用硬间隔最大化建立带约束问题的最优化,此优化为凸二次规划,凸二次规划问题可以通过拉格朗日对偶性转为...


    SVM 是一个分类模型,如果训练数据可以完全用一个超平面分开,则称数据集为完全线性可分的,这时可以采用硬间隔最大化建立带约束问题的最优化,此优化为凸二次规划,凸二次规划问题可以通过拉格朗日对偶性转为拉格朗日函数,转而用SMO算法求解;但现实中大部分数据集不满足完全线性可分,也就是有一些数据会分错,这时可以通过一个松弛变量,让问题同样转为凸二次规划问题;但有许多问题就是线性不可分的,这时就需要将输入向量转为更高维的向量,使得向量在高维空间为线性可分,这就要用到核技巧

    1 硬间隔最大化

    输入数据 { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . ( x N , y N ) (x_1,y1),(x_2,y_2),...(x_N,y_N) (x1,y1),(x2,y2),...(xN,yN)} 为线性可分数据集(即存在一个超平面将数据集完全分开), 可用一个超平面 w x + b = 0 wx+b=0 wx+b=0(由法向量 w w w 和截距 b b b 确定)将数据集分为两部分,法向量指向的一侧是正类,另一部分是负类

    1.1 函数间隔与几何间隔

    超平面 w x + b = 0 wx+b=0 wx+b=0 确定之后, ∣ w x i + b ∣ |wx_i+b| wxi+b 值就可以表示 x i x_i xi 点距超平面的远近 (两者相减 ( w x i + b ) − ( w x + b ) = ( w x i + b ) − 0 = w x i + b (wx_i+b)-(wx+b)=(wx_i+b)-0=wx_i+b (wxi+b)(wx+b)=(wxi+b)0=wxi+b)。 w x i + b wx_i+b wxi+b 符号与 y i y_i yi 相同( y i y_i yi 取值 +1 或 -1, y∈{1,-1})两者相乘即为绝对距离 ∣ w x i + b ∣ |wx_i+b| wxi+b,超平面与点的间隔为函数间隔
    在这里插入图片描述
    所有点中与超平面最小距离定义为 γ ^ \hatγ γ^
    在这里插入图片描述
    在函数间隔中,如果同比例改变超平面的法向量 w w w 和截距 b b b ,比如同时乘 2,超平面没变但函数间隔却增大了 2 倍。可以对w 施加约束,使得函数间隔为确定值,这时侯函数间隔成为几何间隔,也即点到平面的距离:

    γ i = ( w ∗ x i + b ∣ ∣ w ∣ ∣ ) γ_i= (\frac{w*x_i+b}{||w||}) γi=(wwxi+b)
    ∣ ∣ w ∣ ∣ ||w|| w w w w L 2 L_2 L2 范数,同样 y i y_i yi与距离同符号,距离的绝对值为
    γ i = y i ( w ∗ x i + b ∣ ∣ w ∣ ∣ ) γ_i= y_i(\frac{w*x_i+b}{||w||}) γi=yi(wwxi+b)
    几何间隔的最小值为
    在这里插入图片描述

    1.2 间隔最大化

    实际上几何间隔 γ i γ_i γi 也表示将样本点分开时的确信程度, γ i γ_i γi 值越大,则分开的确信程度也越大,为使得所有点到超平面的几何距离最大化,就需要使得最小的几何间隔 γ γ γ 最大,(注: s.t.表示满足的条件,所有点到平面的距离都应该大于等于最小距离):
    在这里插入图片描述
    函数间隔与几何间隔满足如下关系(带帽的为函数间隔):
    在这里插入图片描述
    最小几何间隔与最小函数间隔关系就为:
    在这里插入图片描述
    根据以上函数间隔与几何间隔关系,函数
    在这里插入图片描述
    就可以变为:
    在这里插入图片描述
    因为求以上极值的方法,与函数间隔的实际大小没有关系,所以可以假设最小函数距离为 γ ^ = 1 \hatγ=1 γ^=1

    另外,求 m a x ( 1 ∣ ∣ w ∣ ∣ ) max (\frac{1}{||w||}) max(w1) ,也即是求 m i n ( 1 2 ∣ ∣ w ∣ ∣ 2 ) min(\frac{1}{2}{||w||^2}) min(21w2) ,于是优化问题转化为:
    在这里插入图片描述
    这是一个凸二次规划问题

    1.3 凸二次规划问题求解

    上一小节的原始问题为凸二次规划问题,原始问题需要用到拉格朗日对偶性转为拉格朗日函数,通过求解拉格朗日函数得到原始问题的最优解。同时,转为对偶问题还有其它优点:1、对偶问题更容易求解, 2、引入核函数,将svm 推广到非线性分类问题
    在这里插入图片描述
    首先构建拉格朗日函数,将原始问题转为对偶的极大极小值问题,通过把 α 当作常数,w,b为变量求极小值,随后对包含 α 变量的极小值求极大值:
    在这里插入图片描述
    最后求解 α ∗ α ^* α 需要用到 SMO 算法,求出 α ∗ α ^* α 之后就可以求得 w ∗ w^* w b ∗ b^* b, 这时的解一定满足 KKT 条件

    观察 KKT 第三个条件
    α ∗ ( y i ( w ∗ x i + b ∗ ) − 1 ) = 0 α^*(y_i(w^*x_i+b^*)-1)=0 α(yi(wxi+b)1)=0
    ( y i ( w ∗ x i + b ∗ ) − 1 ) > 0 (y_i(w^*x_i+b^*)-1)>0 (yi(wxi+b)1)>0 时,必有 α ∗ = 0 α^*=0 α=0 ( y i ( w ∗ x i + b ∗ ) − 1 ) = 0 (y_i(w^*x_i+b^*)-1)=0 (yi(wxi+b)1)=0 时, α ∗ α^* α 可以不必为 0,

    w ∗ w* w b ∗ b* b代入 w x + b wx+b wx+b 中, 最后的预测公式就为 f ( x ) = s i g n ( ∑ 1 N α ∗ y i ( x ⋅ x i ) + b ∗ ) f(x) = sign(\sum _{1}^{N}α ^*y_i(x\cdot x_i)+b^*) f(x)=sign(1Nαyi(xxi)+b) 。预测公式中除了满足 y i ( w ∗ x i + b ∗ ) − 1 = 0 y_i(w^*x_i+b^*)-1=0 yi(wxi+b)1=0 α ∗ α^* α 不为 0 之外,其它的 α ∗ α^* α 均为 0,也即预测结果仅由满足 ( y i ( w ∗ x i + b ∗ ) − 1 ) = 0 (y_i(w^*x_i+b^*)-1)=0 (yi(wxi+b)1)=0 的点决定,满足此公式的点也即为支持向量

    1.4 一个求解例子

    待补充

    2 软间隔最大化

    在实际情况中,并不是所有点都能正确地分为正类或负类,也即不满足函数间隔大于等于 1 的约束条件,为了解决这个问题,可以为每个样本的函数间隔加一个松弛变量 ξ i ≥ 0 ξ_i≥0 ξi0 ,使得函数间隔加上松弛变量大于等于 1,约束条件变为:
    y i ( w ∗ x i + b ) + ξ i ≥ 1 y_i(w*x_i+b)+ξ_i≥1 yi(wxi+b)+ξi1
    同时对于每一个松弛变量都需要付出一个代价 ξ i ξ_i ξi,目标函数变为
    在这里插入图片描述
    C>0 称为惩罚函数,C 减小时,对误分类的惩罚减小,当模型过拟合时,我们可以减小 C 值

    于是,最优化问题变为下面的凸二次规划:
    在这里插入图片描述
    求解待补充

    3 线性不可分问题

    训练好的模型预测公式为
    f ( x ) = s i g n ( ∑ 1 N α ∗ y i ( x ⋅ x i ) + b ∗ ) f(x) = sign(\sum _{1}^{N}α ^*y_i(x\cdot x_i)+b^*) f(x)=sign(1Nαyi(xxi)+b)

    实际中数据不一定线性可分,所以需要将输入向量 x 映射到高维空间中,使得数据在高维空间中线性可分,映射函数为 φ ( x ) φ(x) φ(x),映射后两个向量的点积称为核函数
    K ( x , y ) = φ ( x ) ⋅ φ ( y ) K(x,y)=φ(x)\cdotφ(y) K(x,y)=φ(x)φ(y)
    将核函数引入我们的预测函数中,由此函数变为
    f ( x ) = s i g n ( ∑ 1 N α ∗ y i ( K ( x , x i ) + b ∗ ) f(x) = sign(\sum _{1}^{N}α ^*y_i(K(x,x_i)+b^*) f(x)=sign(1Nαyi(K(x,xi)+b)
    从此函数可以看出其实我们并不正真需要计算x的实际映射结果 φ ( x ) φ(x) φ(x),只要知道两个向量映射后的点积即可,也即直接计算 K ( x , y ) K(x,y) K(x,y)。可以形象化的理解为向量 x 和 y都映射到高维空间后两者的点积即为核函数结果,我们不关于它们映射到了什么样的空间,只关注最后的结果

    常用核函数
    在这里插入图片描述

    关于 SVM 的使用可以参考 scikit-learn 中 SVM 的使用

    参考

    1 《统计学习方法》 李航
    2 SVM-支持向量机原理详解与实践

    展开全文
  • 目录 1、SVM概念描述 2、SVM数学表达及相关计算 3、SVM优化问题定义 附:证明区 【证明1】 【计算1】 1、SVM概念描述 如图一所示,存在两个数据集,我们希望通过一个超平面将两个数据集分割开,并且我们希望这个超...

    目录

    1、SVM概念描述

    2、SVM数学表达及相关计算

    3、SVM优化问题定义

    附:证明区

    【证明1】

    【计算1】


    1、SVM概念描述

    如图一所示,存在两个数据集,我们希望通过一个超平面将两个数据集分割开,并且我们希望这个超平面离两个数据集越远越好,某种意义上,这代表两个数据集分的更开。即图中的margin可以越大越好。

     

    因为margin越大,对于新的数据点,错误分类的可能就越小。

    如图二所示。可以看到,图中有两个可以选择的hyperplane,其中绿色的hyperplane的margin比较小,而黄色的比较大。对于一个新的点,图中用紫色圆形块标注,如果使用绿色的hyperplane将会把这个点归到第二个数据集中,而使用黄色的hyperplane则会归到第一个数据集,显然,如果去掉这两个hyperplane,单纯靠人为判断,我们也会将新的点归到第一个数据集,也就是说,此时margin比较小的绿色hyperplane对新的点的归类是错误的。这也就是我们说的,margin越大错误分类可能性越小。

    2、SVM数学表达及相关计算

    目标:找到一个超平面l(x) = w^{T}x+b 来区分两个数据集,且超平面距离两个数据集的距离要最大。

    y_{i}=\left\{\begin{matrix}+1\, \,\, \, \, \, \, \, if \, \, l(x_{i})>0 \\-1\, \,\, \, \, \, \, \, if \, \, l(x_{i})\leq 0 \end{matrix}\right.

    其中yi是第i个点的标签,+1表示属于第一个数据集,-1表示属于第二个数据集。

    这样对于新的点x,我们就可以通过l(x)的值判断x属于哪个数据集。

    但是还需要注意到,l(x)中有两个未知变量,分别是w,b,这两个未知量需要通过原先有的带标签数据集来决定。

    为了严格起见以及方便运算(更好确定margin大小),我们做一点小小的调整。

    通过选取新的w,b,更新y的定义如下:

    y_{i}=\left\{\begin{matrix}+1\, \,\, \, \, \, \, \, if \, \, l(x_{i})\geq +1 \\-1\, \,\, \, \, \, \, \, if \, \, l(x_{i})\leq -1 \end{matrix}\right.

    改变前后示意图如图三所示。

    但要注意的是,这是等价的转换,因为图三左边的l(x)和右边的l(x)并不是一样的。相反这是通过更新w,b,生成新的l(x)。也就是说,如果第一张图中没有一个点既不满足l(x)> 0,也不满足l(x)\leq 0的话(既不在黄色区域也不在蓝色区域),在第二张图中,也不会有点的l(x)在[-1,+1]区间(既不在黄色区域也不在蓝色区域)。

    具体证明过程写在文末证明区【证明1】,自行食用~

    通过改变定义,我们可以得到margin的距离,从图三的右图也可以发现,这个距离就是l(x)=+1l(x)=-1之间的距离。

    这个距离通过计算可以知道是2/||\omega ||

    计算过程同样写在文末证明区【计算1】,感兴趣的自行查看~

    3、SVM优化问题定义

    通过以上对目标的阐述以及相关计算,我们可以对SVM问题进行定义:

    min_{\omega ,b}f_{svm}(\omega ,b) = \frac{\lambda }{2}\left \| \omega \right \|^{2}+\sum_{i=1}^{m}max\left \{ 0,1-y_{i}(x_{i}^{T}\omega +b) \right \}

    其中第一项中\frac{\left \| \omega \right \|^{2}}{2}用来衡量距离大小,\sum_{i=1}^{m}max\left \{ 0,1-y_{i}(x_{i}^{T}\omega +b) \right \}用来衡量错误分类情况,其中(x_{i}^{T}\omega +b)为预测的标签,y_{i}是真实标签。

    \lambda则是用来确定这两项的比重,\lambda越大,追求更大的margin就成了主要目标,否则,追求更小的错误分类成为主要目标。

    然而这还是基础版本的SVM,因为这个函数第二项是不平滑项,而优化问题中不平滑项通常需要转换成平滑项,可以通过使用Huber函数将后一项平滑化。也有其他处理方式,这里不过多介绍。

     

     

    附:证明区

    【证明1】

    【计算1】

     

     

     

     

    展开全文
  • svm原理详细推导

    万次阅读 多人点赞 2018-10-29 17:50:54
    笔者在查阅了大量资料和阅读大佬的讲解之后,终于对svm有了比较深一点的认识,先将理解的推导过程分享如下: 本文主要从如下五个方面进行介绍:基本推导,松弛因子,核函数,SMO算法,小结五个方面以%%为分隔,同时...

    笔者在查阅了大量资料和阅读大佬的讲解之后,终于对svm有了比较深一点的认识,先将理解的推导过程分享如下:

    本文主要从如下五个方面进行介绍:基本推导,松弛因子,核函数,SMO算法,小结五个方面以%%为分隔,同时有些地方需要解释或者注意一下即在画有---------符号的部分内。

    本文主要介绍的是理论,并没有涉及到代码,关于代码的具体实现,可以在阅读完本文,掌握了SVM算法的核心内容后去看一下笔者另一篇SVM代码剖析:

    https://blog.csdn.net/weixin_42001089/article/details/83420109

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    基本推导

    svm原理并不难理解,其可以归结为一句话,就是最大化离超平面最近点(支持向量)到该平面的距离。

    如下图

    开门见山就是下面的最值优化问题:

    max_{w,b}(min_{x_{i}} \,\frac{y_{i}(w^{T}x_{i}+b)}{\left | w \right |} )

    注意

    (1)这里的y_{i}就是标签假设这里是二分类问题,其值是1和-1,其保证了不论样本属于哪一类y_{i}(w^{T}x_{i}+b)都是大于0的

    (2)y_{i}(w^{T}x_{i}+b)称为函数距离,,\frac{y_{i}(w^{T} x_{i}+b)}{\left | w\right |}称为几何距离,这里之所以要使用几何距离是因为,当w,b成倍增加时,函数距离也会相应的成倍的增加,而几何函数则不会

    这里涉及到求两个最值问题,比较棘手,正如上面所说,几何距离不受成倍增加的影响,这里不妨就将最近点到超平面的函数距离设为1,自然其他非最近点的函数距离便是大于1,于是以上问题转化为:

    \begin{matrix} max_{w,b} \, \frac{1}{\left | w \right |}\\ s.t \, \, \, y_{i}(wx_{i}+b)\geqslant 1 \end{matrix}\Rightarrow \begin{matrix} min_{w,b} \, \frac{1}{2}\left | w \right |^{2}\\ s.t \, \, \, y_{i}(wx_{i}+b)\geqslant 1 \end{matrix}

    这是一个在有不等式约束下,最小值优化的问题,这里可以使用kkt条件

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------

    这里简单介绍一下kkt和拉格朗日乘子法(一般是用来求解最小值的优化问题的)

    在求优化问题的时候,可以分为有约束和无约束两种情况。

    针对有约束的情况又有两种情况即约束条件是等式或者是不等式

    当是等式的时候:

    \begin{matrix} min f(x)\\ s.t. \, g_{i}(x)=0 \, \, i=1,2,,,m\end{matrix}

    首先写出其拉格朗日函数:

    \iota (x,\alpha )=f(x)+\sum_{i=1}^{m}\alpha _{i}g(x)\, \, (1)

    需满足的条件是:

    \alpha _{i}\not\equiv 0

    而当约束条件是不等式时,便可以使用kkt条件,其实kkt条件就是拉格朗日乘子法的泛化

    \begin{matrix} minf(x)\\ s.t. \, g_{i}(x)=0\,\, \, \, i=1,2,,,m \\ h_{j}(x)\leqslant 0\, \, \, j=1,2,,,n \end{matrix}

    同理首先写出拉格朗日函数:

    {\color{Magenta} \iota (x,\alpha ,\theta )=f(x)+\sum_{i=1}^{m}\alpha _{i}g_{i}(x)+\sum_{j=1}^{n}\theta _{i}h_{i}(x)\, \, \, \, (2)}

    好了,接着往下走介绍拉格朗日对偶性:

    上面问题可以转化为(称为原始问题):

    min_{x}\, max_{\alpha ,\theta }\iota (x,\alpha ,\theta )

    为什么可以转化呢?这里是最难理解的:笔者还没有完全透彻的理解,这里试着解释一下吧,也是网上最流行的解释方法:

    这里分两种情况进行讨论:

    当g(x)或者h(x)不满足约束条件时:

    那么显然:max_{\alpha ,\theta }(x,\alpha ,\theta )=+\infty因为当h(x)>0时我们可令\theta =+\infty,g(x)\not\equiv 0时我们令\alpha =-\infty或者\alpha =+\infty

    当g(x)或者h(x)满足约束条件时:

    max_{\alpha ,\theta }(x,\alpha ,\theta )=f(x)

    综上所述:

    max_{\alpha ,\theta }(x,\alpha ,\theta )=\begin{pmatrix} f(x)\, \, \, \, \, \, \, \, \, \, g(x)\, and \, \, h(x) satisfy\, constraints\\ +\infty \, \, \, \, \, \, \, \, \, others \end{pmatrix}

    所以如果考虑极小值问题那么就可以转化为:

    min_{x}\, max_{\alpha ,\theta }\iota (x,\alpha ,\theta )

    还有一种比较直观的方法,这里不再证明,可以参考:如何通俗地讲解对偶问题?尤其是拉格朗日对偶lagrangian duality? - 知乎第二个回答

    对偶问题:

    上面关于拉格朗日最小最大值问题可以转化为求其对偶问题解决:

    {\color{Magenta} {\color{Magenta} }{\color{Orchid} }max_{\alpha ,\theta }\, min_{x}\, \iota (x,\alpha ,\theta )}

    两者关系:

    假设原始问题的最优解是p^{*},其对偶问题的最优解是d^{*},那么容易得到:

    min_{x}\, \, \iota (x,\alpha ,\theta )\leq \iota (x,\alpha ,\theta )\leqslant max_{\alpha ,\theta }\, \iota (x,\alpha ,\theta )\Rightarrow max_{\alpha ,\theta }\, min_{x}\, \iota (x,\alpha ,\theta )\, \leq min_{x}\, max_{\alpha ,\theta }\iota (x,\alpha ,\theta )\Rightarrow d^{*}\leq p^{*}

    即其对偶问题的解小于等于原始问题的解,现在我们要通过其对偶问题来求的原始问题的解对吧,所以我们希望的是d^{*}= p^{*}

    那么什么时候才能相等呢?这就必须满足的kkt条件:

    {\color{Magenta} \left\{\begin{matrix} \frac{\partial \iota (x,\alpha ,\theta )}{\partial x}| _{x=x^{*}}=0\\ \frac{\partial \iota (x,\alpha ,\theta )}{\partial \alpha }|_{x=x^{*}}=0\\ \frac{\partial \iota (x,\alpha ,\theta )}{\partial \theta }|_{x=x^{*}}=0\\ \alpha _{i}\neq 0 \\ \theta _{j}\geqslant 0 \\ \theta _{j}h_{j}(x)|_{x=x^{*}}=0 \\ h_{j}(x)|_{x=x^{*}}\leq 0 \\ g_{i}(x)|_{x=x^{*}}=0 \end{matrix}\right.}

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------

    说了这么多拉格朗日的东西,其实其本质作用就是,将有不等式约束问题转化为无约束问题(极小极大值问题),然后又进一步在满足kkt条件下将问题转化为了其对偶问题,使之更容易求解,下面要用到的就是上面紫色的部分,关于更深的拉格朗日求解问题大家可以去收集资料参看。

    对应到SVM的拉格朗日函数便是:

    \iota (w,b,\alpha )=\frac{1}{2}\left | w \right |^{2}{\color{Red} -}\sum_{i=1}^{m}\alpha _{i}\left [ y_{i}(w^{T}x_{i}+b)-1 \right ]

    -----------------------------------------------------------------------------------------------------------------------------------------------------------

    注意上面给的不等式约束是h_{j}(x)\leq 0即小于等于,而这里的不等式约束是大于等于所以红色部分是减法

    ----------------------------------------------------------------------------------------------------------------------------------------------------------

    于是问题转化为:

    min_{w,b} \, \, (max_{\alpha }(\iota (w,b,\alpha )))

    根据对偶转化:

    max_{\alpha } \, \, (min_{w,b }(\iota (w,b,\alpha )))

    好啦,这里没什么说的就是根据kkt条件求偏导令其为0:

    \begin{matrix} \frac{\partial \iota (w,b,\alpha )}{\partial w}=w-\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}=0\\\frac{\partial\iota (w,b,\alpha) }{\partial b}=\sum_{i=1}^{m}\alpha _{i}y_{i}=0\end{matrix}

    于是就得到:

    \begin{matrix} w=\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}\\ \sum_{i=1}^{m}\alpha _{i}y_{i}=0 \end{matrix}

    将上述两公式带入到\iota (w,b,\alpha )如下:

    \iota (w,b,\alpha )=\frac{1}{2}w^{T}w-\sum_{i=1}^{m}\alpha _{i}y_{i}w^{T}x_{i}-b\sum_{i=1}^{m}\alpha _{i}y_{i}+\sum_{i=1}^{m}\alpha _{i}=\frac{1}{2}w^{T}w-\sum_{i=1}^{m}\alpha _{i}y_{i}w^{T}x_{i}+\sum_{i=1}^{m}\alpha _{i}=\frac{1}{2}w^{T}\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}-w^{T}\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}+\sum_{i=1}^{m}\alpha _{i}=\sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}w^{T}\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}=\sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}x_{i}x_{j}

    于是问题转化为:

    \begin{matrix} max_{\alpha }\, \, \sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}x_{i}x_{j}\\ s.t. \, \, \alpha _{i}\geqslant 0 \\ \sum_{i=1}^{m}\alpha _{i}y_{i}=0 \end{matrix}

    所以最后就得出这样的步骤:

    1首先根据上面的最优化问题求出一些列的\alpha

    2然后求出w和b\begin{matrix} w=\sum_{i=1}^{m}\alpha_{i} y_{i}x_{i}\\b=\frac{1}{m}\sum_{j=1}^{m}(y_{j} -\sum_{i=1}^{m}\alpha_{i} y_{i}x_{i}x_{j})\end{matrix}

    所以当一个样本进来的时候即值便是:

    y=\sum_{i=1}^{m}\alpha_{i} y_{i}x_{i}x+\frac{1}{m}\sum_{j=1}^{m}(y_{j} -\sum_{i=1}^{m}\alpha_{i} y_{i}x_{i}x_{j})

    3根据如下进行分类:

    sign(y)

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    松弛因子

    上面是SVM最基本的推导,下面说一下这种情况就是有一个点由于采集错误或者其他原因,导致其位置落在了别的离别当中,而svm是找最近的点,所以这时候找出的超平面就会过拟合,解决的办法就是忽略掉这些点(离群点),即假如松弛因子\beta _{i}\geqslant 0,使几何距离不那么大于1

    数学化后的约束条件即变为:

    min_{w,b,\beta } \, (\frac{1}{2}\left | w \right |^{2}+C\sum_{i=1}^{m}\beta_{i}) \\ s.t \, \, \, y_{i}(w^{T}x_{i}+b)\geqslant 1-\beta _{i}\\\beta _{i}\geq 0

    这里简单来理解一些C的含义:这是一个在使用SVM时需要调的参数,\beta代表离群点到底离群点有多远,而C就是我们对这些点的重视程度,假设现在\sum_{i=1}^{m}\beta_{i}是一个定值,那么当C越大,就代表我们越重视这些点,越不想舍弃这些点,即极端的当C=+\infty时,优化是求min,则无解,即对应的直观理解就是:这时线性不可分,大家都混在一起,这时又不想舍弃任何一个点,自然就不能找到适合的超平面(当然可以使用核函数进行映射分类,后面说明)

    接下来还是使用上面拉格朗日对偶问题进行求解,这里就不详细说明了,直接给出过程:

    \begin{matrix} min_{w,b,\beta }\, \, \, max_{\alpha ,\gamma }(\frac{1}{2}|w|^{2}+C\sum_{i=1}^{m}\beta _{i}-\sum_{i=1}^{m}\alpha _{i}(y_{i}(wx_{i}+b)-1+\beta _{i})-\sum_{j=1}^{m}\gamma _{j}\beta _{j})\\ {\color{Red} \Rightarrow }\\ max_{\alpha ,\gamma }\, \, \, min_{w,b,\beta }(\frac{1}{2}|w|^{2}+C\sum_{i=1}^{m}\beta _{i}-\sum_{i=1}^{m}\alpha _{i}(y_{i}(wx_{i}+b)-1+\beta _{i})-\sum_{j=1}^{m}\gamma _{j}\beta _{j}) \end{matrix}

    \iota (w,b,\beta ,\alpha ,\gamma )=\frac{1}{2}|w|^{2}+C\sum_{i=1}^{m}\beta _{i}-\sum_{i=1}^{m}\alpha _{i}(y_{i}(wx_{i}+b)-1+\beta _{i})-\sum_{j=1}^{m}\gamma _{j}\beta _{j}

    求导令其为0:

    \frac{\partial \iota (w,b,\beta ,\alpha ,\gamma )}{\partial w}=w-\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}=0\Rightarrow w=\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}

    \frac{\partial \iota (w,b,\beta ,\alpha ,\gamma )}{\partial b}=-\sum_{i=1}^{m}\alpha _{i}y_{i}=0\Rightarrow \sum_{i=1}^{m}\alpha _{i}y_{i}=0

    \frac{\partial \iota (w,b,\beta ,\alpha ,\gamma )}{\partial \beta }=0\Rightarrow C-\alpha _{i}-\gamma _{i}=0

    将其带入最终问题可得:

    max_{\alpha }\, \, \sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}x_{i}x_{j}

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------

    这里得到的和没加松弛变量时是一样的

    ------------------------------------------------------------------------------------------------------------------------------------------------

    对应的kkt条件为:

    \sum_{i=1}^{m}\alpha _{i}y_{i}=0 \, \, \, (1)

    \alpha _{i}\left [ y_{i}y(x) -(1-\beta _{i})\right ]=0\, \, \, \, (2)

    \left [ y_{i}y(x) -(1-\beta _{i})\right ]\geq 0\, \, \, \, (3)

    \gamma _{i}\beta _{i}=0\, \, (4)

    \beta _{i}\geq 0\, \, \, (5)

    \alpha _{i}\geq 0\, \, \, (6)

    \gamma _{i}\geq 0\, \, \, (7)

    C-\alpha _{i}-\gamma _{i}=0\, \, \, (8)

    w=\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}\, \, \, \, (9)

    注意如下几点:

    一:对比最开始的kkt条件模板

    {\color{Magenta} \left\{\begin{matrix} \frac{\partial \iota (x,\alpha ,\theta )}{\partial x}| _{x=x^{*}}=0\\ \frac{\partial \iota (x,\alpha ,\theta )}{\partial \alpha }|_{x=x^{*}}=0\\ \frac{\partial \iota (x,\alpha ,\theta )}{\partial \theta }|_{x=x^{*}}=0\\ \alpha _{i}\neq 0 \\ \theta _{j}\geqslant 0 \\ \theta _{j}h_{j}(x)|_{x=x^{*}}=0 \\ h_{j}(x)|_{x=x^{*}}\leq 0 \\ g_{i}(x)|_{x=x^{*}}=0 \end{matrix}\right.}

    这里的(1)(8)(9)是求偏导的结果即一二三公式,(6)(7)是拉格朗日乘子即相当于模板的第五公式,(2)(4)相当于模板第六个公式,(3)(5)是原始约束条件即相当于模板的第七个公式

    二:可以将kkt中部分条件进行总结归纳:(6)(7)(8)三个条件:

    \begin{matrix} \gamma _{i}=C-\alpha _{i}\\ \gamma _{i}\geq 0 \end{matrix}\Rightarrow C-\alpha _{i}\geq 0\Rightarrow \alpha _{i}\leq C

    \begin{matrix} \alpha _{i}\leq C\\ \alpha _{i}\geq 0 \end{matrix}\Rightarrow 0\leq \alpha _{i}\leq C

    所以可以总结为:

    \begin{matrix} max_{\alpha }\, \, \sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}x_{i}x_{j}\\ s.t. \, \, \sum_{i=1}^{m}\alpha _{i}y_{i}=0 \\ 0\leq \alpha _{i}\leq C \end{matrix}

    可以看到这里和没加松弛变量相比,唯一不同的就是{\color{Red} \alpha }有了上界C,它代表着我们对那些离群点的重视程度

    三:说一下\alpha _{i}取不同值时意义

    对比模板

    \theta _{i}^{*}> 0时,对应的h_{i}(x^{*})=0x^{*}边界点

    \theta _{i}^{*}= 0时,对应的h_{i}(x^{*})< 0x^{*}非边界点

    \alpha _{i}=0时:

    由(8)可得:C-\alpha _{i}-\gamma _{i}=0\Rightarrow \gamma _{i}=C\Rightarrow \gamma _{i}> 0

    又有公式(4)可得:\begin{pmatrix} \gamma _{i}> 0\\\gamma _{i}\beta _{i}=0 \end{pmatrix}\Rightarrow \beta _{i}=0

    最后又公式(3)可得:\left [ y_{i}y(x) -(1-\beta _{i})\right ]\geq 0\Rightarrow y_{i}y(x) \geq 1

    0< \alpha _{i}< C时:

    C-\alpha _{i}-\gamma _{i}=0\Rightarrow \gamma _{i}=C-\alpha _{i}\Rightarrow \gamma _{i}> 0

    同理\begin{pmatrix} \gamma _{i}> 0\\\gamma _{i}\beta _{i}=0 \end{pmatrix}\Rightarrow \beta _{i}=0

    又(2)可得:

    \begin{pmatrix} \alpha _{i}\left [ y_{i}y(x) -(1-\beta _{i})\right ]=0\\ 0< \alpha _{i}< C \end{pmatrix}\Rightarrow \left [ y_{i}y(x) -(1-\beta _{i})\right ]=0

    最后:

    \begin{pmatrix} y_{i}y(x) =(1-\beta _{i})\\ \beta _{i}=0 \end{pmatrix}\Rightarrow y_{i}y(x) =1

    \alpha _{i}= C时:

    C-\alpha _{i}-\gamma _{i}=0\Rightarrow \gamma _{i}=0

    进而这里还是只能得到\beta _{i}\geq 0\begin{matrix} \gamma _{i}=0\\ \gamma _{i}\beta _{i}= 0 \\ \beta _{i} \geq 0\end{matrix}\Rightarrow \beta _{i} \geq 0

    \left [ y_{i}y(x) -(1-\beta _{i})\right ]\geq 0\Rightarrow y_{i}y(x) \geq (1-\beta _{i})

    最后:

    \begin{pmatrix} y_{i}y(x) \geq (1-\beta _{i})\\ \beta _{i}\geq 0 \end{pmatrix}\Rightarrow y_{i}y(x) \leq 1

    综上所述可以总结为:

    \begin{matrix} \alpha _{i}=0\Leftrightarrow y_{i}y(x)\geq 1\\ 0< \alpha _{i}< C\Leftrightarrow y_{i}y(x)= 1 \\ \alpha _{i}=C\Leftrightarrow y_{i}y(x)\leq 1 \end{matrix}

    在点在两条间隔线外则,对应前面的系数\alpha为0,在两条间隔线里面的对应的系数为C,在两条间隔线上的点对应的系数在0和C之间。

    通过上面也可以看出,最后求出的所有\alpha按理说为0的居多,毕竟大部分数据点应该是在间隔线外的对吧

    所以对应到松弛遍历这里的步骤就是:

    1首先根据上面的最优化问题求出一些列的\alpha

    2然后求出w和b \begin{matrix} w=\sum_{i=1}^{m}\alpha_{i} y_{i}x_{i}\\b=\frac{min_{i:y=1}w^{*}x_{i}+max_{i:y=-1}w^{*}x_{i}}{2}\end{matrix}

    注意这里是随便取一个点i就可以算出b,但是实际中往往取所有点的平均

    3得出超平面

    注意这里说一下\alpha _{i}的意义,由前面基本推导的kkt部分讨论可知:

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    核函数:

    出现的背景:

    对于一些线性不可分的情况,比如一些数据混合在一起,我们可以将数据先映射到高纬,然后在使用svm找到当前高纬度的超平面,进而将数据进行有效的分离,一个直观的例子:

    图片来源七月算法

    比如原来是:

    y=\sum_{i=1}^{m}\alpha _{i}^{*}y_{i}x_{i}x+b

    则现在为:

    y=\sum_{i=1}^{m}\alpha _{i}^{*}y_{i}\Phi (x_{i})\Phi (x)+b\Rightarrow \sum_{i=1}^{m}\alpha _{i}^{*}y_{i}< \Phi (x_{i})\Phi (x)> +b

    其中\Phi (x)就是映射公式,即先映射到高纬再进行内积

    但是问题来了,那就是假设原始数据维度就好高,再进一步映射到高纬,那么最后的维度可能就非常之高,再进行内积等这一系列计算要求太高,很难计算。

    因此我们可以令

    \sum_{i=1}^{m}\alpha _{i}^{*}y_{i}< \Phi (x_{i})\Phi (x)> +b\Rightarrow \sum_{i=1}^{m}\alpha _{i}^{*}y_{i} \, \, K<x_{i},x> +b

    这里的K< x_{i},x>便是核函数,其意义在于我们不用去映射到高纬再内积,而是直接在低纬使用一种核函数计算x_{i},x,使其结果和映射到高纬再内积效果一样,这就是核函数的威力,大部分是内积,而SVM的奇妙之处就在于所有的运算都可以写成内积的形式,但是这种核函数具体该怎么选取呢?别慌,已经有前辈们帮我们找到了很多核函数,我们直接拿过来用就可以啦。

    下面介绍几种常见的吧:更多的大家可以自行查阅:

    (1)线性核函数 :也是首选的用来测试效果的核函数
    K(x_{i},x)=x_{i}\cdot x
    其维度与原来相同,主要用于线性可分的情况,其实就是原始导出的结果
    (2)多项式核函数 

    K(x_{i},x)=[(x_{i}\cdot x)+1]^{m}
    其实现将低维的输入空间映射到高纬的特征空间,但多项式的阶数也不能太高,否则核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度同样会大到无法计算。而且它还有一个缺点就是超参数过多
    (3)径向基高斯(RBF)核函数 
    K(x_{i},x)=exp(-\frac{\left \| x_{i}-x \right \|^{2}}{2\delta ^{2}})
    高斯(RBF)核函数核函数性能较好,适用于各种规模的数据点,而且参数要少,因此大多数情况下优先使用高斯核函数。
    (4)sigmoid核函数 

    K(x_{i},x)=tanh(\eta < x_{i},x> +\theta )
    不难看出这里有点深度学习当中,一个简单的神经网络层

    总的来说就是,当样本足够多时,维度也足够高即本身维度已经满足线性可分,那么可以考虑使用线性核函数,当样本足够多但是维度不高时,可以考虑认为的增加一定的维度,再使用线性核函数,当样本也不多,维度也不高时,这时候可以考虑使用高斯(RBF)核函数。

    关于SVM ,python中有一个机器学习库sklearn,其中集成了很多机器学习方法,包括SVM,笔者这里也做过一个简单直观的调用,可以参看python_sklearn机器学习算法系列之SVM支持向量机算法_爱吃火锅的博客-CSDN博客

    再者就是我们虽然可以直接拿sklearn库下集成好的接口来用,但是其具体实现细节,还是有必要了解一下,换句话说:

    上面我们最后得到的结果是:

    \begin{matrix} max_{\alpha }\, \, \sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}x_{i}x_{j}\\ s.t. \, \, \sum_{i=1}^{m}\alpha _{i}y_{i}=0 \\ 0\leq \alpha _{i}\leq C \end{matrix}

    我们求出一些列\alpha便可,可是\alpha具体怎么求呢?落实到代码上面应该怎么搞呢?下面就来说说这个事情
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    SMO算法

    现在的问题是:

    \begin{matrix} max_{\alpha }\, \, \sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}x_{i}x_{j}\\ s.t. \, \, \sum_{i=1}^{m}\alpha _{i}y_{i}=0 \\ 0\leq \alpha _{i}\leq C \end{matrix}

    首先要明确我们的目的是求一些列的\alpha,其思路也是很简单就是固定一个参数即以此为自变量,然后将其他的变量看成常数,只不过因为这里\sum_{i=1}^{m}\alpha _{i}y_{i}=0约束条件,所以我们一次取出两个\alpha作为自变量进行优化,然后外面就是一个大的循环,不停的取不停的优化,知道达到某个条件(后面介绍)停止优化。

    思路框架就是上面这么简单,下面来看一下理论方面的精确推导:

    假设我们首先取出了\alpha _{1}\alpha _{2},那么后面的便可以整体视为一个常数即:

    \alpha _{1}y_{1}+\alpha _{2}y_{2} = -\sum_{i=3}^{m}\alpha _{i}y_{i}\Rightarrow \alpha _{1}y_{1}+\alpha _{2}y_{2} =\zeta

    先将\alpha _{1}\alpha _{2}表示出来,也很简单:

    \alpha _{1}=(\zeta-\alpha _{2}y_{2})y_{1}

    带入到原始优化的目标方程中可得:

    \sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}x_{i}x_{j}=a\alpha _{2}^{2}+b\alpha _{2}+c

    即关于\alpha _{2}的一元二次方程(其中a,b,c都是常数)

    --------------------------------------------------------------------------------------------------------------------------------------------------------------

    为什么是二元一次方程呢?很简单由原始优化目标可以看出基本单元就是\alpha _{i}\alpha _{j},然后就是组合相加,所以最高次数就是2次,前面还有单次项,后面有常数项,所以最后归结起来就是一个一元二次方程

    -------------------------------------------------------------------------------------------------------------------------------------------------------------

    好啦,求一元二次方程最值应该很简单啦吧,即:

    \alpha _{2}=-\frac{b}{2a}

    相应的根据\alpha _{1}=(\zeta-\alpha _{2}y_{2})y_{1}便可以求出\alpha _{1}

    这样就完成啦一对\alpha值的优化,接着找下一对\alpha值就行优化即可

    -------------------------------------------------------------------------------------------------------------------------------------------------------------

    介绍到这里也许会发现还有一个约束条件没有用即:

    0\leq \alpha _{i}\leq C

    是的我们在算\alpha _{1}\alpha _{2}的时候,最后还应该加一步就是将其值约束到[0,C]

    回到:

    \alpha _{1}y_{1}+\alpha _{2}y_{2} =\zeta

    我们分类讨论:

    (1)当y_{1}y_{2}是同号时:

    则是一个斜率为-1的直线即\alpha _{1}+\alpha _{2}=\$

    那么可以画出如下图。横坐标是\alpha _{1},纵坐标是\alpha _{2},可以看到直线有如下两种情况

    现在要保证范围,即\alpha _{2}的最大值在两种情况下分别是\$和C,最小值分别是0\$ -C

    所以最后综合一下即

    \begin{matrix} L=max(0,\$ -C)=max(0,\alpha _{1}+\alpha _{2}-C)\\ H=min(\$ ,C)=min(\alpha _{1}+\alpha _{2},C)\, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \end{matrix}

    (2)当当y_{1}y_{2}是异号时:

    则是一个斜率为1的直线即\alpha _{1}-\alpha _{2}=\$

    那么可以画出如下图。横坐标是\alpha _{1},纵坐标是\alpha _{2},可以看到直线有如下两种情况

    现在要保证范围,即\alpha _{2}的最大值在两种情况下分别是C-\$和C,最小值分别是0-\$

    所以最后综合一下即

    \begin{matrix} L=max(0,-\$ )=max(0,\alpha _{2}-\alpha _{1})\\ H=min(C-\$ ,C)=min(C-\alpha _{1}+\alpha _{2},C) \end{matrix}

    所以在我们通过一元二次方程求得的\alpha _{2}并不是最终的\alpha _{2}而是经过以下:

    \alpha ^{*}_{2}=\begin{Bmatrix} L\, \,\, \, \, \, \, \, \, \, \, \, if \, \, \, \,\alpha _{2}<L\\ \alpha _{2}\, \,\, \, \, \, \, \, \, \, if \, \, \, L\leq \alpha _{2}\leqslant H\\ H\,\, \, \, \, \, \, \, \, \, \, \, if \, \, \alpha _{2}> H \end{Bmatrix}

    注意这里有时候L=H这代表\alpha _{1},\alpha _{2}都在边界(值等于0或者C)则不用对这一对\alpha进行优化啦,因为他们已经在边界啦,因此不再能够减少或者增大(其值太大会被强行赋值为H,同理太小为L),因此也就不值得再对他们进行优化啦,直接跳过寻找下一对需要优化的\alpha对即可

    --------------------------------------------------------------------------------------------------------------------------------------------------------------

    好的我们接着往下走,刚才说得到一个一元二次方程组那么系数a,b,c是多少呢?我们来求一下:

    我们先将\alpha _{1}\alpha _{2}带入:

    公式太多就不用编辑器啦,字迹有点潦草==

    现在我们进一步化简一下v_{i}:

    我们将本次要优化的参数标为*即规范一下就是:

    相对应v_{i}中的\alpha没有*就代表使用上次结果的\alpha

    好啦接下来要做的就像上面说的用\alpha _{2}表达式代替\alpha _{1},然后求导为0

    最后我们要的结果就是红框的部分(其中s=y_{1}y_{2}

    将w,v都带入便得到:

    注意这里的\theta其实可以看成下角标1和2的平方差\left ( a-b \right )^{2}=a^{2}+b^{2}-2ab\geq 0

    因为下面\theta又在分母不能为0,所以一般当\theta > 0时才有意义,我们才往下进行,否则跳过本次优化的\alpha

    关于b的更新需要根据\alpha的取值来进行判断:

    好啦,最最最最最最重要的一张图来啦,也是我们上面花了这么多力气得出的结果,也是我们最终程序设计的蓝图:

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    最后小结理一下思路:

    求解过程:

    首先我们要优化的问题是:

    min_{w,b,\beta } \, (\frac{1}{2}\left | w \right |^{2}+C\sum_{i=1}^{m}\beta_{i}) \\ s.t \, \, \, y_{i}(w^{T}x_{i}+b)\geqslant 1-\beta _{i}\\\beta _{i}\geq 0

    然后利用拉格朗日对偶问题将问题转化为:

    \begin{matrix} max_{\alpha }\, \, \sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}x_{i}x_{j}\\ s.t. \, \, \sum_{i=1}^{m}\alpha _{i}y_{i}=0 \\ 0\leq \alpha _{i}\leq C \end{matrix}

    接着我们使用了SMO算法求解出了一系列\alpha进而得到了W和b的更新

    核函数:

    x_{i}x换成相应核函数的内积形式K<x_{i} ,x>

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    看到很多小伙伴私信和关注,为了不迷路,欢迎大家关注笔者的微信公众号,会定期发一些关于NLP的干活总结和实践心得,当然别的方向也会发,一起学习:


    ​​​​​​​

    展开全文
  • svm原理详解(大厂面试必问)

    千次阅读 2021-08-03 07:24:11
    -------------------------------------------------------------------------------------------------------------------------------- 支持向量机原理svm: 简单直观的描述 二分类 带有松弛变量的数学模型: ...
  • 理解svm原理书籍整合

    2018-10-20 21:51:06
    其中包括理解svm背后的数学,非常适合零基础的人入门。详细的介绍了svm的发展过程,以及smo算法的解释。拉格朗日背后的数学原理,qp问题的解决等。
  • SVM原理详解

    2013-02-05 09:31:17
    SVM分类器详细介绍,可以帮助训练熟悉SVM分类器原理
  • SVM原理简介

    2019-07-15 13:40:29
    SVM原理简介 本文只是简单介绍一下SVM的理论框架,想要详细了解当中细节问题处理可以参看后续章节或者网上各种详细资料。推荐Andrew Ng的斯坦福大学机器学习课程。  支持向量机(SVM)是90年代中期...
  • SVM原理:超平面方程

    2022-03-01 10:24:54
    (1)超平面方程 3维空间中平面方程的一般形式: (1) 平面的法向量为,为平面到原点的距离。 d维空间平面方程的一般形式: ...平面的法向量为,(分号表示列向量)。...以3维空间为例,设平面上任意两点,,由于两个点...
  • SVM原理介绍

    万次阅读 多人点赞 2018-03-11 16:20:40
    一、SVM算法要解决什么问题SVM的全称是Support Vector Machine,即支持向量机,主要用于解决模式识别领域中的数据分类问题,属于有监督学习算法的一种。SVM要解决的问题可以用一个经典的二分类问题加以描述。如图1所...
  • SVM原理[定义].pdf

    2021-10-12 00:50:08
    SVM原理[定义].pdf
  • 传统的SVM做的事情其实就是找到一个超平面,实现二分类,一类+1,一类-1。如上所示。它的目的就是使得两类的间隔最大。只要确定了间隔最大和两边距离相等,就能确定唯一平面。黑色的块表示距离分割面最近的样本向量...
  • 详细介绍SVM原理、应用、并证明. 目录 1 第一层:了解 SVM 4 1.1 分类标准的起源:Logistic 回归 . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 线性分类的一个例子 . . . . . . . . . . . . . . . . . . ...
  • SVM原理

    2017-08-23 16:55:26
    讲解网址:http://blog.csdn.net/alvine008/article/details/90971051.拉格朗日乘子与KKT条件求解最优超平面; 2.松弛变量,惩罚因子防止过度拟合; 3.核函数,像高维映射
  • svm原理详解,看完就懂(一)

    万次阅读 多人点赞 2019-02-15 17:06:39
    (一)SVM的八股简介 支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中[10]...
  • 机器学习技法-SVM原理

    2018-05-26 17:14:17
    以线性二元分类为例,在对一个平面内的点进行分类的时候,通常会有无数条直线可以将两类...这里就引出了支撑向量机(SVM)这个概念。以我们通常的直觉,也会选择通过两类正中的一条直线,那么有怎么样的理论依据呢。 ...
  • 1.SVM原理 2.sklearn库SVM算法的参数介绍 2.1算法库概述 2.2sklearn内置的SVM核函数 2.3SVM分类算法库参数小结 3.基于的SVM分类器的文本分类的sklearn实现 基于朴素贝叶斯的文本分类实现参见我的博客: NLP...
  • svm原理

    2016-03-16 17:33:30
  • SVM 原理详解,通俗易懂

    万次阅读 多人点赞 2018-06-01 11:58:28
    转自:http://www.blogjava.net/zhenandaci/category/31868.html(一)SVM的简介支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的...
  • SVM原理及代码实现(学习笔记)

    千次阅读 2021-08-27 10:30:00
    支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面....
  • SVM原理及推导过程

    千次阅读 2019-06-17 17:38:51
    SVM核心是最优化方法(带约束条件,拉格朗日乘子法),思想是max(min),即最大化最小间隔(找到最小间隔的点,即支持向量),目标就是求解参数alpha、w、b,确定超平面,然后就能正常的二分类(和逻辑回归类似);...
  • (一)SVM原理

    2019-10-06 09:12:42
    本文开始主要介绍一下SVM的分类原理以及SVM的数学导出和SVM在Python上的实现。借鉴了许多文章,会在后面一一指出,如果有什么不对的希望能指正。 一、 SVM简介 首先看到SVM是在斯坦福的机器学习课程上,SVM是作为...
  • SVM原理解析

    2020-04-09 11:31:28
    SVM原理解析(转载的转载)
  • 前排提示 多公式预警,如果想真正掌握、想对SVM的推导和原理理解透彻,就请耐心的看完推导过程,博主发现很多书籍文献资料上推导过程大多有所省略,这对数学基础不牢靠的同学来说不太友好(比如博主自己 - -#),...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,979
精华内容 13,191
关键字:

svm原理