• 引言
  • 一、数学预备知识
    • 1.函数极值必要条件
    • 2.拉格朗日乘子法
    • 3.库恩-塔克条件(K-T条件)
    • 4.拉格朗日对偶问题
  • 二、线性可分支持向量机
    • 1.基本型
    • 2.对偶问题
    • 3.利用对偶问题求解www和bbb
  • 三、线性支持向量机
    • 1.基本型
    • 2.对偶问题
    • 3.利用对偶问题求解www和bbb
  • 四、非线性支持向量机
    • 1、非线性分类问题
    • 2、核函数的定义
    • 3、核技巧在支持向量机中的应用
    • 4、常用核函数
  • 五、序列最小最优化(Sequential Minimal Optimization,SMO)算法
    • 1.SMO算法思路
    • 2.构造两个变量的二次规划问题
    • 4.两个变量(α1old{α_1}^{old}α1​old和α2old{α_2}^{old}α2​old)的选择方法
    • 5.计算b和差值EiE_iEi​
    • 6.SMO算法
  • 六、SMO代码实现

引言

    支持向量机(support vector machines,SVM)是一种二值分类模型。分类学习最基本的想法就是基于训练集在样本空间中找到一个分隔超平面(separating hyperplane),将不同类别的样本分开。但能将训练样本分开的分隔面可能有很多,我们应该努力去找哪一个呢?直观上看,应该去找位于两类训练样本‘正中间’的分隔面,即图1中的红线。

图1  线性可分支持向量机

    如何寻找这条红线?我们希望找到离分隔面最近的点,确保它们离分隔面的距离尽可能远。这里点到分隔面的距离称为间隔(margin)。我们要做的就是为红线设一线性方程,用点到线的距离公式计算间隔,求出能使间隔最大化的线性方程即可求出分隔超平面。
    由于寻找分隔超平面就是寻找能使间隔最大化的函数的值,介绍理论知识部分会用到求函数极值的许多数学知识,均在‘数学预备知识’中介绍,此部分只给出结论,不予证明,有此数学基础可跳过。另外,现实中很多数据并不像图1那样清晰可分,更多时候是如图2或图3所示,它们分别对应支持向量机中由简至繁的模型:线性可分支持向量机、线性支持向量机、非线性支持向量机。

图2  线性支持向量机

图3  非线性支持向量机

一、数学预备知识

无约束条件下求函数极值

1.函数极值必要条件

设函数z=f(x,y)z=f(x,y)z=f(x,y)在点(x0,y0)(x_0,y_0)(x0​,y0​)具有偏导数,且在点(x0,y0)(x_0,y_0)(x0​,y0​)处有极值,则有fx(x0,y0)=0f_x(x_0,y_0)=0 fx​(x0​,y0​)=0fy(x0,y0)=0f_y(x_0,y_0)=0 fy​(x0​,y0​)=0以上关于二元函数的概念,可推广到nnn元函数。
例1  某厂要用钢板做成一个体积为2m32m^32m3的长方体有盖水箱,问当长、宽、高各取怎样的尺寸时,才能使用料最省?
解:
设水箱的长、宽各为xxx、yyy,则其高应为2xy2\over{xy}xy2​,此水箱所用材料的面积A=2(xy+x⋅2xy+y⋅2xy)=2(xy+2y+2x)x>0,y>0A=2\left(xy+x\cdot{2\over{xy}}+y\cdot{2\over{xy}}\right)=2\left(xy+{2\over y}+{2\over x}\right)\ \ \ \ \ \ \ \ \ \ x>0,y>0 A=2(xy+x⋅xy2​+y⋅xy2​)=2(xy+y2​+x2​)          x>0,y>0下面求使上述函数取得最小值的点(x,y),求其对x、y的一阶偏导数得Ax=2(y−2x2)=0A_x=2\left(y-{2\over{x^2}}\right)=0 Ax​=2(y−x22​)=0Ay=2(x−2y2)=0A_y=2\left(x-{2\over{y^2}}\right)=0 Ay​=2(x−y22​)=0解得x=23x=\sqrt[3]2x=32​,y=23y=\sqrt[3]2y=32​。
根据题意可知,水箱所用材料面积的最小值一定存在,并在开区域D={(x,y)∣x>0,y>0}D=\{(x,y)|x>0,y>0\}D={(x,y)∣x>0,y>0}内取得,又知函数在DDD内只有唯一的驻点(23,23)({\sqrt[3]2},{\sqrt[3]2})(32​,32​),因此可判定,当长、宽、高各取23\sqrt[3]232​、23\sqrt[3]232​、2xy=23{2\over{xy}}=\sqrt[3]2xy2​=32​时,使用料最省。

求等式约束条件下函数极值,可用拉格朗日乘子法求解

2.拉格朗日乘子法

要找函数z=f(x,y)z=f(x,y)z=f(x,y)在约束条件s.t.φ(x,y)=0(1)s.t.\ \ φ(x,y)=0\ \ \ \ \ \ \ \ \ \ \ \ \ \ (1) s.t.  φ(x,y)=0              (1)下的可能极值点,可以先作拉格朗日函数L(x,y,λ)=f(x,y)+λφ(x,y)L(x,y,λ)=f(x,y)+λφ(x,y) L(x,y,λ)=f(x,y)+λφ(x,y)其中λλλ为参数,求其对xxx与yyy的一阶偏导数,并使之为零,然后与方程(1)联立起来:fx(x,y)+λφx(x,y)=0f_x(x,y)+λφ_x(x,y)=0 fx​(x,y)+λφx​(x,y)=0fy(x,y)+λφy(x,y)=0f_y(x,y)+λφ_y(x,y)=0 fy​(x,y)+λφy​(x,y)=0φ(x,y)=0φ(x,y)=0 φ(x,y)=0由这方程组解出xxx、yyy及λλλ,这样得到的(x,y)(x,y)(x,y)就是函数f(x,y)f(x,y)f(x,y)在附加条件φ(x,y)=0φ(x,y)=0φ(x,y)=0下的可能极值点。
λλλ称为拉格朗日乘子。
这方法还可以推广到自变量多于两个而条件多于一个的情形。
例如要求函数u=f(x,y,z,t)u=f(x,y,z,t)u=f(x,y,z,t)在约束条件s.t.φ1(x,y,z,t)=0,φ2(x,y,z,t)=0(2)s.t.\ \ φ_1(x,y,z,t)=0,φ_2(x,y,z,t)=0\ \ \ \ \ \ \ \ \ \ \ \ \ (2) s.t.  φ1​(x,y,z,t)=0,φ2​(x,y,z,t)=0             (2)下的可能极值点,可以先作拉格朗日函数L(x,y,z,t,λ1,λ2)=f(x,y,z,t)+λ1φ1(x,y,z,t)+λ2φ2(x,y,z,t)L(x,y,z,t,λ_1,λ_2)=f(x,y,z,t)+λ_1φ_1(x,y,z,t)+λ_2φ_2(x,y,z,t) L(x,y,z,t,λ1​,λ2​)=f(x,y,z,t)+λ1​φ1​(x,y,z,t)+λ2​φ2​(x,y,z,t)其中λ1λ_1λ1​、λ2λ_2λ2​均为参数,求其对xxx与yyy的一阶偏导数,并使之为零,然后与(2)中2个方程联立起来求解,这样得出的(x,y,z,t)(x,y,z,t)(x,y,z,t)就是函数f(x,y,z,t)f(x,y,z,t)f(x,y,z,t)在附加条件(2)下的可能极值点。
至于如何确定所求得的点是否为极值点,在实际问题中往往可根据问题本身的性质来判定。
例2  求表面积为a2a^2a2体积为最大的长方体的体积。
解:
设长方体的三棱长为x,y,zx,y,zx,y,z,则问题就是在条件φ(x,y,z)=2xy+2xz+2yz−a2=0下φ(x,y,z)=2xy+2xz+2yz-a^2=0下φ(x,y,z)=2xy+2xz+2yz−a2=0下,求函数V=xyz(x>0,y>0,z>0)V=xyz\ (x>0,y>0,z>0)V=xyz (x>0,y>0,z>0)的最大值。作拉格朗日函数 L(x,y,z,λ)=xyz+λ(2xy+2xz+2yz−a2)L(x,y,z,λ)=xyz+λ(2xy+2xz+2yz-a^2) L(x,y,z,λ)=xyz+λ(2xy+2xz+2yz−a2)求其对x,y,zx,y,zx,y,z的偏导数,并使之为零,得到 yz+2λ(y+z)=0yz+2λ(y+z)=0 yz+2λ(y+z)=0xz+2λ(x+z)=0xz+2λ(x+z)=0 xz+2λ(x+z)=0xy+2λ(x+y)=0xy+2λ(x+y)=0 xy+2λ(x+y)=0再与约束条件φ(x,y,z)φ(x,y,z)φ(x,y,z)联立求解,得x=y=z=66ax=y=z={\sqrt6\over6}ax=y=z=66​​a,这是唯一可能的极值点,因为由问题本身可知最大值一定存在,所以最大值就在这个可能的极值点处取得。
固表面积为a2a^2a2体积为最大的长方体的体积为xyz=636a3xyz={\sqrt6\over36}a^3xyz=366​​a3。

求不等式约束条件下函数极值,可用K-T条件求解

3.库恩-塔克条件(K-T条件)

定义: 线性规划的一般形式

设X∗X^*X∗是非线性规划(4)式的极小点,且X∗X^*X∗点的所有起作用约束的梯度线性无关,则存在向量T=(λ1,λ2,⋯,λn)TT=(λ_1,λ_2,\cdots,λ_n)^TT=(λ1​,λ2​,⋯,λn​)T,使下述条件成立:

条件(5)式常简称为K-T条件,满足这个条件的点X∗X^*X∗称为库恩-塔克点(或K-T点)。
为了得出非线性规划(3)式的库恩-塔克条件,我们用

