机器学习(六):支持向量机(SVM)

引言

    支持向量机(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)在点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)具有偏导数,且在点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)处有极值,则有 f x ( x 0 , y 0 ) = 0 f_x(x_0,y_0)=0 fx(x0,y0)=0 f y ( x 0 , y 0 ) = 0 f_y(x_0,y_0)=0 fy(x0,y0)=0以上关于二元函数的概念,可推广到 n n n元函数。
例1  某厂要用钢板做成一个体积为 2 m 3 2m^3 2m3的长方体有盖水箱,问当长、宽、高各取怎样的尺寸时,才能使用料最省?
解:
设水箱的长、宽各为 x x x y y y,则其高应为 2 x y 2\over{xy} xy2,此水箱所用材料的面积 A = 2 ( x y + x ⋅ 2 x y + y ⋅ 2 x y ) = 2 ( x y + 2 y + 2 x )            x > 0 , y > 0 A=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+xxy2+yxy2)=2(xy+y2+x2)          x>0,y>0下面求使上述函数取得最小值的点(x,y),求其对x、y的一阶偏导数得 A x = 2 ( y − 2 x 2 ) = 0 A_x=2\left(y-{2\over{x^2}}\right)=0 Ax=2(yx22)=0 A y = 2 ( x − 2 y 2 ) = 0 A_y=2\left(x-{2\over{y^2}}\right)=0 Ay=2(xy22)=0解得 x = 2 3 x=\sqrt[3]2 x=32 y = 2 3 y=\sqrt[3]2 y=32
根据题意可知,水箱所用材料面积的最小值一定存在,并在开区域 D = { ( x , y ) ∣ x > 0 , y > 0 } D=\{(x,y)|x>0,y>0\} D={(x,y)x>0,y>0}内取得,又知函数在 D D D内只有唯一的驻点 ( 2 3 , 2 3 ) ({\sqrt[3]2},{\sqrt[3]2}) (32 ,32 ),因此可判定,当长、宽、高各取 2 3 \sqrt[3]2 32 2 3 \sqrt[3]2 32 2 x y = 2 3 {2\over{xy}}=\sqrt[3]2 xy2=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)其中 λ λ λ为参数,求其对 x x x y y y的一阶偏导数,并使之为零,然后与方程(1)联立起来: f x ( x , y ) + λ φ x ( x , y ) = 0 f_x(x,y)+λφ_x(x,y)=0 fx(x,y)+λφx(x,y)=0 f y ( x , y ) + λ φ y ( x , y ) = 0 f_y(x,y)+λφ_y(x,y)=0 fy(x,y)+λφy(x,y)=0 φ ( x , y ) = 0 φ(x,y)=0 φ(x,y)=0由这方程组解出 x x x y y y λ λ λ,这样得到的 ( 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均为参数,求其对 x x x y y y的一阶偏导数,并使之为零,然后与(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  求表面积为 a 2 a^2 a2体积为最大的长方体的体积。
解:
设长方体的三棱长为 x , y , z x,y,z x,y,z,则问题就是在条件 φ ( x , y , z ) = 2 x y + 2 x z + 2 y z − a 2 = 0 下 φ(x,y,z)=2xy+2xz+2yz-a^2=0下 φ(x,y,z)=2xy+2xz+2yza2=0,求函数 V = x y z   ( 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 , λ ) = x y z + λ ( 2 x y + 2 x z + 2 y z − a 2 ) L(x,y,z,λ)=xyz+λ(2xy+2xz+2yz-a^2) L(x,y,z,λ)=xyz+λ(2xy+2xz+2yza2)求其对 x , y , z x,y,z x,y,z的偏导数,并使之为零,得到 y z + 2 λ ( y + z ) = 0 yz+2λ(y+z)=0 yz+2λ(y+z)=0 x z + 2 λ ( x + z ) = 0 xz+2λ(x+z)=0 xz+2λ(x+z)=0 x y + 2 λ ( x + y ) = 0 xy+2λ(x+y)=0 xy+2λ(x+y)=0再与约束条件 φ ( x , y , z ) φ(x,y,z) φ(x,y,z)联立求解,得 x = y = z = 6 6 a x=y=z={\sqrt6\over6}a x=y=z=66 a,这是唯一可能的极值点,因为由问题本身可知最大值一定存在,所以最大值就在这个可能的极值点处取得。
固表面积为 a 2 a^2 a2体积为最大的长方体的体积为 x y z = 6 36 a 3 xyz={\sqrt6\over36}a^3 xyz=366 a3

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

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

定义: 线性规划的一般形式
这里写图片描述
X ∗ X^* X是非线性规划(4)式的极小点,且 X ∗ X^* X点的所有起作用约束的梯度线性无关,则存在向量 T = ( λ 1 , λ 2 , ⋯   , λ n ) T T=(λ_1,λ_2,\cdots,λ_n)^T T=(λ1,λ2,,λn)T,使下述条件成立:
这里写图片描述
条件(5)式常简称为K-T条件,满足这个条件的点 X ∗ X^* X称为库恩-塔克点(或K-T点)。
为了得出非线性规划(3)式的库恩-塔克条件,我们用
这里写图片描述
代替约束条件 h i ( X ) = 0 h_i(X)=0 hi(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)=(x3)2 s . t .    0 ≤ x ≤ 5 s.t.\ \ 0≤x≤5 s.t.  0x5解:
先将该非线性规划问题写成以下形式                   min ⁡    f ( x ) = ( x − 3 ) 2 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \min\ \ f(x)=(x-3)^2                  min  f(x)=(x3)2 s . t .    g 1 ( x ) = x ≥ 0 s.t.\ \ g_1(x)=x≥0 s.t.  g1(x)=x0                 g 2 ( x ) = 5 − x ≥ 0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ g_2(x)=5-x≥0                g2(x)=5x0写出其目标函数和约束函数的梯度: ∇ f ( x ) = 2 ( x − 3 ) ∇f(x)=2(x-3) f(x)=2(x3) ∇ g 1 ( x ) = 1 , ∇ g 2 ( 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 = 0 2(x-3)-λ_1+λ_2=0 2(x3)λ1+λ2=0 λ 1 x = 0 λ_1x=0 λ1x=0 λ 2 ( 5 − x ) = 0 λ_2(5-x)=0 λ2(5x)=0 λ 1 , λ 2 ≥ 0 λ_1,λ_2≥0 λ1,λ20解得 λ 1 = 0 λ_1=0 λ1=0 λ 2 = 0 λ_2=0 λ2=0 x = 3 x=3 x=3
固函数在约束条件下的最小值为 f ( 3 ) = 0 f(3)=0 f(3)=0

例4  写出下述非线性规划问题的K-T条件 min ⁡    f ( x 1 , x 2 ) = ( x 1 − 3 ) 2 + ( x 2 − 2 ) 2 \min\ \ f(x_1,x_2)=(x_1-3)^2+(x_2-2)^2 min  f(x1,x2)=(x13)2+(x22)2 s . t .    4 − x 1 − x 2 ≥ 0 s.t.\ \ 4-x_1-x_2≥0 s.t.  4x1x20 x 1 , x 2 ≥ 0 x_1,x_2≥0 x1,x20解:
先将该非线性规划问题写成以下形式 min ⁡    f ( x 1 , x 2 ) = ( x 1 − 3 ) 2 + ( x 2 − 2 ) 2 \min\ \ f(x_1,x_2)=(x_1-3)^2+(x_2-2)^2 min  f(x1,x2)=(x13)2+(x22)2        s . t .    g 1 ( x 1 , x 2 ) = 4 − x 1 − x 2 ≥ 0 \ \ \ \ \ \ s.t.\ \ g_1(x_1,x_2)=4-x1-x2≥0       s.t.  g1(x1,x2)=4x1x20 g 2 ( x 1 , x 2 ) = x 1 ≥ 0 g_2(x_1,x_2)=x1≥0 g2(x1,x2)=x10 g 3 ( x 1 , x 2 ) = x 2 ≥ 0 g_3(x_1,x_2)=x2≥0 g3(x1,x2)=x20写出其目标函数和约束函数的梯度: ∇ f ( x 1 , x 2 ) = ( 2 x 1 − 6 , 2 x 2 − 4 ) T ∇f(x_1,x_2)=(2x_1-6,2x_2-4)^T f(x1,x2)=(2x16,2x24)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 ∇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条件如下: ( 2 x 1 − 6 , 2 x 2 − 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 (2x16,2x24)Tλ1(1,1)Tλ2(1,0)Tλ3(0,1)T=0分解为: 2 x 1 − 6 + λ 1 − λ 2 = 0 2x_1-6+λ_1-λ_2=0 2x16+λ1λ2=0 2 x 2 − 4 + λ 1 − λ 3 = 0 2x_2-4+λ_1-λ_3=0 2x24+λ1λ3=0 λ 1 ( 4 − x 1 − x 2 ) = 0 λ_1(4-x_1-x_2)=0 λ1(4x1x2)=0 λ 2 x 1 = 0 λ_2x_1=0 λ2x1=0 λ 3 x 2 = 0 λ_3x_2=0 λ3x2=0 λ 1 , λ 2 , λ 3 ≥ 0 λ_1,λ_2,λ_3≥0 λ1,λ2,λ30

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

4.拉格朗日对偶问题

1)原始问题
假设 f ( x ) f(x) f(x) c i ( x ) c_i(x) ci(x) h j ( x ) h_j(x) hj(x)是定义在 R n R^n Rn上的连续可微函数,考虑约束条件
这里写图片描述
称此约束最优化问题为原始最优化问题或原始问题。
作广义拉格朗日函数 L ( x , α , β ) = f ( x ) + ∑ i = 1 k α i c i ( x ) + ∑ j = 1 l β j h j ( x ) L(x,α,β)=f(x)+\sum_{i=1}^kα_ic_i(x)+\sum_{j=1}^lβ_jh_j(x) L(x,α,β)=f(x)+i=1kαici(x)+j=1lβjhj(x)其中 x = ( x 1 , x 2 , . . . , x n ) T ∈ R n x=(x_1,x_2,...,x_n)^T∈R^n x=(x1,x2,...,xn)TRn α i α_i αi β j β_j βj是拉格朗日乘子且 α i ≥ 0 α_i≥0 αi0。考虑 x x x的函数: θ p ( x ) = max ⁡ α , β , α i ≥ 0 L ( x , α , β ) θ_p(x)=\max_{α,β,α_i≥0}L(x,α,β) θp(x)=α,β,αi0maxL(x,α,β)这里下标P表示原始问题,则 θ p ( x ) = max ⁡ α , β , α i ≥ 0 f ( x ) + ∑ i = 1 k α i c i ( x ) + ∑ j = 1 l β j h j ( x ) θ_p(x)=\max_{α,β,α_i≥0}f(x)+\sum_{i=1}^kα_ic_i(x)+\sum_{j=1}^lβ_jh_j(x) θp(x)=α,β,αi0maxf(x)+i=1kαici(x)+j=1lβjhj(x)因为 α i ≥ 0 α_i≥0 αi0 c i ( x ) ≤ 0 c_i(x)≤0 ci(x)0 h j ( x ) = 0 h_j(x)=0 hj(x)=0,解得 θ P ( x ) = f ( x ) θ_P(x)=f(x) θP(x)=f(x)
考虑极小化问题 min ⁡ x θ p ( x ) = min ⁡ x max ⁡ α , β , α i ≥ 0 L ( x , α , β ) \min_xθ_p(x)=\min_x\max_{α,β,α_i≥0}L(x,α,β) xminθp(x)=xminα,β,αi0maxL(x,α,β)它是与原始最优化问题(6)等价的,即它们有相同的解。问题 min ⁡ x max ⁡ α , β , α i ≥ 0 L ( x , α , β ) \min_x\max_{α,β,α_i≥0}L(x,α,β) minxmaxα,β,αi0L(x,α,β)称为广义拉格朗日的极小极大问题。
为了方便,定义原始问题的最优值 p ∗ = min ⁡ x θ p ( x ) p^*=\min_xθ_p(x) p=xminθp(x)称为原始问题的值。
2)对偶问题 θ D ( α , β ) = min ⁡ x L ( x , α , β ) θ_D(α,β)=\min_xL(x,α,β) θD(α,β)=xminL(x,α,β)再考虑极大化 θ D ( α , β ) = min ⁡ x L ( x , α , β ) θ_D(α,β)=\min_xL(x,α,β) θD(α,β)=minxL(x,α,β),即 max ⁡ α , β , α i ≥ 0 θ D ( α , β ) = max ⁡ α , β , α i ≥ 0 min ⁡ x L ( x , α , β ) \max_{α,β,α_i≥0}θ_D(α,β)=\max_{α,β,α_i≥0}\min_xL(x,α,β) α,β,αi0maxθD(α,β)=α,β,αi0maxxminL(x,α,β)问题 max ⁡ α , β , α i ≥ 0 min ⁡ x L ( x , α , β ) \max_{α,β,α_i≥0}\min_xL(x,α,β) maxα,β,αi0minxL(x,α,β)称为广义拉格朗日的极大极小问题。
将拉格朗日函数的极大极小问题表示为约束最优化问题:
这里写图片描述
称为原始问题的对偶问题。
为了方便,定义对偶问题的最优值 d ∗ = max ⁡ α , β , α i ≥ 0 θ D ( α , β ) d^*=\max_{α,β,α_i≥0}θ_D(α,β) d=α,β,αi0maxθD(α,β)称为对偶问题的值。
3)原始问题与对偶问题的关系
对原始问题(6)和对偶问题(7),假设函数 f ( x ) f(x) f(x) c i ( x ) c_i(x) ci(x)是凸函数, h j ( x ) h_j(x) hj(x)是仿射函数,并且不等式约束 c i ( x ) c_i(x) ci(x)是严格可行的,即存在 x x x,对所有 i i i c i ( x ) < 0 c_i(x)<0 ci(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 ⁡    x 1 2 + x 2 2 \min\ \ {x_1}^2+{x_2}^2 min  x12+x22 s . t .    4 − x 1 − x 2 ≤ 0 s.t.\ \ 4-x_1-x_2≤0 s.t.  4x1x20解:
该问题的拉格朗日函数为 L ( x , α ) = x 1 2 + x 2 2 + α ( 4 − x 1 − x 2 ) ,         α ≥ 0 L(x,α)={x_1}^2+{x_2}^2+α(4-x_1-x_2),\ \ \ \ \ \ \ α≥0 L(x,α)=x12+x22+α(4x1x2),       α0 f ( x ) = x 1 2 + x 2 2 f(x)={x_1}^2+{x_2}^2 f(x)=x12+x22,其中 x = ( x 1 , x 2 ) T x=(x_1,x_2)^T x=(x1,x2)T。则原始问题为: min ⁡ x   f ( x ) = min ⁡ x   θ P ( x ) = min ⁡ x max ⁡ α , α ≥ 0 L ( x , α ) \min_x\ f(x)=\min_x\ θ_P(x)=\min_x\max_{α,α≥0}L(x,α) xmin f(x)=xmin θP(x)=xminα,α0maxL(x,α)对偶问题为: max ⁡ α , α ≥ 0 θ D ( α ) = max ⁡ α , α ≥ 0 min ⁡ x L ( x , α ) \max_{α,α≥0}θ_D(α)=\max_{α,α≥0}\min_xL(x,α) α,α0maxθD(α)=α,α0maxxminL(x,α) min ⁡ x L ( x , α ) = min ⁡ x x 1 2 + x 2 2 + α ( 4 − x 1 − x 2 ) \min_xL(x,α)=\min_x{x_1}^2+{x_2}^2+α(4-x_1-x_2) minxL(x,α)=minxx12+x22+α(4x1x2),求其对 x 1 x_1 x1 x 2 x_2 x2的一阶偏导数得 L x 1 = 2 x 1 − α = 0 L_{x1}=2x_1-α=0 Lx1=2x1α=0 L x 2 = 2 x 2 − α = 0 L_{x2}=2x_2-α=0 Lx2=2x2α=0解得 x 1 = α 2 x_1={α\over2} x1=2α x 2 = α 2 x_2={α\over2} x2=2α,代入得 min ⁡ x L ( x , α ) = − α 2 2 + 4 α \min_xL(x,α)=-{{α^2}\over2}+4α minxL(x,α)=2α2+4α
求得对偶问题为 max ⁡ α , α ≥ 0 θ D ( α ) = max ⁡ α , α ≥ 0 − α 2 2 + 4 α \max_{α,α≥0}θ_D(α)=\max_{α,α≥0}-{{α^2}\over2}+4α α,α0maxθD(α)=α,α0max2α2+4α




二、线性可分支持向量机

1.基本型

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

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

这里写图片描述

图4

欲找到具有“最大间隔”的分隔面,也就是要找到能满足式(9)中约束的参数 w w w b b b,使
γ γ γ最大,即
这里写图片描述
显然为了最大化间隔,仅需要最大化 ∣ ∣ w ∣ ∣ − 1 ||w||^{-1} w1,这等价于最小化 ∣ ∣ w ∣ ∣ 2 ||w||^2 w2,于是式(10)可重写为
这里写图片描述
这就是支持向量机的基本型。

2.对偶问题

基本型的对偶问题为:
这里写图片描述
证明:
基本型的拉格朗日函数为
L ( w , b , α ) = ∣ ∣ w ∣ ∣ 2 2 + ∑ i = 1 n α i ( 1 − y i ( w T x i + b ) ) ,            i = 1 , 2 , . . . , n L(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,α)=2w2+i=1nαi(1yi(wTxi+b)),          i=1,2,...,n其中 α = ( α 1 , α 2 , . . . , α n ) α=(α_1,α_2,...,α_n) α=(α1,α2,...,αn),设 f ( w , b ) = ∣ ∣ w ∣ ∣ 2 2 f(w,b)={{||w||^2}\over2} f(w,b)=2w2,则原始问题为 min ⁡ w , b   f ( w , b ) = min ⁡ w , b   θ P ( w , b ) = min ⁡ w , b max ⁡ α , α ≥ 0 L ( 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α,α0maxL(w,b,α)对偶问题为: max ⁡ α , α ≥ 0 θ D ( α ) = max ⁡ α , α ≥ 0 min ⁡ w , b L ( w , b , α ) \max_{α,α≥0}θ_D(α)=\max_{α,α≥0}\min_{w,b}L(w,b,α) α,α0maxθD(α)=α,α0maxw,bminL(w,b,α)要求对偶问题,先求 m i n w , b L ( w , b , α ) min_{w,b}L(w,b,α) minw,bL(w,b,α),即求 L ( w , b , α ) L(w,b,α) L(w,b,α) w w w b b b的一阶偏导数并使之为零 L w = w − ∑ i = 1 n α i y i x i = 0 L_w=w-\sum_{i=1}^nα_iy_ix_i=0 Lw=wi=1nαiyixi=0 L b = − ∑ i = 1 n α i y i = 0 L_b=-\sum_{i=1}^nα_iy_i=0 Lb=i=1nαiyi=0解得 w = ∑ i = 1 n α i y i x i                    ( 13 ) w=\sum_{i=1}^nα_iy_ix_i\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (13) w=i=1nαiyixi                  (13) 0 = ∑ i = 1 n α i y i                          ( 14 ) 0=\sum_{i=1}^nα_iy_i\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (14) 0=i=1nαiyi                        (14)将(13)代入拉格朗日函数 L ( w , b , α ) L(w,b,α) L(w,b,α),并利用(14)得
这里写图片描述
已知 m i n w , b L ( w , b , α ) min_{w,b}L(w,b,α) minw,bL(w,b,α)则可得对偶问题(12)

3.利用对偶问题求解 w w w b b b

α ∗ = ( α 1 ∗ , α 2 ∗ , . . . , α n ∗ ) T α^*=({α_1}^*,{α_2}^*,...,{α_n}^*)^T α=(α1,α2,...,αn)T是对偶问题(12)的解,则存在下标 j j j,使得 α j ∗ > 0 {α_j}^*>0 αj>0,并可按下式求得原始问题(11)的解 w ∗ w^* w b ∗ b^* b w ∗ = ∑ i = 1 n α i y i x i                     ( 15 ) w^*=\sum_{i=1}^nα_iy_ix_i\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (15) w=i=1nαiyixi                   (15) b ∗ = y i − ∑ i = 1 n α i y i x i T x j           ( 16 ) b^*=y_i-\sum_{i=1}^nα_iy_i{x_i}^T{x_j}\ \ \ \ \ \ \ \ \ (16) b=yii=1nαiyixiTxj         (16)
证明:
w ∗ w^* w b ∗ b^* b α ∗ α^* α分别是原始问题和对偶问题的解的充分必要条件是 w ∗ w^* w b ∗ b^* b α ∗ α^* α满足K-T条件。
先将(11)式写成以下形式: min ⁡ w , b   f ( w , b ) = ∣ ∣ w ∣ ∣ 2 2 \min_{w,b}\ f(w,b)={{||w||^2}\over2} w,bmin f(w,b)=2w2 s . t .   g i ( w , b ) = y i ( w T x i + b ) − 1 ≥ 0 ,         i = 1 , 2 , . . . , n s.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)10,       i=1,2,...,n写出其目标函数和约束函数的梯度: ∇ f ( w , b ) = ( ∣ ∣ w ∣ ∣ , 0 ) T , ∇ g i ( w , b ) = ( x i y i , y i ) 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)=(xiyi,yi)T n n n个约束条件分别引入广义拉格朗日乘子 α 1 , α 2 , . . . , α n α_1,α_2,...,α_n α1,α2,...,αn,则可写出该问题的K-T条件如下: ( ∣ ∣ w ∣ ∣ , 0 ) T − ∑ i = 1 n α i ( x i y i , y i ) T = 0 (||w||,0)^T-\sum_{i=1}^nα_i(x_iy_i,y_i)^T=0 (w,0)Ti=1nαi(xiyi,yi)T=0将上式分解为: ∣ ∣ w ∣ ∣ = ∑ i = 1 n α i x i y i = 0 ||w||=\sum_{i=1}^nα_ix_iy_i=0 w=i=1nαixiyi=0 − ∑ i = 1 n α i y i = 0 -\sum_{i=1}^nα_iy_i=0 i=1nαiyi=0 α i ( y i ( w T x i + 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 αi0,          i=1,2,...,n由此解得式(15)
其中至少有一个 α j ∗ > 0 {α_j}^*>0 αj>0(用反证法,假设 α ∗ = 0 α^*=0 α=0,由式(15)可知 w ∗ = 0 w^*=0 w=0,而 w ∗ = 0 w^*=0 w=0不是原始问题(11)的解,产生矛盾),对此 j j j y j ( w ∗ x j + b ∗ ) − 1 = 0 ( 17 ) y_j(w^*x_j+b^*)-1=0 (17) yj(wxj+b)1=0(17)注意到 y j 2 = 1 {y_j}^2=1 yj2=1,将(17)两边同时乘以 y j y_j yj,将式(15)代入即得式(16)

综上所述,对于给定的线性可分训练数据集,可以先求对偶问题(12)的解 α ∗ α^* α,再利用式(15) (16)求得原始问题的解 w ∗ w^* w b ∗ b^* b,从而得到分隔超平面的线性方程。这种算法称为线性可分支持向量机的对偶算法,是线性可分支持向量机学习的基本算法。



三、线性支持向量机

1.基本型

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

图5
2.对偶问题

基本型的对偶问题为:
这里写图片描述
证明:
基本型的拉格朗日函数为
L ( w , b , ξ , α , μ ) = ∣ ∣ w ∣ ∣ 2 2 + C ∑ i = 1 n ξ i + ∑ i = 1 n α i ( 1 − y i ( w T x i + b ) − ξ ) − ∑ i = 1 n μ i ξ i L(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,ξ,α,μ)=2w2+Ci=1nξi+i=1nαi(1yi(wTxi+b)ξ)i=1nμiξi其中 α i ≥ 0 α_i≥0 αi0 μ i ≥ 0 μ_i≥0 μi0,设 f ( w , b , ξ ) = ∣ ∣ w ∣ ∣ 2 2 + C ∑ i = 1 n ξ i f(w,b,ξ)={{||w||^2}\over2}+C\sum_{i=1}^nξ_i f(w,b,ξ)=2w2+Ci=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 α,μmaxL(w,b,ξ,α,μ)对偶问题为: max ⁡ α , μ θ D ( α , μ ) = max ⁡ α , μ min ⁡ w , b , ξ L ( w , b , ξ , α , μ ) \max_{α,μ}θ_D(α,μ)=\max_{α,μ}\min_{w,b,ξ}L(w,b,ξ,α,μ) α,μmaxθD(α,μ)=α,μmaxw,b,ξminL(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,ξ,α,μ) w w w b b b ξ ξ ξ的一阶偏导数得 L w = w − ∑ i = 1 n α i x i y i = 0 L_w=w-\sum_{i=1}^nα_ix_iy_i=0 Lw=wi=1nαixiyi=0 L b = − ∑ i = 1 n α i y i = 0 L_b=-\sum_{i=1}^nα_iy_i=0 Lb=i=1nαiyi=0 L ξ = C − α i − μ i = 0 L_ξ=C-α_i-μ_i=0 Lξ=Cαiμi=0解得 w = ∑ i = 1 n α i x i y i                     ( 21 ) w=\sum_{i=1}^nα_ix_iy_i\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (21) w=i=1nαixiyi                   (21) ∑ i = 1 n α i y i = 0                          ( 22 ) \sum_{i=1}^nα_iy_i=0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (22) i=1nαiyi=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 = 1 n α i − 1 2 ∑ i = 1 n ∑ j = 1 n α i α j y i y j x i T x j \max_{α,μ}\sum_{i=1}^nα_i-{1\over2}\sum_{i=1}^n\sum_{j=1}^nα_iα_jy_iy_j{x_i}^Tx_j α,μmaxi=1nαi21i=1nj=1nαiαjyiyjxiTxj s . t .    ∑ i = 1 n α i y i = 0 s.t.\ \ \sum_{i=1}^nα_iy_i=0 s.t.  i=1nαiyi=0 C − α 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 αi0,     i=1,2,,n μ i ≥ 0 ,       i = 1 , 2 , … , n μ_i≥0,\ \ \ \ \ i=1,2,…,n μi0,     i=1,2,,n利用等式(24)得 μ i = C − α i μ_i=C-α_i μi=Cαi,即可消去 μ i μ_i μi,并将(24)的约束写成 0 ≤ α i ≤ C 0≤α_i≤C 0αiC从而得到最终的对偶问题(20)

3.利用对偶问题求解 w w w b b b

α ∗ = ( α 1 ∗ , α 2 ∗ , . . . , α n ∗ ) T α^*=({α_1}^*,{α_2}^*,...,{α_n}^*)^T α=(α1,α2,...,αn)T是对偶问题(20)的解,若存在 α ∗ 的 α^*的 α一个分量 α j ∗ {α_j}^* αj,满足 0 < α j ∗ < C 0<{α_j}^*<C 0<αj<C,则原始问题(19)的解 w ∗ w^* w b ∗ b^* b可按下式求得 w ∗ = ∑ i = 1 n α i x i y i                     ( 25 ) w^*=\sum_{i=1}^nα_ix_iy_i\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (25) w=i=1nαixiyi                   (25) b ∗ = y i = ∑ i = 1 n α i y i x i T x j                     ( 26 ) b^*=y_i=\sum_{i=1}^nα_iy_i{x_i}^Tx_j\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (26) b=yi=i=1nαiyixiTxj                   (26)证明:
w ∗ w^* w b ∗ b^* b α ∗ α^* α分别是原始问题和对偶问题的解的充分必要条件是 w ∗ w^* w b ∗ b^* b α ∗ α^* α满足K-T条件。
先将式(19)写成以下形式: min ⁡ w , b , ξ   f ( w , b , ξ ) = ∣ ∣ w ∣ ∣ 2 2 + C ∑ i = 1 n ξ i \min_{w,b,ξ}\ f(w,b,ξ)={{||w||^2}\over2}+C\sum_{i=1}^nξ_i w,b,ξmin f(w,b,ξ)=2w2+Ci=1nξi s . t .    g i ( w , b , ξ i ) = y i ( w T x i + b ) + ξ i − 1 ≥ 0 s.t.\ \ g_i(w,b,ξ_i)=y_i(w^Tx_i+b)+ξ_i-1≥0 s.t.  gi(w,b,ξi)=yi(wTxi+b)+ξi10 h i ( w , b , ξ i ) = ξ i ≥ 0 h_i(w,b,ξ_i)=ξ_i≥0 hi(w,b,ξi)=ξi0写出其目标函数和约束函数的梯度: ∇ f ( w , b , ξ ) = ( ∣ ∣ w ∣ ∣ , 0 , C ) T ∇f(w,b,ξ)=(||w||,0,C)^T f(w,b,ξ)=(w,0,C)T ∇ g i ( w , b , ξ i ) = ( x i y i , y i , 1 ) T , ∇ h i ( 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)=(xiyi,yi,1)T,hi(w,b,ξi)=(0,0,1)T 2 n 2n 2n个约束条件分别引入广义拉格朗日乘子 α 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 = 1 n α i ( x i y i , y i , 1 ) T = ∑ i = 1 n μ 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)Ti=1nαi(xiyi,yi,1)T=i=1nμi(0,0,1)T=0将上式分解为: ∣ ∣ w ∣ ∣ − ∑ i = 1 n α i x i y i = 0 ||w||-\sum_{i=1}^nα_ix_iy_i=0 wi=1nαixiyi=0 − ∑ i = 1 n α i y i = 0 -\sum_{i=1}^nα_iy_i=0 i=1nαiyi=0 C − α i − μ i = 0 C-α_i-μ_i=0 Cαiμi=0 α i ( y i ( w T x i + 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)+ξi1)=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 αi0,        i=1,2,...,n μ i ≥ 0 ,          i = 1 , 2 , . . . , n μ_i≥0,\ \ \ \ \ \ \ \ i=1,2,...,n μi0,        i=1,2,...,n由此解得式(25)
选择一个 α j ∗ {α_j}^* αj满足 0 < α j ∗ < C 0<{α_j}^*<C 0<αj<C,对此有 y j ( w ∗ x j + b ∗ ) − 1 = 0              ( 27 ) y_j(w^*x_j+b^*)-1=0\ \ \ \ \ \ \ \ \ \ \ \ (27) yj(wxj+b)1=0            (27)注意到 y j 2 = 1 {y_j}^2=1 yj2=1,将(27)两边同时乘以 y j y_j yj,将式(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):XH使得对所有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
如下图,左边椭圆方程为 w 1 ( x ( 1 ) ) 2 + w 2 ( x ( 2 ) ) 2 + b = 0 w_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 ) T y=φ(x)=((x^{(1)})^2,(x^{(2)})^2)^T y=φ(x)=((x(1))2,(x(2))2)T则可将椭圆变换为下图中右边的直线 w 1 y ( 1 ) + w 2 y ( 2 ) + b = 0 w_1y^{(1)}+w_2y^{(2)}+b=0 w1y(1)+w2y(2)+b=0根据定义可得对所有z,x∈X,核函数为 K ( 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 K(x,z)=φ(x)φ(z)=(x(1))2(z(1))2+(x(2))2(z(2))2

这里写图片描述

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

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

4、常用核函数

这里写图片描述
</br/>

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

    如何求解式(20)的解α*呢?人们通过利用问题本身的特性,提出了很多高效算法,SMO就是其中一个著名的代表,这种算法1998年由Platt提出。
    将对偶问题(20)的目标函数求极大转换为求极小,即可得到SMO算法要解的如下问题:
这里写图片描述
其中 K ( x i , x j ) = x i T x j K(x_i,x_j)={x_i}^Tx_j K(xi,xj)=xiTxj,在这个问题中,变量是拉格朗日乘子,一个变量 α i α_i αi对应一个样本点 ( x i , y i ) (x_i,y_i) (xi,yi),变量的总数等于训练样本容量 N N N

1.SMO算法思路

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

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

不失一般性,假设选择的两个变量是 α 1 α_1 α1 α 2 α_2 α2,其他变量 α i α_i αi i = 3 , 4 , … , n i=3,4,…,n i=3,4,,n)是固定的。于是(28)-(30)的子问题可以写成:
这里写图片描述
其中 K i j = K ( x i , x j ) K_{ij}=K(x_i,x_j) Kij=K(xi,xj) i , j = 1 , 2 , … , n i,j=1,2,…,n i,j=1,2,,n ξ ξ ξ是常数。
######3.两个变量二次规划问题的求解方法
假设问题的初始解为 α i o l d {α_i}^{old} αiold α j o l d {α_j}^{old} αjold,最优解为 α i n e w {α_i}^{new} αinew α j n e w {α_j}^{new} αjnew,并且假设未经剪辑(忽略约束条件(33))时 α 2 α_2 α2的最优解为 α 2 n e w , u n c {α_2}^{new,unc} α2new,unc
为了叙述简单,记 g ( x ) = ∑ j = 1 n α j y j K ( x , x j ) + b g(x)=\sum_{j=1}^nα_jy_jK(x,x_j)+b g(x)=j=1nαjyjK(x,xj)+b E i = g ( x i ) − y i = ( ∑ j = 1 n α i y i K ( x i , x j ) + b ) − y i ,       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=1nαiyiK(xi,xj)+b)yi,     i=1,2     (34) i = 1 , 2 i=1,2 i=1,2时, E i E_i Ei为函数 g ( x ) g(x) g(x)对输入 x i x_i xi的预测值与真实输出 y i y_i yi之差。
α 2 n e w , u n c = α 2 o l d + y 2 ( E 1 − E 2 ) K 11 + K 22 − 2 K 12            ( 35 ) {α_2}^{new,unc}={α_2}^{old}+{{y_2(E_1-E_2)}\over{K_{11}+K_{22}-2K_{12}}}\ \ \ \ \ \ \ \ \ \ (35) α2new,unc=α2old+K11+K222K12y2(E1E2)          (35) α 2 n e w {α_2}^{new} α2new
这里写图片描述
其中当 y 1 y_1 y1 y 2 y_2 y2异号 L = m a x ( 0 , α 2 o l d − α 1 o l d ) , H = m i n ( C , C + α 2 o l d − α 1 o l d ) L= max(0,{α_2}^{old}-{α_1}^{old}),H=min(C,C+{α_2}^{old}-{α_1}^{old}) L=max(0,α2oldα1old)H=min(C,C+α2oldα1old) y 1 y_1 y1 y 2 y_2 y2同号 L = m a x ( 0 , α 2 o l d + α 1 o l d − C ) , H = m i n ( C , α 2 o l d + α 1 o l d ) L =max(0,{α_2}^{old}+{α_1}^{old}-C),H=min(C,{α_2}^{old}+{α_1}^{old}) L=max(0,α2old+α1oldC)H=min(C,α2old+α1old) α 2 n e w {α_2}^{new} α2new求得 α 1 n e w {α_1}^{new} α1new α 1 n e w = α 1 o l d + y 1 y 2 ( α 2 o l d − α 2 n e w )                ( 36 ) {α_1}^{new}={α_1}^{old}+y_1y_2({α_2}^{old}-{α_2}^{new})\ \ \ \ \ \ \ \ \ \ \ \ \ \ (36) α1new=α1old+y1y2(α2oldα2new)              (36)证明:
①求未经剪辑(忽略约束条件(33))时 α 2 α_2 α2的最优解 α 2 n e w , u n c {α_2}^{new,unc} α2new,unc
引进记号 v i = ∑ j = 3 n α j y j K ( x i , x j ) = g ( x i ) − ∑ j = 1 2 α j y j K ( x i , x j ) + b − b v_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=3nαjyjK(xi,xj)=g(xi)j=12αjyjK(xi,xj)+bb目标函数可写成 W ( α 1 , α 2 ) = 1 2 K 11 α 1 2 + 1 2 K 22 α 2 2 + y 1 y 2 K 12 α 1 α 2 − ( α 1 + α + 2 ) + y 1 v 1 α 1 + y 2 v 2 α 2 W(α_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)=21K11α12+21K22α22+y1y2K12α1α2(α1+α+2)+y1v1α1+y2v2α2 α 1 y 1 = ξ − α 2 y 2 α_1y_1=ξ-α_2y_2 α1y1=ξα2y2,等式两边同时乘以 y 1 y_1 y1,由 y i 2 = 1 {y_i}^2=1 yi2=1可将 α 1 α_1 α1表示为 α 1 = ( ξ − α 2 y 2 ) y 1 α_1=(ξ-α_2y_2)y_1 α1=(ξα2y2)y1代入式(31),得到只有α2的函数:
这里写图片描述
对α2求导数得
这里写图片描述
令其为0,得到
这里写图片描述
ξ = α 1 o l d y 1 + α 2 o l d y 2 ξ={α_1}^{old}y_1+{α_2}^{old}y_2 ξ=α1oldy1+α2oldy2代入,得到
这里写图片描述
解得 α 2 n e w , u n c = α 2 o l d + y 2 ( E 1 − E 2 K 11 + K 22 − 2 K 12 {α_2}^{new,unc}={α_2}^{old}+{{y_2(E_1-E_2}\over{K_{11}+K_{22}-2K_{12}}} α2new,unc=α2old+K11+K222K12y2(E1E2
②求经剪辑(考虑约束条件(33)) α 2 n e w {α_2}^{new} α2new的取值范围
假设取值范围为 L ≤ α 2 n e w ≤ H L≤{α_2}^{new}≤H Lα2newH考虑约束条件 0 ≤ α i ≤ C , i = 1 , 2 0≤α_i≤C,i=1,2 0αiC,i=1,2 α 2 α_2 α2的最优解,首先分析约束条件 α 1 y 1 + α 2 y 2 = − ∑ i = 3 n y i α i = ξ α_1y_1+α_2y_2 =−\sum_{i=3}^ny_iα_i =ξ α1y1+α2y2=i=3nyiαi=ξ α 1 α_1 α1当做自变量, α 2 α_2 α2为因变量,则上式变成 α 2 = − y 1 y 2 α 1 + y 2 ξ                        ( 37 ) α_2=-y_1y_2α_1+y_2ξ\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (37) α2=y1y2α1+y2ξ                      (37) y 1 y_1 y1 y 2 y_2 y2异号,令 k = y 2 ξ k=y_2ξ k=y2ξ,则式(37)为直线方程 α 2 = α 1 + k α_2=α_1+k α2=α1+k,图像如图6。
A线为 k > 0 k>0 k>0时, α 2 n e w {α_2}^{new} α2new的最大值为 C C C,最小值为 k = α 2 o l d − α 1 o l d k={α_2}^{old}-{α_1}^{old} k=α2oldα1old
B线为 k < 0 k<0 k<0时, α 2 n e w {α_2}^{new} α2new的最大值为 C + k = C + α 2 o l d − α 1 o l d C+k=C+{α_2}^{old}-{α_1}^{old} C+k=C+α2oldα1old,最小值为0;
综上, α 2 n e w {α_2}^{new} α2new需满足( α 2 α_2 α2的取值即要在直线上,又要在方框内): m a x ( 0 , α 2 o l d − α 1 o l d ) ≤ α 2 n e w ≤ m i n ( C , C + α 2 o l d − α 1 o l d ) max(0, {α_2}^{old}-{α_1}^{old})≤{α_2}^{new}≤min(C, C+{α_2}^{old}-{α_1}^{old}) max(0,α2oldα1old)α2newmin(C,C+α2oldα1old) L = m a x ( 0 , α 2 o l d − α 1 o l d ) L= max(0,{α_2}^{old}-{α_1}^{old}) L=max(0,α2oldα1old) H = m i n ( C , C + α 2 o l d − α 1 o l d ) H=min(C,C+{α_2}^{old}-{α_1}^{old}) H=min(C,C+α2oldα1old)

这里写图片描述

图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.两个变量( α 1 o l d {α_1}^{old} α1old α 2 o l d {α_2}^{old} α2old)的选择方法

①第1个变量的选择
SMO称选择第1个变量的过程为外层循环,外层循环在训练样本中选取违反K-T条件最严重的样本点,并将其对应的变量作为第1个变量,具体地,检验训练样本点(xi,yi)是否满足K-T条件,即
这里写图片描述
证明:
在“线性支持向量机”利用对偶问题求w和b那一部分,我们求得如下K-T条件为:
这里写图片描述
g ( x i ) g(x_i) g(xi)代入式(42),则式(42)可写成 α i ( y i g ( x i ) + ξ i − 1 ) = 0 α_i(y_ig(x_i)+ξ_i-1)=0 αi(yig(xi)+ξi1)=0

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

5.计算b和差值 E i E_i Ei

在每次完成两个变量的优化后,都要重新计算 b b b值,因为 b b b值关系到下一次优化时 E i E_i Ei的计算。 b n e w b^{new} bnew值的选择是使 α 1 n e w {α_1}^{new} α1new α 2 n e w {α_2}^{new} α2new满足K-T条件。
0 < α 1 n e w < C 0<{α_1}^{new}<C 0<α1new<C
b 1 n e w = − E 1 − y 1 K 11 ( α 1 n e w − α 1 o l d ) − y 2 K 21 ( α 2 n e w − α 2 o l d ) + b o l d {b_1}^{new}=−E_1 − y_1K_{11}({α_1}^{new}−{α_1}^{old})−y_2K_{21}({α_2}^{new}−{α_2}^{old})+b^{old} b1new=E1y1K11(α1newα1old)y2K21(α2newα2old)+bold 0 < α 2 n e w < C 0<{α_2}^{new}<C 0<α2new<C
b 2 n e w = − E 2 − y 1 K 12 ( α 1 n e w − α 1 o l d ) − y 2 K 22 ( α 2 n e w − α 2 o l d ) + b o l d {b_2}^{new}=−E_2 − y_1K_{12}({α_1}^{new}−{α_1}^{old})−y_2K_{22}({α_2}^{new}−{α_2}^{old})+b^{old} b2new=E2y1K12(α1newα1old)y2K22(α2newα2old)+bold
如果 α 1 n e w {α_1}^{new} α1new α 2 n e w {α_2}^{new} α2new同时满足条件 0 < α i n e w < C 0<{α_i}^{new}<C 0<αinew<C i = 1 , 2 i=1,2 i=1,2,那么
b n e w = b 1 n e w = b 2 n e w b^{new}={b_1}^{new}={b_2}^{new} bnew=b1new=b2new如果 α 1 n e w {α_1}^{new} α1new α 2 n e w {α_2}^{new} α2new其中一个满足 0 < α i n e w < C 0<{α_i}^{new}<C 0<αinew<C,另一个不满足 0 < α i n e w < C 0<{α_i}^{new}<C 0<αinew<C,这里假设 α 2 n e w {α_2}^{new} α2new满足 0 < α 2 n e w < C 0<{α_2}^{new}<C 0<α2new<C,另一个即 α 1 n e w {α_1}^{new} α1new是0或者C,那么 b n e w = b 2 n e w b^{new}={b_2}^{new} bnew=b2new如果 α 1 n e w {α_1}^{new} α1new α 2 n e w {α_2}^{new} α2new是0或者C,那么 b 1 n e w {b_1}^{new} b1new b 2 n e w {b_2}^{new} b2new以及它们之间的数都符合K-T条件,这时选择它们的中点作为 b n e w b^{new} bnew,那么 b n e w = b 1 n e w + b 2 n e w 2 b^{new}={{{b_1}^{new}+{b_2}^{new}}\over2} bnew=2b1new+b2new
证明过程,在本地写好,然而太长了懒得搬过来,就截图吧
在每次完成两个变量的优化之后,还必须更新对应的 E i E_i Ei值,并将它们保存在列表中。 E i E_i Ei值的更新要用到 b n e w b^{new} bnew值,以及所有支持向量对应的 α j α_j αj,得 E i n e w = ∑ S α j y j K ( x i , x j ) + b n e w − y i {E_i}^{new}=\sum_Sα_jy_jK(x_i,x_j) + b^{new} − y_i Einew=SαjyjK(xi,xj)+bnewyi其中, S S S是所有支持向量 x j x_j xj的集合。

6.SMO算法

输入:训练数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } D=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\} D={(x1,y1),(x2,y2),,(xN,yN)} y i ∈ − 1 , 1 y_i∈{-1,1} yi1,1 i = 1 , 2 , … , N i=1,2,…,N i=1,2,,N,精度 ε ε ε,惩罚参数 C C C
输出:近似解 α ∗ α^* α
①取初始值 α ( 0 ) = 0 α^{(0)}=0 α(0)=0,令 k = 0 k=0 k=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 + 1 k=k+1 k=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,labelMat

def selectJrand(i,m):
    j=i
    while (j==i):
        j = int(random.uniform(0,m))
    return j

def clipAlpha(aj,H,L):
    if aj > H:
        aj = H
    if L > aj:
        aj = L
    return aj

class optStruct:
    def __init__(self,dataMatIn, classLabels, C, toler):
        self.X = dataMatIn
        self.labelMat = classLabels
        self.C = C
        self.tol = toler
        self.m = shape(dataMatIn)[0]
        self.alphas = mat(zeros((self.m,1))) #初始化alphas为0
        self.b = 0                           #初始化b为0
        self.eCache = mat(zeros((self.m,2))) #初始化Ek为0

def calcEk(oS, k):
    fXk = float(multiply(oS.alphas,oS.labelMat).T*(oS.X*oS.X[k,:].T)) + oS.b
    Ek = fXk - float(oS.labelMat[k])         #对应式(34)Ei=g(xi)+b-yi
    return Ek

def selectJ(i, oS, Ei):    #返回使|E1-E2|值最大的E2及E2的位置j
    maxK = -1
    maxDeltaE = 0
    Ej = 0
    oS.eCache[i] = [1,Ei]  #更新位置i的的E1,用1标示该值为更新过的Ei
    validEcacheList = nonzero(oS.eCache[:,0].A)[0] #返回eCache数组第一列不为0的值,即更新过的Ei的索引
    if (len(validEcacheList)) > 1:     #如果eCache的Ek个数大于1,返回使|E1-E2|值最大的E2及E2的位置j
        for k in validEcacheList:
            if k == i: continue
            Ek = calcEk(oS, k)
            deltaE = abs(Ei - Ek)
            if (deltaE > maxDeltaE):
                maxK = k; maxDeltaE = deltaE; Ej = Ek
        return maxK, Ej
    else:                  #如果eCache的Ek都是没有更新过的,则随机选择一个与E1不同位置的E2并返回E2的位置j
        j = selectJrand(i, oS.m)
        Ej = calcEk(oS, j)
    return j, Ej

def updateEk(oS, k):
    Ek = calcEk(oS, k)
    oS.eCache[k] = [1,Ek]

def innerL(i, oS):
    Ei = calcEk(oS, i) #计算E1
    if ((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条件的alpha1
        j,Ej = selectJ(i, oS, Ei)                                   #选择smo的第二个变量
        alphaIold = oS.alphas[i].copy()                             #alpha1old
        alphaJold = oS.alphas[j].copy()                             #alpha2old
        if (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-K22
        if eta >= 0: print "eta>=0"; return 0                                                  #异常情况,返回
        oS.alphas[j] -= oS.labelMat[j]*(Ei - Ej)/eta                #式(35)计算alpha2new,unc
        oS.alphas[j] = clipAlpha(oS.alphas[j],H,L)                  #返回alpha2new
        updateEk(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)求alpha1new
        updateEk(oS, i)                                             #更新E1的值
        #b1new
        b1 = 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
        #b2new
        b2 = 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 = b1
        elif (0 < oS.alphas[j]) and (oS.C > oS.alphas[j]): oS.b = b2
        else: oS.b = (b1 + b2)/2.0
        return 1
    else: return 0

def smoP(dataMatIn, classLabels, C, toler, maxIter):
    #样本X,样本Y,惩罚参数C,精度e,最大循环次数maxIter
    oS = optStruct(mat(dataMatIn),mat(classLabels).transpose(),C,toler)
    iter = 0
    entireSet = True
    alphaPairsChanged = 0
    while (iter < maxIter) and ((alphaPairsChanged > 0) or (entireSet)):
    #循环次数大于maxIter或alphaPairsChanged连续2次等于0,则退出循环
        alphaPairsChanged = 0
        if entireSet:
            for i in range(oS.m):                    #循环所有alphas,作为smo的第一个变量
                alphaPairsChanged += innerL(i,oS)    #inner函数:如果有任意一对alphas值发生改变,返回1
                print "fullSet, iter: %d i:%d, pairs changed %d" % (iter,i,alphaPairsChanged)
            iter += 1
        else:
            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 += 1
        if entireSet: entireSet = False
        elif (alphaPairsChanged == 0): entireSet = True
        print "iteration number: %d" % iter
    return oS.b,oS.alphas

def 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》
《高等数学第六版下册(同济大学)》
《运筹学 第三版》清华大学出版社

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值