代替约束条件hi(X)=0h_i(X)=0hi​(X)=0,这样即可得出(5)求解。
上式中,λ1,λ2,...,λnλ_1,λ_2,...,λ_nλ1​,λ2​,...,λn​称为广义拉格朗日(Lagrange)乘子。
例3  用K-T条件解下述非线性规划问题min⁡f(x)=(x−3)2\min\ \ f(x)=(x-3)^2 min  f(x)=(x−3)2s.t.0≤x≤5s.t.\ \ 0≤x≤5 s.t.  0≤x≤5解:
先将该非线性规划问题写成以下形式min⁡f(x)=(x−3)2\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \min\ \ f(x)=(x-3)^2                  min  f(x)=(x−3)2s.t.g1(x)=x≥0s.t.\ \ g_1(x)=x≥0 s.t.  g1​(x)=x≥0g2(x)=5−x≥0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ g_2(x)=5-x≥0                g2​(x)=5−x≥0写出其目标函数和约束函数的梯度: ∇f(x)=2(x−3)∇f(x)=2(x-3) ∇f(x)=2(x−3)∇g1(x)=1,∇g2(x)=−1∇g_1(x)=1, ∇g_2(x)=-1 ∇g1​(x)=1,∇g2​(x)=−1对第一个和第二个约束条件分别引入广义拉格朗日乘子λ1λ_1λ1​和λ2λ_2λ2​,则可写出该问题的K-T条件如下: 2(x−3)−λ1+λ2=02(x-3)-λ_1+λ_2=0 2(x−3)−λ1​+λ2​=0λ1x=0λ_1x=0 λ1​x=0λ2(5−x)=0λ_2(5-x)=0 λ2​(5−x)=0λ1,λ2≥0λ_1,λ_2≥0 λ1​,λ2​≥0解得λ1=0λ_1=0λ1​=0,λ2=0λ_2=0λ2​=0,x=3x=3x=3。
固函数在约束条件下的最小值为f(3)=0f(3)=0f(3)=0。

例4  写出下述非线性规划问题的K-T条件 min⁡f(x1,x2)=(x1−3)2+(x2−2)2\min\ \ f(x_1,x_2)=(x_1-3)^2+(x_2-2)^2 min  f(x1​,x2​)=(x1​−3)2+(x2​−2)2s.t.4−x1−x2≥0s.t.\ \ 4-x_1-x_2≥0 s.t.  4−x1​−x2​≥0x1,x2≥0x_1,x_2≥0 x1​,x2​≥0解:
先将该非线性规划问题写成以下形式min⁡f(x1,x2)=(x1−3)2+(x2−2)2\min\ \ f(x_1,x_2)=(x_1-3)^2+(x_2-2)^2 min  f(x1​,x2​)=(x1​−3)2+(x2​−2)2s.t.g1(x1,x2)=4−x1−x2≥0\ \ \ \ \ \ s.t.\ \ g_1(x_1,x_2)=4-x1-x2≥0       s.t.  g1​(x1​,x2​)=4−x1−x2≥0g2(x1,x2)=x1≥0g_2(x_1,x_2)=x1≥0 g2​(x1​,x2​)=x1≥0g3(x1,x2)=x2≥0g_3(x_1,x_2)=x2≥0 g3​(x1​,x2​)=x2≥0写出其目标函数和约束函数的梯度:∇f(x1,x2)=(2x1−6,2x2−4)T∇f(x_1,x_2)=(2x_1-6,2x_2-4)^T ∇f(x1​,x2​)=(2x1​−6,2x2​−4)T∇g1(x1,x2)=(−1,−1)T,∇g2(x1,x2)=(1,0)T,∇g3(x1,x2)=(0,1)T∇g_1(x_1,x_2)=(-1,-1)^T, ∇g_2(x_1,x_2)=(1,0)^T,∇g_3(x_1,x_2)=(0,1)^T ∇g1​(x1​,x2​)=(−1,−1)T,∇g2​(x1​,x2​)=(1,0)T,∇g3​(x1​,x2​)=(0,1)T对三个约束条件分别引入广义拉格朗日乘子λ1λ_1λ1​、λ2λ_2λ2​和λ3λ_3λ3​,则可写出该问题的K-T条件如下: (2x1−6,2x2−4)T−λ1(−1,−1)T−λ2(1,0)T−λ3(0,1)T=0(2x_1-6,2x_2-4)^T-λ_1(-1,-1)^T-λ_2(1,0)^T-λ_3(0,1)^T=0 (2x1​−6,2x2​−4)T−λ1​(−1,−1)T−λ2​(1,0)T−λ3​(0,1)T=0分解为:2x1−6+λ1−λ2=02x_1-6+λ_1-λ_2=0 2x1​−6+λ1​−λ2​=02x2−4+λ1−λ3=02x_2-4+λ_1-λ_3=0 2x2​−4+λ1​−λ3​=0λ1(4−x1−x2)=0λ_1(4-x_1-x_2)=0 λ1​(4−x1​−x2​)=0λ2x1=0λ_2x_1=0 λ2​x1​=0λ3x2=0λ_3x_2=0 λ3​x2​=0λ1,λ2,λ3≥0λ_1,λ_2,λ_3≥0 λ1​,λ2​,λ3​≥0

求不等式约束条件下函数极值,若原始问题过于复杂,可转换成对偶问题

4.拉格朗日对偶问题

1)原始问题
假设f(x)f(x)f(x)、ci(x)c_i(x)ci​(x)、hj(x)h_j(x)hj​(x)是定义在RnR^nRn上的连续可微函数,考虑约束条件

称此约束最优化问题为原始最优化问题或原始问题。
作广义拉格朗日函数L(x,α,β)=f(x)+∑i=1kαici(x)+∑j=1lβjhj(x)L(x,α,β)=f(x)+\sum_{i=1}^kα_ic_i(x)+\sum_{j=1}^lβ_jh_j(x) L(x,α,β)=f(x)+i=1∑k​αi​ci​(x)+j=1∑l​βj​hj​(x)其中x=(x1,x2,...,xn)T∈Rnx=(x_1,x_2,...,x_n)^T∈R^nx=(x1​,x2​,...,xn​)T∈Rn,αiα_iαi​和βjβ_jβj​是拉格朗日乘子且αi≥0α_i≥0αi​≥0。考虑xxx的函数:θp(x)=max⁡α,β,αi≥0L(x,α,β)θ_p(x)=\max_{α,β,α_i≥0}L(x,α,β) θp​(x)=α,β,αi​≥0max​L(x,α,β)这里下标P表示原始问题,则θp(x)=max⁡α,β,αi≥0f(x)+∑i=1kαici(x)+∑j=1lβjhj(x)θ_p(x)=\max_{α,β,α_i≥0}f(x)+\sum_{i=1}^kα_ic_i(x)+\sum_{j=1}^lβ_jh_j(x) θp​(x)=α,β,αi​≥0max​f(x)+i=1∑k​αi​ci​(x)+j=1∑l​βj​hj​(x)因为αi≥0α_i≥0αi​≥0,ci(x)≤0c_i(x)≤0ci​(x)≤0,hj(x)=0h_j(x)=0hj​(x)=0,解得θP(x)=f(x)θ_P(x)=f(x)θP​(x)=f(x)。
考虑极小化问题min⁡xθp(x)=min⁡xmax⁡α,β,αi≥0L(x,α,β)\min_xθ_p(x)=\min_x\max_{α,β,α_i≥0}L(x,α,β) xmin​θp​(x)=xmin​α,β,αi​≥0max​L(x,α,β)它是与原始最优化问题(6)等价的,即它们有相同的解。问题min⁡xmax⁡α,β,αi≥0L(x,α,β)\min_x\max_{α,β,α_i≥0}L(x,α,β)minx​maxα,β,αi​≥0​L(x,α,β)称为广义拉格朗日的极小极大问题。
为了方便,定义原始问题的最优值p∗=min⁡xθp(x)p^*=\min_xθ_p(x) p∗=xmin​θp​(x)称为原始问题的值。
2)对偶问题θD(α,β)=min⁡xL(x,α,β)θ_D(α,β)=\min_xL(x,α,β) θD​(α,β)=xmin​L(x,α,β)再考虑极大化θD(α,β)=min⁡xL(x,α,β)θ_D(α,β)=\min_xL(x,α,β)θD​(α,β)=minx​L(x,α,β),即max⁡α,β,αi≥0θD(α,β)=max⁡α,β,αi≥0min⁡xL(x,α,β)\max_{α,β,α_i≥0}θ_D(α,β)=\max_{α,β,α_i≥0}\min_xL(x,α,β) α,β,αi​≥0max​θD​(α,β)=α,β,αi​≥0max​xmin​L(x,α,β)问题max⁡α,β,αi≥0min⁡xL(x,α,β)\max_{α,β,α_i≥0}\min_xL(x,α,β)maxα,β,αi​≥0​minx​L(x,α,β)称为广义拉格朗日的极大极小问题。
将拉格朗日函数的极大极小问题表示为约束最优化问题:

称为原始问题的对偶问题。
为了方便,定义对偶问题的最优值d∗=max⁡α,β,αi≥0θD(α,β)d^*=\max_{α,β,α_i≥0}θ_D(α,β) d∗=α,β,αi​≥0max​θD​(α,β)称为对偶问题的值。
3)原始问题与对偶问题的关系
对原始问题(6)和对偶问题(7),假设函数f(x)f(x)f(x)和ci(x)c_i(x)ci​(x)是凸函数,hj(x)h_j(x)hj​(x)是仿射函数,并且不等式约束ci(x)c_i(x)ci​(x)是严格可行的,即存在xxx,对所有iii有ci(x)<0c_i(x)<0ci​(x)<0,则存在x∗x^*x∗、α∗α^*α∗、β∗β^*β∗,使得x∗x^*x∗是原始问题的解,α∗α^*α∗、β∗β^*β∗是对偶问题的解,并且p∗=d∗=L(x∗,α∗,β∗)p^*=d^*=L(x^*,α^*,β^*) p∗=d∗=L(x∗,α∗,β∗)x∗x^*x∗和α∗α^*α∗、β∗β^*β∗分别是原始问题和对偶问题的解的充分必要条件是x∗x^*x∗、α∗α^*α∗、β∗β^*β∗满足K-T条件。
例5  求下列非线性规划问题的对偶问题min⁡x12+x22\min\ \ {x_1}^2+{x_2}^2 min  x1​2+x2​2s.t.4−x1−x2≤0s.t.\ \ 4-x_1-x_2≤0 s.t.  4−x1​−x2​≤0解:
该问题的拉格朗日函数为L(x,α)=x12+x22+α(4−x1−x2),α≥0L(x,α)={x_1}^2+{x_2}^2+α(4-x_1-x_2),\ \ \ \ \ \ \ α≥0 L(x,α)=x1​2+x2​2+α(4−x1​−x2​),       α≥0设f(x)=x12+x22f(x)={x_1}^2+{x_2}^2f(x)=x1​2+x2​2,其中x=(x1,x2)Tx=(x_1,x_2)^Tx=(x1​,x2​)T。则原始问题为:min⁡xf(x)=min⁡xθP(x)=min⁡xmax⁡α,α≥0L(x,α)\min_x\ f(x)=\min_x\ θ_P(x)=\min_x\max_{α,α≥0}L(x,α) xmin​ f(x)=xmin​ θP​(x)=xmin​α,α≥0max​L(x,α)对偶问题为:max⁡α,α≥0θD(α)=max⁡α,α≥0min⁡xL(x,α)\max_{α,α≥0}θ_D(α)=\max_{α,α≥0}\min_xL(x,α) α,α≥0max​θD​(α)=α,α≥0max​xmin​L(x,α)解min⁡xL(x,α)=min⁡xx12+x22+α(4−x1−x2)\min_xL(x,α)=\min_x{x_1}^2+{x_2}^2+α(4-x_1-x_2)minx​L(x,α)=minx​x1​2+x2​2+α(4−x1​−x2​),求其对x1x_1x1​、x2x_2x2​的一阶偏导数得Lx1=2x1−α=0L_{x1}=2x_1-α=0 Lx1​=2x1​−α=0Lx2=2x2−α=0L_{x2}=2x_2-α=0 Lx2​=2x2​−α=0解得x1=α2x_1={α\over2}x1​=2α​,x2=α2x_2={α\over2}x2​=2α​,代入得min⁡xL(x,α)=−α22+4α\min_xL(x,α)=-{{α^2}\over2}+4αminx​L(x,α)=−2α2​+4α
求得对偶问题为max⁡α,α≥0θD(α)=max⁡α,α≥0−α22+4α\max_{α,α≥0}θ_D(α)=\max_{α,α≥0}-{{α^2}\over2}+4α α,α≥0max​θD​(α)=α,α≥0max​−2α2​+4α

二、线性可分支持向量机

1.基本型

给定训练集D={(x1,y1),(x2,y2),⋯,(xN,yN)}D=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}D={(x1​,y1​),(x2​,y2​),⋯,(xN​,yN​)},yi∈{−1,1}y_i∈\{-1,1\}yi​∈{−1,1},分类学习最基本的想法就是基于训练集DDD在样本空间中找到一个分隔超平面,将不同类别的样本分开。
在样本空间中,分隔超平面可通过如下线性方程来描述:wTx+b=0(8)w^Tx+b=0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (8) wTx+b=0                                (8)其中w=(w1,w2,⋯,wn)Tw=(w_1,w_2,\cdots,w_n)^Tw=(w1​,w2​,⋯,wn​)T为法向量,决定了分隔面的方向,bbb为位移项,决定了分隔面与原点之间的距离。样本空间中任意点x到分隔面的距离可写为r=∣wTx+b∣∣∣w∣∣r={{|w^Tx+b|}\over{||w||}} r=∣∣w∣∣∣wTx+b∣​证明:
考虑二维空间,则(8)可表示为w1x1+w2x2+b=0w_1x_1+w_2x_2+b=0w1​x1​+w2​x2​+b=0,点(x1,x2)(x_1,x_2)(x1​,x2​)到线的距离为r=∣w1x1+w2x2+b∣w12+w22r={{|w_1x_1+w_2x_2+b|}\over{\sqrt{{w_1}^2+{w_2}^2}}} r=w1​2+w2​2​∣w1​x1​+w2​x2​+b∣​考虑三维空间,则(8)可表示为w1x1+w2x2+w3x3+b=0w_1x_1+w_2x_2+w_3x_3+b=0w1​x1​+w2​x2​+w3​x3​+b=0,点(x1,x2,x3)(x_1,x_2,x_3)(x1​,x2​,x3​)到面的距离为r=∣w1x1+w2x2+w3x3+b∣w12+w22+w32r={{|w_1x_1+w_2x_2+w_3x_3+b|}\over{\sqrt{{w_1}^2+{w_2}^2+{w_3}^2}}} r=w1​2+w2​2+w3​2​∣w1​x1​+w2​x2​+w3​x3​+b∣​以此类推,可得nnn维空间,点(x1,x2,…,xn(x_1,x_2,…,x_n(x1​,x2​,…,xn​)到分隔面的距离为r=∣w1x1+w2x2+⋯+wnxn+b∣w12+w22+⋯+wn2=∣wTx+b∣∣∣w∣∣r={{|w_1x_1+w_2x_2+\cdots+w_nx_n+b|}\over{\sqrt{{w_1}^2+{w_2}^2+\cdots+{w_n}^2}}}={{|w^Tx+b|}\over{||w||}} r=w1​2+w2​2+⋯+wn​2​∣w1​x1​+w2​x2​+⋯+wn​xn​+b∣​=∣∣w∣∣∣wTx+b∣​
假设分隔面能将训练样本正确分类,即对于(xi,yi)∈D(x_i,y_i)∈D(xi​,yi​)∈D,若yi=+1y_i=+1yi​=+1,则有wTx+b>0w^Tx+b>0wTx+b>0;若yi=−1y_i=- 1yi​=−1,则有wTx+b<0w^Tx+b<0wTx+b<0。令

如图4所示,距离分隔面最近的这几个训练样本点(位于黑线上的点)使式(9)的等号成立,它们被称为“支持向量”,两个异类支持向量到超平面的距离(两条黑线的间隔)之和为γ=2∣∣w∣∣γ={2\over{||w||}} γ=∣∣w∣∣2​它被称为间隔。
证明:
假设ξ>0ξ>0ξ>0且ξ2=1ξ^2=1ξ2=1。
若yi=+1y_i=+1yi​=+1,则有wTx+b>0w^Tx+b>0wTx+b>0等价于wTx+b≥ξw^Tx+b≥ξwTx+b≥ξ,等号两边同时乘以ξξξ得ξwTx+ξb≥1ξw^Tx+ξb≥1ξwTx+ξb≥1;
若yi=−1y_i=-1yi​=−1,则有wTx+b<0w^Tx+b<0wTx+b<0等价于wTx+b≤−ξw^Tx+b≤-ξwTx+b≤−ξ,等号两边同时乘以ξξξ得ξwTx+ξb≤−1ξw^Tx+ξb≤-1ξwTx+ξb≤−1;
即若分隔面能将训练样本正确分类,则总存在缩放变换ξw→w′ξw\rightarrow w'ξw→w′和ξb→b′ξb\rightarrow b'ξb→b′使式(9)成立。

图4

欲找到具有“最大间隔”的分隔面,也就是要找到能满足式(9)中约束的参数www和bbb,使
得γγγ最大,即

显然为了最大化间隔,仅需要最大化∣∣w∣∣−1||w||^{-1}∣∣w∣∣−1,这等价于最小化∣∣w∣∣2||w||^2∣∣w∣∣2,于是式(10)可重写为

这就是支持向量机的基本型。

2.对偶问题

基本型的对偶问题为:

证明:
基本型的拉格朗日函数为L(w,b,α)=∣∣w∣∣22+∑i=1nαi(1−yi(wTxi+b)),i=1,2,...,nL(w,b,α)={{||w||^2}\over2}+\sum_{i=1}^nα_i\left(1−y_i(w^Tx_i +b)\right),\ \ \ \ \ \ \ \ \ \ i=1,2,...,n L(w,b,α)=2∣∣w∣∣2​+i=1∑n​αi​(1−yi​(wTxi​+b)),          i=1,2,...,n其中α=(α1,α2,...,αn)α=(α_1,α_2,...,α_n)α=(α1​,α2​,...,αn​),设f(w,b)=∣∣w∣∣22f(w,b)={{||w||^2}\over2}f(w,b)=2∣∣w∣∣2​,则原始问题为min⁡w,bf(w,b)=min⁡w,bθP(w,b)=min⁡w,bmax⁡α,α≥0L(w,b,α)\min_{w,b}\ f(w,b)=\min_{w,b}\ θ_P(w,b)=\min_{w,b}\max_{α,α≥0}L(w,b,α) w,bmin​ f(w,b)=w,bmin​ θP​(w,b)=w,bmin​α,α≥0max​L(w,b,α)对偶问题为:max⁡α,α≥0θD(α)=max⁡α,α≥0min⁡w,bL(w,b,α)\max_{α,α≥0}θ_D(α)=\max_{α,α≥0}\min_{w,b}L(w,b,α) α,α≥0max​θD​(α)=α,α≥0max​w,bmin​L(w,b,α)要求对偶问题,先求minw,bL(w,b,α)min_{w,b}L(w,b,α)minw,b​L(w,b,α),即求L(w,b,α)L(w,b,α)L(w,b,α)对www和bbb的一阶偏导数并使之为零Lw=w−∑i=1nαiyixi=0L_w=w-\sum_{i=1}^nα_iy_ix_i=0 Lw​=w−i=1∑n​αi​yi​xi​=0Lb=−∑i=1nαiyi=0L_b=-\sum_{i=1}^nα_iy_i=0 Lb​=−i=1∑n​αi​yi​=0解得w=∑i=1nαiyixi(13)w=\sum_{i=1}^nα_iy_ix_i\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (13) w=i=1∑n​αi​yi​xi​                  (13)0=∑i=1nαiyi(14)0=\sum_{i=1}^nα_iy_i\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (14) 0=i=1∑n​αi​yi​                        (14)将(13)代入拉格朗日函数L(w,b,α)L(w,b,α)L(w,b,α),并利用(14)得

已知minw,bL(w,b,α)min_{w,b}L(w,b,α)minw,b​L(w,b,α)则可得对偶问题(12)

3.利用对偶问题求解www和bbb

设α∗=(α1∗,α2∗,...,αn∗)Tα^*=({α_1}^*,{α_2}^*,...,{α_n}^*)^Tα∗=(α1​∗,α2​∗,...,αn​∗)T是对偶问题(12)的解,则存在下标jjj,使得αj∗>0{α_j}^*>0αj​∗>0,并可按下式求得原始问题(11)的解w∗w^*w∗、b∗b^*b∗得w∗=∑i=1nαiyixi(15)w^*=\sum_{i=1}^nα_iy_ix_i\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (15) w∗=i=1∑n​αi​yi​xi​                   (15)b∗=yi−∑i=1nαiyixiTxj(16)b^*=y_i-\sum_{i=1}^nα_iy_i{x_i}^T{x_j}\ \ \ \ \ \ \ \ \ (16) b∗=yi​−i=1∑n​αi​yi​xi​Txj​         (16)
证明:
w∗w^*w∗、b∗b^*b∗和α∗α^*α∗分别是原始问题和对偶问题的解的充分必要条件是w∗w^*w∗、b∗b^*b∗、α∗α^*α∗满足K-T条件。
先将(11)式写成以下形式:min⁡w,bf(w,b)=∣∣w∣∣22\min_{w,b}\ f(w,b)={{||w||^2}\over2} w,bmin​ f(w,b)=2∣∣w∣∣2​s.t.gi(w,b)=yi(wTxi+b)−1≥0,i=1,2,...,ns.t.\ g_i(w,b)=y_i(w^Tx_i+b)-1≥0,\ \ \ \ \ \ \ i=1,2,...,n s.t. gi​(w,b)=yi​(wTxi​+b)−1≥0,       i=1,2,...,n写出其目标函数和约束函数的梯度:∇f(w,b)=(∣∣w∣∣,0)T,∇gi(w,b)=(xiyi,yi)T∇f(w,b)=(||w||,0)^T, ∇g_i(w,b)=(x_iy_i,y_i)^T ∇f(w,b)=(∣∣w∣∣,0)T,∇gi​(w,b)=(xi​yi​,yi​)T对nnn个约束条件分别引入广义拉格朗日乘子α1,α2,...,αnα_1,α_2,...,α_nα1​,α2​,...,αn​,则可写出该问题的K-T条件如下:(∣∣w∣∣,0)T−∑i=1nαi(xiyi,yi)T=0(||w||,0)^T-\sum_{i=1}^nα_i(x_iy_i,y_i)^T=0 (∣∣w∣∣,0)T−i=1∑n​αi​(xi​yi​,yi​)T=0将上式分解为: ∣∣w∣∣=∑i=1nαixiyi=0||w||=\sum_{i=1}^nα_ix_iy_i=0 ∣∣w∣∣=i=1∑n​αi​xi​yi​=0−∑i=1nαiyi=0-\sum_{i=1}^nα_iy_i=0 −i=1∑n​αi​yi​=0αi(yi(wTxi+b)−1)=0α_i(y_i(w^Tx_i+b)-1)=0 αi​(yi​(wTxi​+b)−1)=0αi≥0,i=1,2,...,nα_i≥0, \ \ \ \ \ \ \ \ \ \ i=1,2,...,n αi​≥0,          i=1,2,...,n由此解得式(15)
其中至少有一个αj∗>0{α_j}^*>0αj​∗>0(用反证法,假设α∗=0α^*=0α∗=0,由式(15)可知w∗=0w^*=0w∗=0,而w∗=0w^*=0w∗=0不是原始问题(11)的解,产生矛盾),对此jjj有yj(w∗xj+b∗)−1=0(17)y_j(w^*x_j+b^*)-1=0 (17) yj​(w∗xj​+b∗)−1=0(17)注意到yj2=1{y_j}^2=1yj​2=1,将(17)两边同时乘以yjy_jyj​,将式(15)代入即得式(16)
综上所述,对于给定的线性可分训练数据集,可以先求对偶问题(12)的解α∗α^*α∗,再利用式(15) (16)求得原始问题的解w∗w^*w∗和b∗b^*b∗,从而得到分隔超平面的线性方程。这种算法称为线性可分支持向量机的对偶算法,是线性可分支持向量机学习的基本算法。

三、线性支持向量机

1.基本型

在前面的讨论中,我们一直假定训练样本是线性可分的,即存在一个分隔面能将不同类的样本完全划分开。然而在现实任务中,往往存在一些异常点。线性不可分意味着某些样本点(xi,yi)(x_i,y_i)(xi​,yi​)不能满足函数间隔大于等于1的约束条件,如图5绿色框中的两个样本点。为了解决这个问题,可以对每个样本点(xi,yi)(x_i,y_i)(xi​,yi​)引进一个松弛变量ξi≥0ξ_i≥0ξi​≥0,使函数间隔加上松弛变量大于等于1,这样,约束条件变为yi(wTxi+b)+ξi≥1y_i(w^Tx_i+b)+ξ_i≥1 yi​(wTxi​+b)+ξi​≥1目标函数由原来的minw,b∣∣w∣∣22min_{w,b}{{||w||^2}\over2}minw,b​2∣∣w∣∣2​变成min⁡w,b,ξ∣∣w∣∣22+C∑i=1nξi(18)\min_{w,b,ξ}\ {{||w||^2}\over2}+C\sum_{i=1}^nξ_i\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (18) w,b,ξmin​ 2∣∣w∣∣2​+Ci=1∑n​ξi​               (18)这里C>0C>0C>0称为惩罚参数,一般由应用问题决定,CCC值大时对误分类的惩罚增大,CCC值小时对误分类的惩罚减小。最小化目标函数(18)包含两层含义:使∣∣w∣∣22{{||w||^2}\over2}2∣∣w∣∣2​尽量小即间隔尽量大,同时使误分类点的个数尽量小。至此,线性支持向量机基本型如下:

图5

2.对偶问题

基本型的对偶问题为:

证明:
基本型的拉格朗日函数为L(w,b,ξ,α,μ)=∣∣w∣∣22+C∑i=1nξi+∑i=1nαi(1−yi(wTxi+b)−ξ)−∑i=1nμiξiL(w,b,ξ,α,μ)={{||w||^2}\over2}+C\sum_{i=1}^nξ_i+\sum_{i=1}^nα_i\left(1-y_i(w^Tx_i+b)-ξ\right)-\sum_{i=1}^nμ_iξ_i L(w,b,ξ,α,μ)=2∣∣w∣∣2​+Ci=1∑n​ξi​+i=1∑n​αi​(1−yi​(wTxi​+b)−ξ)−i=1∑n​μi​ξi​其中αi≥0α_i≥0αi​≥0,μi≥0μ_i≥0μi​≥0,设f(w,b,ξ)=∣∣w∣∣22+C∑i=1nξif(w,b,ξ)={{||w||^2}\over2}+C\sum_{i=1}^nξ_if(w,b,ξ)=2∣∣w∣∣2​+C∑i=1n​ξi​,则原始问题为min⁡w,b,ξf(w,b,ξ)=min⁡w,b,ξθP(w,b,ξ)=min⁡w,b,ξmax⁡α,μL(w,b,ξ,α,μ)\min_{w,b,ξ}\ f(w,b,ξ)=\min_{w,b,ξ}\ θ_P(w,b,ξ)=\min_{w,b,ξ}\ \max_{α,μ}L(w,b,ξ,α,μ) w,b,ξmin​ f(w,b,ξ)=w,b,ξmin​ θP​(w,b,ξ)=w,b,ξmin​ α,μmax​L(w,b,ξ,α,μ)对偶问题为:max⁡α,μθD(α,μ)=max⁡α,μmin⁡w,b,ξL(w,b,ξ,α,μ)\max_{α,μ}θ_D(α,μ)=\max_{α,μ}\min_{w,b,ξ}L(w,b,ξ,α,μ) α,μmax​θD​(α,μ)=α,μmax​w,b,ξmin​L(w,b,ξ,α,μ)解min⁡w,b,ξL(w,b,ξ,α,μ)\min_{w,b,ξ}L(w,b,ξ,α,μ)minw,b,ξ​L(w,b,ξ,α,μ),求L(w,b,ξ,α,μ)L(w,b,ξ,α, μ)L(w,b,ξ,α,μ)对www、bbb和ξξξ的一阶偏导数得Lw=w−∑i=1nαixiyi=0L_w=w-\sum_{i=1}^nα_ix_iy_i=0 Lw​=w−i=1∑n​αi​xi​yi​=0Lb=−∑i=1nαiyi=0L_b=-\sum_{i=1}^nα_iy_i=0 Lb​=−i=1∑n​αi​yi​=0Lξ=C−αi−μi=0L_ξ=C-α_i-μ_i=0 Lξ​=C−αi​−μi​=0解得w=∑i=1nαixiyi(21)w=\sum_{i=1}^nα_ix_iy_i\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (21) w=i=1∑n​αi​xi​yi​                   (21)∑i=1nαiyi=0(22)\sum_{i=1}^nα_iy_i=0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (22) i=1∑n​αi​yi​=0                        (22)C−αi−μi=0(23)C-α_i-μ_i=0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (23) C−αi​−μi​=0                  (23)将(21)代入min⁡w,b,ξL(w,b,ξ,α,μ)\min_{w,b,ξ}L(w,b,ξ,α,μ)minw,b,ξ​L(w,b,ξ,α,μ),并利用(22)(23)求得对偶问题max⁡α,μ∑i=1nαi−12∑i=1n∑j=1nαiαjyiyjxiTxj\max_{α,μ}\sum_{i=1}^nα_i-{1\over2}\sum_{i=1}^n\sum_{j=1}^nα_iα_jy_iy_j{x_i}^Tx_j α,μmax​i=1∑n​αi​−21​i=1∑n​j=1∑n​αi​αj​yi​yj​xi​Txj​s.t.∑i=1nαiyi=0s.t.\ \ \sum_{i=1}^nα_iy_i=0 s.t.  i=1∑n​αi​yi​=0C−αi−μi=0(24)C-α_i-μ_i=0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (24) C−αi​−μi​=0                   (24)αi≥0,i=1,2,…,nα_i≥0,\ \ \ \ \ i=1,2,…,n αi​≥0,     i=1,2,…,nμi≥0,i=1,2,…,nμ_i≥0,\ \ \ \ \ i=1,2,…,n μi​≥0,     i=1,2,…,n利用等式(24)得μi=C−αiμ_i=C-α_iμi​=C−αi​,即可消去μiμ_iμi​,并将(24)的约束写成0≤αi≤C0≤α_i≤C 0≤αi​≤C从而得到最终的对偶问题(20)

3.利用对偶问题求解www和bbb

设α∗=(α1∗,α2∗,...,αn∗)Tα^*=({α_1}^*,{α_2}^*,...,{α_n}^*)^Tα∗=(α1​∗,α2​∗,...,αn​∗)T是对偶问题(20)的解,若存在α∗的α^*的α∗的一个分量αj∗{α_j}^*αj​∗,满足0<αj∗<C0<{α_j}^*<C0<αj​∗<C,则原始问题(19)的解w∗w^*w∗、b∗b^*b∗可按下式求得w∗=∑i=1nαixiyi(25)w^*=\sum_{i=1}^nα_ix_iy_i\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (25) w∗=i=1∑n​αi​xi​yi​                   (25)b∗=yi=∑i=1nαiyixiTxj(26)b^*=y_i=\sum_{i=1}^nα_iy_i{x_i}^Tx_j\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (26) b∗=yi​=i=1∑n​αi​yi​xi​Txj​                   (26)证明:
w∗w^*w∗、b∗b^*b∗和α∗α^*α∗分别是原始问题和对偶问题的解的充分必要条件是w∗w^*w∗、b∗b^*b∗、α∗α^*α∗满足K-T条件。
先将式(19)写成以下形式:min⁡w,b,ξf(w,b,ξ)=∣∣w∣∣22+C∑i=1nξi\min_{w,b,ξ}\ f(w,b,ξ)={{||w||^2}\over2}+C\sum_{i=1}^nξ_i w,b,ξmin​ f(w,b,ξ)=2∣∣w∣∣2​+Ci=1∑n​ξi​s.t.gi(w,b,ξi)=yi(wTxi+b)+ξi−1≥0s.t.\ \ g_i(w,b,ξ_i)=y_i(w^Tx_i+b)+ξ_i-1≥0 s.t.  gi​(w,b,ξi​)=yi​(wTxi​+b)+ξi​−1≥0hi(w,b,ξi)=ξi≥0h_i(w,b,ξ_i)=ξ_i≥0 hi​(w,b,ξi​)=ξi​≥0写出其目标函数和约束函数的梯度:∇f(w,b,ξ)=(∣∣w∣∣,0,C)T∇f(w,b,ξ)=(||w||,0,C)^T ∇f(w,b,ξ)=(∣∣w∣∣,0,C)T∇gi(w,b,ξi)=(xiyi,yi,1)T,∇hi(w,b,ξi)=(0,0,1)T∇g_i(w,b,ξ_i)=(x_iy_i,y_i,1)^T, ∇h_i(w,b,ξ_i)=(0,0,1)^T ∇gi​(w,b,ξi​)=(xi​yi​,yi​,1)T,∇hi​(w,b,ξi​)=(0,0,1)T对2n2n2n个约束条件分别引入广义拉格朗日乘子α1,α2,...,αnα_1,α_2,...,α_nα1​,α2​,...,αn​和μ1,μ2,…,μnμ_1,μ_2,…,μ_nμ1​,μ2​,…,μn​,则可写出该问题的K-T条件如下:(∣∣w∣∣,0,C)T−∑i=1nαi(xiyi,yi,1)T=∑i=1nμi(0,0,1)T=0(||w||,0,C)^T-\sum_{i=1}^nα_i(x_iy_i,y_i,1)^T=\sum_{i=1}^nμ_i(0,0,1)^T=0 (∣∣w∣∣,0,C)T−i=1∑n​αi​(xi​yi​,yi​,1)T=i=1∑n​μi​(0,0,1)T=0将上式分解为: ∣∣w∣∣−∑i=1nαixiyi=0||w||-\sum_{i=1}^nα_ix_iy_i=0 ∣∣w∣∣−i=1∑n​αi​xi​yi​=0−∑i=1nαiyi=0-\sum_{i=1}^nα_iy_i=0 −i=1∑n​αi​yi​=0C−αi−μi=0C-α_i-μ_i=0 C−αi​−μi​=0αi(yi(wTxi+b)+ξi−1)=0,i=1,2,…,nα_i(y_i(w^Tx_i+b)+ξ_i -1)=0,\ \ \ \ \ \ \ \ i=1,2,…,n αi​(yi​(wTxi​+b)+ξi​−1)=0,        i=1,2,…,nμiξi=0,i=1,2,…,nμ_iξ_i=0,\ \ \ \ \ \ \ \ i=1, 2,…,n μi​ξi​=0,        i=1,2,…,nαi≥0,i=1,2,...,nα_i≥0,\ \ \ \ \ \ \ \ i=1,2,...,n αi​≥0,        i=1,2,...,nμi≥0,i=1,2,...,nμ_i≥0,\ \ \ \ \ \ \ \ i=1,2,...,n μi​≥0,        i=1,2,...,n由此解得式(25)
选择一个αj∗{α_j}^*αj​∗满足0<αj∗<C0<{α_j}^*<C0<αj​∗<C,对此有yj(w∗xj+b∗)−1=0(27)y_j(w^*x_j+b^*)-1=0\ \ \ \ \ \ \ \ \ \ \ \ (27) yj​(w∗xj​+b∗)−1=0            (27)注意到yj2=1{y_j}^2=1yj​2=1,将(27)两边同时乘以yjy_jyj​,将式(25)代入即得式(26)
综上所述,对于给定的训练数据集,可以先求对偶问题(20)的解α∗α^*α∗,再利用式(25)(26)求得原始问题的解w∗w^*w∗和b∗b^*b∗,从而得到分隔超平面的线性方程。
</br/>

四、非线性支持向量机

1、非线性分类问题

    一般来说,对给定的一个训练数据集,如果能用一个超曲面将数据集正确分开,则称这个问题为非线性分类问题。
    在图3中,数据点处于一个圆中,无法用直线(线性模型)将数据正确分开,但可以用一条椭圆曲线(非线性模型)将它们正确分开。
    非线性问题往往不好求解,所以希望能用线性分类问题的方法解决,所采用的方法是进行一个非线性变换,将非线性问题变换为线性问题,通过解变换后的线性问题的方法求解原来的非线性问题。

2、核函数的定义

    设X是输入空间,又称H为特征空间(希尔伯特空间),如果存在一个从X到H的映射φ(x):X→Hφ(x) : X \rightarrow H φ(x):X→H使得对所有z,x∈X,函数K(x,z)满足条件K(x,z)=φ(x)⋅φ(z)K(x,z)=φ(x)·φ(z) K(x,z)=φ(x)⋅φ(z)则称K(x,z)为核函数,φ(x)为映射函数,式中φ(x)·φ(z)为φ(x)和φ(z)的内积。
    核技巧的想法是,在学习与预测中只定义核函数K(x,z),而不显式地定义映射函数φ。通常,直接计算K(x,z)比较容易,而通过φ(x)和φ(z)计算K(x,z)并不容易。
例6
如下图,左边椭圆方程为w1(x(1))2+w2(x(2))2+b=0w_1(x^{(1)})^2+w_2(x^{(2)})^2+b=0 w1​(x(1))2+w2​(x(2))2+b=0定义映射y=φ(x)=((x(1))2,(x(2))2)Ty=φ(x)=((x^{(1)})^2,(x^{(2)})^2)^T y=φ(x)=((x(1))2,(x(2))2)T则可将椭圆变换为下图中右边的直线w1y(1)+w2y(2)+b=0w_1y^{(1)}+w_2y^{(2)}+b=0 w1​y(1)+w2​y(2)+b=0根据定义可得对所有z,x∈X,核函数为K(x,z)=φ(x)⋅φ(z)=(x(1))2(z(1))2+(x(2))2(z(2))2K(x,z)=φ(x)·φ(z)=(x^{(1)})^2(z^{(1)})^2+(x^{(2)})^2(z^{(2)})^2 K(x,z)=φ(x)⋅φ(z)=(x(1))2(z(1))2+(x(2))2(z(2))2

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

    我们注意到在线性支持向量机的对偶问题中,无论是目标函数还是决策函数都只涉及输入实例与实例之间的内积。在对偶问题(20)的目标函数中的内积xiTxjx_i^Tx_jxiT​xj​可以用核函数K(xi,xj)=xiTxjK(x_i,x_j)=x_i^Tx_jK(xi​,xj​)=xiT​xj​来代替。

4、常用核函数


</br/>

五、序列最小最优化(Sequential Minimal Optimization,SMO)算法

    如何求解式(20)的解α*呢?人们通过利用问题本身的特性,提出了很多高效算法,SMO就是其中一个著名的代表,这种算法1998年由Platt提出。
    将对偶问题(20)的目标函数求极大转换为求极小,即可得到SMO算法要解的如下问题:

其中K(xi,xj)=xiTxjK(x_i,x_j)={x_i}^Tx_jK(xi​,xj​)=xi​Txj​,在这个问题中,变量是拉格朗日乘子,一个变量αiα_iαi​对应一个样本点(xi,yi)(x_i,y_i)(xi​,yi​),变量的总数等于训练样本容量NNN。

1.SMO算法思路

    SMO是一种启发式算法,该算法并不直接求解对偶问题,而是从K-T条件入手,如果所有变量的解α∗α^*α∗都满足此最优化问题的K-T条件,那么这个最优化问题的解就得到了,因为K-T条件是该最优化问题的充分必要条件。具体做法如下:
    首先,初始化一个ααα,此ααα满足对偶问题的约束条件(29)(30),若ααα也刚好满足K-T条件,得解。然而,很多时候我们需要不断优化ααα,直到ααα即满足(29)(30)也满足K-T条件,以此来求得最优解。
    如何优化ααα呢?
    先选择两个待优化的变量αiold{α_i}^{old}αi​old和αjold{α_j}^{old}αj​old(其中一个是违反K-T条件最严重的,另一个由约束条件自动确定),其他变量固定,从而构造一个新的二次规划问题,问题就变成简单的求二次函数极值。我们不太可能求解一次就让优化后的αnewα^{new}αnew满足K-T条件,但是关于优化后的αinew{α_i}^{new}αi​new和αjnew{α_j}^{new}αj​new应该更接近原始问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。
    如此,SMO算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。

2.构造两个变量的二次规划问题

不失一般性,假设选择的两个变量是α1α_1α1​和α2α_2α2​,其他变量αiα_iαi​(i=3,4,…,ni=3,4,…,ni=3,4,…,n)是固定的。于是(28)-(30)的子问题可以写成:

其中Kij=K(xi,xj)K_{ij}=K(x_i,x_j)Kij​=K(xi​,xj​),i,j=1,2,…,ni,j=1,2,…,ni,j=1,2,…,n,ξξξ是常数。
######3.两个变量二次规划问题的求解方法
假设问题的初始解为αiold{α_i}^{old}αi​old、αjold{α_j}^{old}αj​old,最优解为αinew{α_i}^{new}αi​new、αjnew{α_j}^{new}αj​new,并且假设未经剪辑(忽略约束条件(33))时α2α_2α2​的最优解为α2new,unc{α_2}^{new,unc}α2​new,unc。
为了叙述简单,记g(x)=∑j=1nαjyjK(x,xj)+bg(x)=\sum_{j=1}^nα_jy_jK(x,x_j)+b g(x)=j=1∑n​αj​yj​K(x,xj​)+b令Ei=g(xi)−yi=(∑j=1nαiyiK(xi,xj)+b)−yi,i=1,2(34)E_i=g(x_i)-y_i=\left(\sum_{j=1}^nα_iy_iK(x_i,x_j)+b\right)-y_i,\ \ \ \ \ i=1,2\ \ \ \ \ (34) Ei​=g(xi​)−yi​=(j=1∑n​αi​yi​K(xi​,xj​)+b)−yi​,     i=1,2     (34)当i=1,2i=1,2i=1,2时,EiE_iEi​为函数g(x)g(x)g(x)对输入xix_ixi​的预测值与真实输出yiy_iyi​之差。
则α2new,unc=α2old+y2(E1−E2)K11+K22−2K12(35){α_2}^{new,unc}={α_2}^{old}+{{y_2(E_1-E_2)}\over{K_{11}+K_{22}-2K_{12}}}\ \ \ \ \ \ \ \ \ \ (35) α2​new,unc=α2​old+K11​+K22​−2K12​y2​(E1​−E2​)​          (35)求α2new{α_2}^{new}α2​new得

其中当y1y_1y1​、y2y_2y2​异号L=max(0,α2old−α1old),H=min(C,C+α2old−α1old)L= max(0,{α_2}^{old}-{α_1}^{old}),H=min(C,C+{α_2}^{old}-{α_1}^{old}) L=max(0,α2​old−α1​old),H=min(C,C+α2​old−α1​old)当y1y_1y1​、y2y_2y2​同号L=max(0,α2old+α1old−C),H=min(C,α2old+α1old)L =max(0,{α_2}^{old}+{α_1}^{old}-C),H=min(C,{α_2}^{old}+{α_1}^{old}) L=max(0,α2​old+α1​old−C),H=min(C,α2​old+α1​old)由α2new{α_2}^{new}α2​new求得α1new{α_1}^{new}α1​new是α1new=α1old+y1y2(α2old−α2new)(36){α_1}^{new}={α_1}^{old}+y_1y_2({α_2}^{old}-{α_2}^{new})\ \ \ \ \ \ \ \ \ \ \ \ \ \ (36) α1​new=α1​old+y1​y2​(α2​old−α2​new)              (36)证明:
①求未经剪辑(忽略约束条件(33))时α2α_2α2​的最优解α2new,unc{α_2}^{new,unc}α2​new,unc
引进记号vi=∑j=3nαjyjK(xi,xj)=g(xi)−∑j=12αjyjK(xi,xj)+b−bv_i=\sum_{j=3}^nα_jy_jK(x_i,x_j)=g(x_i)-\sum_{j=1}^2α_jy_jK(x_i,x_j)+b-b vi​=j=3∑n​αj​yj​K(xi​,xj​)=g(xi​)−j=1∑2​αj​yj​K(xi​,xj​)+b−b目标函数可写成W(α1,α2)=12K11α12+12K22α22+y1y2K12α1α2−(α1+α+2)+y1v1α1+y2v2α2W(α_1,α_2)={1\over2}K_{11}{α_1}^2+{1\over2}K_{22}{α_2}^2+y_1y_2K_{12}α_1α_2-(α_1+α+2)+y_1v_1α_1+y_2v_2α_2 W(α1​,α2​)=21​K11​α1​2+21​K22​α2​2+y1​y2​K12​α1​α2​−(α1​+α+2)+y1​v1​α1​+y2​v2​α2​由α1y1=ξ−α2y2α_1y_1=ξ-α_2y_2α1​y1​=ξ−α2​y2​,等式两边同时乘以y1y_1y1​,由yi2=1{y_i}^2=1yi​2=1可将α1α_1α1​表示为α1=(ξ−α2y2)y1α_1=(ξ-α_2y_2)y_1 α1​=(ξ−α2​y2​)y1​代入式(31),得到只有α2的函数:

对α2求导数得

令其为0,得到

将ξ=α1oldy1+α2oldy2ξ={α_1}^{old}y_1+{α_2}^{old}y_2ξ=α1​oldy1​+α2​oldy2​代入,得到

解得α2new,unc=α2old+y2(E1−E2K11+K22−2K12{α_2}^{new,unc}={α_2}^{old}+{{y_2(E_1-E_2}\over{K_{11}+K_{22}-2K_{12}}} α2​new,unc=α2​old+K11​+K22​−2K12​y2​(E1​−E2​​
②求经剪辑(考虑约束条件(33))α2new{α_2}^{new}α2​new的取值范围
假设取值范围为L≤α2new≤HL≤{α_2}^{new}≤H L≤α2​new≤H考虑约束条件0≤αi≤C,i=1,20≤α_i≤C,i=1,20≤αi​≤C,i=1,2时α2α_2α2​的最优解,首先分析约束条件α1y1+α2y2=−∑i=3nyiαi=ξα_1y_1+α_2y_2 =−\sum_{i=3}^ny_iα_i =ξ α1​y1​+α2​y2​=−i=3∑n​yi​αi​=ξ将α1α_1α1​当做自变量,α2α_2α2​为因变量,则上式变成α2=−y1y2α1+y2ξ(37)α_2=-y_1y_2α_1+y_2ξ\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (37) α2​=−y1​y2​α1​+y2​ξ                      (37)当y1y_1y1​、y2y_2y2​异号,令k=y2ξk=y_2ξk=y2​ξ,则式(37)为直线方程α2=α1+kα_2=α_1+kα2​=α1​+k,图像如图6。
A线为k>0k>0k>0时,α2new{α_2}^{new}α2​new的最大值为CCC,最小值为k=α2old−α1oldk={α_2}^{old}-{α_1}^{old}k=α2​old−α1​old;
B线为k<0k<0k<0时,α2new{α_2}^{new}α2​new的最大值为C+k=C+α2old−α1oldC+k=C+{α_2}^{old}-{α_1}^{old}C+k=C+α2​old−α1​old,最小值为0;
综上,α2new{α_2}^{new}α2​new需满足(α2α_2α2​的取值即要在直线上,又要在方框内):max(0,α2old−α1old)≤α2new≤min(C,C+α2old−α1old)max(0, {α_2}^{old}-{α_1}^{old})≤{α_2}^{new}≤min(C, C+{α_2}^{old}-{α_1}^{old}) max(0,α2​old−α1​old)≤α2​new≤min(C,C+α2​old−α1​old)得L=max(0,α2old−α1old)L= max(0,{α_2}^{old}-{α_1}^{old})L=max(0,α2​old−α1​old),H=min(C,C+α2old−α1old)H=min(C,C+{α_2}^{old}-{α_1}^{old})H=min(C,C+α2​old−α1​old)。

图6 当$y_1$、$y_2$同号,令$k=y_2ξ$,则式(37)为直线方程$α_2=-α_1+k$,图像如图7。 A线为$k>C$时,${α_2}^{new}$的最大值为$C$,最小值为$-Ck={α_2}^{old}+{α_1}^{old}-C$; B线为$k

4.两个变量(α1old{α_1}^{old}α1​old和α2old{α_2}^{old}α2​old)的选择方法

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

证明:
在“线性支持向量机”利用对偶问题求w和b那一部分,我们求得如下K-T条件为:

将g(xi)g(x_i)g(xi​)代入式(42),则式(42)可写成αi(yig(xi)+ξi−1)=0α_i(y_ig(x_i)+ξ_i-1)=0αi​(yi​g(xi​)+ξi​−1)=0。

②第2个变量的选择
    SMO称选择第2个变量的过程为内层循环。假设在外层循环中已经找到第1个变量α1old{α_1}^{old}α1​old,现在要在内层循环中找第2个变量α2old{α_2}^{old}α2​old,第2个变量的选择标准是希望能使α2α_2α2​有足够大的变化。
    由式(35)可知,α2new{α_2}^{new}α2​new是依赖于∣E1−E2∣|E_1-E_2|∣E1​−E2​∣的,为了加快计算速度,一种简单的做法是选择α2α_2α2​,使其对应的∣E1−E2∣|E_1-E_2|∣E1​−E2​∣最大。因为α1old{α_1}^{old}α1​old已定,E1E_1E1​也确定了。如果E1E_1E1​为正,选择最小的EiE_iEi​作为E2E_2E2​;如果E1E_1E1​为负,选择最大的EiE_iEi​作为E2E_2E2​。为了节省计算时间,将所有EiE_iEi​值保存在一个列表中。
    在特殊情况下,如果内层循环通过以上方法选择的α2new{α_2}^{new}α2​new不能使目标函数有足够的下降,那么采用以下启发式规则继续选择α2new{α_2}^{new}α2​new。遍历在间隔边界上的支持向量点,依次将其对应的变量作为α2new{α_2}^{new}α2​new试用,直到目标函数有足够的下降。若找不到合适的α2new{α_2}^{new}α2​new,那么遍历训练数据集;若仍找不到合适的α2new{α_2}^{new}α2​new,则放弃第1个α1old{α_1}^{old}α1​old,再通过外层循环寻求另外的α1old{α_1}^{old}α1​old。

5.计算b和差值EiE_iEi​

在每次完成两个变量的优化后,都要重新计算bbb值,因为bbb值关系到下一次优化时EiE_iEi​的计算。bnewb^{new}bnew值的选择是使α1new{α_1}^{new}α1​new、α2new{α_2}^{new}α2​new满足K-T条件。
当0<α1new<C0<{α_1}^{new}<C0<α1​new<C
b1new=−E1−y1K11(α1new−α1old)−y2K21(α2new−α2old)+bold{b_1}^{new}=−E_1 − y_1K_{11}({α_1}^{new}−{α_1}^{old})−y_2K_{21}({α_2}^{new}−{α_2}^{old})+b^{old} b1​new=−E1​−y1​K11​(α1​new−α1​old)−y2​K21​(α2​new−α2​old)+bold当0<α2new<C0<{α_2}^{new}<C0<α2​new<C
b2new=−E2−y1K12(α1new−α1old)−y2K22(α2new−α2old)+bold{b_2}^{new}=−E_2 − y_1K_{12}({α_1}^{new}−{α_1}^{old})−y_2K_{22}({α_2}^{new}−{α_2}^{old})+b^{old} b2​new=−E2​−y1​K12​(α1​new−α1​old)−y2​K22​(α2​new−α2​old)+bold
如果α1new{α_1}^{new}α1​new、α2new{α_2}^{new}α2​new同时满足条件0<αinew<C0<{α_i}^{new}<C0<αi​new<C,i=1,2i=1,2i=1,2,那么
bnew=b1new=b2newb^{new}={b_1}^{new}={b_2}^{new} bnew=b1​new=b2​new如果α1new{α_1}^{new}α1​new、α2new{α_2}^{new}α2​new其中一个满足0<αinew<C0<{α_i}^{new}<C0<αi​new<C,另一个不满足0<αinew<C0<{α_i}^{new}<C0<αi​new<C,这里假设α2new{α_2}^{new}α2​new满足0<α2new<C0<{α_2}^{new}<C0<α2​new<C,另一个即α1new{α_1}^{new}α1​new是0或者C,那么bnew=b2newb^{new}={b_2}^{new} bnew=b2​new如果α1new{α_1}^{new}α1​new、α2new{α_2}^{new}α2​new是0或者C,那么b1new{b_1}^{new}b1​new和b2new{b_2}^{new}b2​new以及它们之间的数都符合K-T条件,这时选择它们的中点作为bnewb^{new}bnew,那么bnew=b1new+b2new2b^{new}={{{b_1}^{new}+{b_2}^{new}}\over2} bnew=2b1​new+b2​new​

在每次完成两个变量的优化之后,还必须更新对应的EiE_iEi​值,并将它们保存在列表中。EiE_iEi​值的更新要用到bnewb^{new}bnew值,以及所有支持向量对应的αjα_jαj​,得Einew=∑SαjyjK(xi,xj)+bnew−yi{E_i}^{new}=\sum_Sα_jy_jK(x_i,x_j) + b^{new} − y_i Ei​new=S∑​αj​yj​K(xi​,xj​)+bnew−yi​其中,SSS是所有支持向量xjx_jxj​的集合。

6.SMO算法

输入:训练数据集D={(x1,y1),(x2,y2),⋯,(xN,yN)}D=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}D={(x1​,y1​),(x2​,y2​),⋯,(xN​,yN​)},yi∈−1,1y_i∈{-1,1}yi​∈−1,1,i=1,2,…,Ni=1,2,…,Ni=1,2,…,N,精度εεε,惩罚参数CCC
输出:近似解α∗α^*α∗
①取初始值α(0)=0α^{(0)}=0α(0)=0,令k=0k=0k=0
②选取优化变量α1(k){α_1}^{(k)}α1​(k)、α2(k){α_2}^{(k)}α2​(k),解析求解两个变量的最优化问题,求得最优解α1(k+1){α_1}^{(k+1)}α1​(k+1)、α2(k+1){α_2}^{(k+1)}α2​(k+1),更新ααα为α(k+1)α^{(k+1)}α(k+1)。
③若在精度ε范围内满足停机条件

则转④;否则令k=k+1k=k+1k=k+1,转②
④取α∗=α(k+1)α^*=α^{(k+1)}α∗=α(k+1)

六、SMO代码实现

以下代码来自Peter Harrington《Machine Learing in Action》。
通过一个外循环来选择第一个alpha值,并且其选择过程会在两种方式之间进行交替:一种方式是在所有数据集上进行单遍扫描,另一种方式是在alpha值大于0和小于C的数据集上进行单遍扫描。第二个alpha值的选择与上述第二个变量基本一致。停机条件为无alpha可优化或到达最大循环次数。
主函数smoP需要五个参数:数据集、类别标签、常数C、精度ε和取消前最大的循环次数。
代码如下(保存为smo.py):

# -- coding: utf-8 --
from numpy import *def loadDataSet(fileName):dataMat = []; labelMat = []fr = open(fileName)for line in fr.readlines():lineArr = line.strip().split('\t')dataMat.append([float(lineArr[0]), float(lineArr[1])])labelMat.append(float(lineArr[2]))return dataMat,labelMatdef selectJrand(i,m):j=iwhile (j==i):j = int(random.uniform(0,m))return jdef clipAlpha(aj,H,L):if aj > H:aj = Hif L > aj:aj = Lreturn ajclass optStruct:def __init__(self,dataMatIn, classLabels, C, toler):self.X = dataMatInself.labelMat = classLabelsself.C = Cself.tol = tolerself.m = shape(dataMatIn)[0]self.alphas = mat(zeros((self.m,1))) #初始化alphas为0self.b = 0                           #初始化b为0self.eCache = mat(zeros((self.m,2))) #初始化Ek为0def calcEk(oS, k):fXk = float(multiply(oS.alphas,oS.labelMat).T*(oS.X*oS.X[k,:].T)) + oS.bEk = fXk - float(oS.labelMat[k])         #对应式(34)Ei=g(xi)+b-yireturn Ekdef selectJ(i, oS, Ei):    #返回使|E1-E2|值最大的E2及E2的位置jmaxK = -1maxDeltaE = 0Ej = 0oS.eCache[i] = [1,Ei]  #更新位置i的的E1,用1标示该值为更新过的EivalidEcacheList = nonzero(oS.eCache[:,0].A)[0] #返回eCache数组第一列不为0的值,即更新过的Ei的索引if (len(validEcacheList)) > 1:     #如果eCache的Ek个数大于1,返回使|E1-E2|值最大的E2及E2的位置jfor k in validEcacheList:if k == i: continueEk = calcEk(oS, k)deltaE = abs(Ei - Ek)if (deltaE > maxDeltaE):maxK = k; maxDeltaE = deltaE; Ej = Ekreturn maxK, Ejelse:                  #如果eCache的Ek都是没有更新过的,则随机选择一个与E1不同位置的E2并返回E2的位置jj = selectJrand(i, oS.m)Ej = calcEk(oS, j)return j, Ejdef updateEk(oS, k):Ek = calcEk(oS, k)oS.eCache[k] = [1,Ek]def innerL(i, oS):Ei = calcEk(oS, i) #计算E1if ((oS.labelMat[i]*Ei < -oS.tol) and (oS.alphas[i] < oS.C)) or ((oS.labelMat[i]*Ei > oS.tol) and (oS.alphas[i] > 0)):# (yiEi<0 => yig(xi)<1 and alpha<C) or (yiEi>0 => yig(xi)>1 and alpha>0) 选取违背K-T条件的alpha1j,Ej = selectJ(i, oS, Ei)                                   #选择smo的第二个变量alphaIold = oS.alphas[i].copy()                             #alpha1oldalphaJold = oS.alphas[j].copy()                             #alpha2oldif (oS.labelMat[i] != oS.labelMat[j]):                      #y1、y2异号L = max(0, oS.alphas[j] - oS.alphas[i])                 #L=max(0,alpha2old-alpha1old)H = min(oS.C, oS.C + oS.alphas[j] - oS.alphas[i])       #H=min(0,C+alpha2old-alpha1old)else:                                                       #y1、y2同号L = max(0, oS.alphas[j] + oS.alphas[i] - oS.C)          #L=max(0,alpha2old+alpha1old-C)H = min(oS.C, oS.alphas[j] + oS.alphas[i])              #H=min(0,alpha2old+alpha1old)if L==H: print "L==H"; return 0                                                        #异常情况,返回eta = 2.0 * oS.X[i,:]*oS.X[j,:].T - oS.X[i,:]*oS.X[i,:].T - oS.X[j,:]*oS.X[j,:].T #2K12-K11-K22if eta >= 0: print "eta>=0"; return 0                                                  #异常情况,返回oS.alphas[j] -= oS.labelMat[j]*(Ei - Ej)/eta                #式(35)计算alpha2new,uncoS.alphas[j] = clipAlpha(oS.alphas[j],H,L)                  #返回alpha2newupdateEk(oS, j)                                             #更新E2的值if (abs(oS.alphas[j] - alphaJold) < 0.00001): print "j not moving enough"; return 0 #alpha2基本不变,返回oS.alphas[i] += oS.labelMat[j]*oS.labelMat[i]*(alphaJold - oS.alphas[j])      #式(36)求alpha1newupdateEk(oS, i)                                             #更新E1的值#b1newb1 = oS.b - Ei- oS.labelMat[i]*(oS.alphas[i]-alphaIold)*oS.X[i,:]*oS.X[i,:].T - oS.labelMat[j]*(oS.alphas[j]-alphaJold)*oS.X[i,:]*oS.X[j,:].T#b2newb2 = oS.b - Ej- oS.labelMat[i]*(oS.alphas[i]-alphaIold)*oS.X[i,:]*oS.X[j,:].T - oS.labelMat[j]*(oS.alphas[j]-alphaJold)*oS.X[j,:]*oS.X[j,:].T#根据b值的计算结论更新b值if (0 < oS.alphas[i]) and (oS.C > oS.alphas[i]): oS.b = b1elif (0 < oS.alphas[j]) and (oS.C > oS.alphas[j]): oS.b = b2else: oS.b = (b1 + b2)/2.0return 1else: return 0def smoP(dataMatIn, classLabels, C, toler, maxIter):#样本X,样本Y,惩罚参数C,精度e,最大循环次数maxIteroS = optStruct(mat(dataMatIn),mat(classLabels).transpose(),C,toler)iter = 0entireSet = TruealphaPairsChanged = 0while (iter < maxIter) and ((alphaPairsChanged > 0) or (entireSet)):#循环次数大于maxIter或alphaPairsChanged连续2次等于0,则退出循环alphaPairsChanged = 0if entireSet:for i in range(oS.m):                    #循环所有alphas,作为smo的第一个变量alphaPairsChanged += innerL(i,oS)    #inner函数:如果有任意一对alphas值发生改变,返回1print "fullSet, iter: %d i:%d, pairs changed %d" % (iter,i,alphaPairsChanged)iter += 1else:nonBoundIs = nonzero((oS.alphas.A > 0) * (oS.alphas.A < C))[0]for i in nonBoundIs:                     #循环大于0小于C的alphas,作为smo的第一个变量alphaPairsChanged += innerL(i,oS)print "non-bound, iter: %d i:%d, pairs changed %d" % (iter,i,alphaPairsChanged)iter += 1if entireSet: entireSet = Falseelif (alphaPairsChanged == 0): entireSet = Trueprint "iteration number: %d" % iterreturn oS.b,oS.alphasdef calcWs(alphas,dataArr,classLabels):  #利用式(25)alphas[i]*y[i]*xi求w的值X = mat(dataArr)labelMat = mat(classLabels).transpose()m,n = shape(X)w = zeros((n,1))for i in range(m):w += multiply(alphas[i]*labelMat[i],X[i,:].T)return w

数据集格式如下(保存为textSet.txt):

3.542485 1.977398    -1
3.018896    2.556416    -1
7.551510    -1.580030   1
2.114999    -0.004466   -1
8.127113    1.274372    1
7.108772    -0.986906   1

运行命令如下:

通过loadDataSet函数转换数据集,运行smoP函数获取b及alphas值。

最后通过calcWs函数计算w的值。
可利用数据验证,若该值大于0属于1类,若该值小于0则属于-1类。

以上全部内容参考书籍如下:
李航《统计学习方法》
周志华《机器学习》
Peter Harrington《Machine Learing in Action》
《高等数学第六版下册(同济大学)》
《运筹学 第三版》清华大学出版社

机器学习(六):支持向量机(SVM)相关推荐

  1. 机器学习实战 支持向量机SVM 代码解析

    机器学习实战 支持向量机SVM 代码解析 <机器学习实战>用代码实现了算法,理解源代码更有助于我们掌握算法,但是比较适合有一定基础的小伙伴.svm这章代码看起来风轻云淡,实则对于新手来说有 ...

  2. 机器学习之支持向量机SVM之python实现ROC曲线绘制(二分类和多分类)

    目录 一.ROC曲线 二.TP.FP.TN.FN 三. python绘制ROC曲线(二分类) 1.思路 2.关键代码 3.完整代码 四. python绘制ROC曲线(多分类) 五.参考文献 一.ROC ...

  3. 优达学城机器学习之--支持向量机(SVM)

    前言 SVM是支持向量机的简称(Support Vector Machine) 文章目录如下: 简述 选择分隔线 核函数(kernel)及其参数c, gamma 过拟合 over-fitting SV ...

  4. OpenCV之ml 模块. 机器学习:支持向量机(SVM)介绍 支持向量机对线性不可分数据的处理

    支持向量机(SVM)介绍 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 CvSVM::train 训练一个SVM分类器, 以及用 CvSVM::predict 测试训练结果. 什么是支持向 ...

  5. 机器学习:支持向量机SVM的SVC和SVR

    支持向量机SVM SVM的工作原理及分类 支持向量机的原理 线性可分的SVM 非线性可分的支持向量机 支持向量机分类SVC 支持向量机回归SVR SVR原理 SVR模型 时间序列曲线预测 SVM的工作 ...

  6. 机器学习:支持向量机SVM和人工神经网络ANN的比较

    在统计学习理论中发展起来的支持向量机(Support Vector Machines, SVM)方法是一种新的通用学习方法,表现出理论和实践上的优势.SVM在非线性分类.函数逼近.模式识别等应用中有非 ...

  7. 【机器学习】支持向量机(SVM)代码练习

    本课程是中国大学慕课<机器学习>的"支持向量机"章节的课后代码. 课程地址: https://www.icourse163.org/course/WZU-1464096 ...

  8. [机器学习-实践]支持向量机(SVM)从例子代码中学习

    [机器学习-原理篇]支持向量机(SVM)深入理解 1.用SVM的linear做鸢尾花分类 利用sklearn中自带的dataset,鸢尾花数据库为例,进行二分类. #载入鸢尾花数据集,datasets ...

  9. 入门机器学习(十三)--支持向量机(SVM)

    1. 优化目标(Optimization Objective) 目前来说,我们已经学过了单变量与多变量的线性回归,逻辑回归以及神经网络等机器学习算法,他们在各自的领域都发挥着巨大的作用.但是还有一个算 ...

  10. 吴恩达机器学习7——支持向量机SVM

    吴恩达机器学习7 一.SVM直观理解 1. SVM引入逻辑回归 2. 大边界分类器SVM 3. SVM原理 二.核函数 1. 核函数原理和概念 2. SVM和核函数结合的计算步骤 三.使用SVM 一. ...

最新文章

  1. 【转载】有软件开发,就要有软件测试!
  2. 如何使用Web Audio API听到“ Yanny”和“ Laurel”的声音
  3. 进程间通信的5种方式
  4. 重载操作符与转换(上)
  5. c语言省2全民,C语言省试题(2-数据类型)101016.ppt
  6. 项目中的加减法--《最后期限》读书笔记(1)
  7. python sftp_python中实现sftp
  8. latex/Xelatex书籍排版总结---顺便附上一本排好的6寸android书…
  9. python 数据结构转换层_python – 具有Maxpooling1D和channel_first的Keras模型
  10. 北京语言大学计算机科学与技术研究生好考吗,北京语言大学计算机科学与技术专业研究生培养方案...
  11. Spring boot 开发 GA/T1400 协议之注册、保活、注销、校时功能
  12. Dart语言中的Isolate
  13. 你真的会在阳光下拍照片么?
  14. 实施ASP.NET Core应用程序的常见陷阱
  15. jit和jitx区别_JIT,JIS间的区别是什么?
  16. Nginx负载均衡4--动态负载算法设计
  17. Python数据清洗:strava运动跑步和骑行路径路线经纬度散点序列数据
  18. Excel----考勤表制作自动更新日期
  19. 网线8跟全通就能跑千兆?No!只是必要条件而非充分条件
  20. 现代控制工程-状态空间(正在更新)

热门文章

  1. Clover Configurator 5.17.4.0中文版(四叶草clover配置工具)
  2. queryDSL复杂查询的分页和自定义排序实现
  3. 2D纸娃娃系统的web演示
  4. 面向对象六大原则——开闭原则
  5. Python某地区二手房房价数据分析
  6. Linux 快捷键总结
  7. android视频壁纸源码,Android 视频壁纸
  8. Burp Suite 扫描工具
  9. smp格式音频转换mp3软件方法
  10. Mysql8.0如何重置密码