SVM推导&python实现
1-基本型推导
SVM优化公式的诞生
- 给定样本集,
D
D
D中有
n
n
n个样本点
D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) , … , ( x n , y n ) } , x i ∈ R d i m , y i ∈ { − 1 , 1 } , i = 1 , 2 , . . . , n D=\{(x_1,y_1),(x_2,y_2),(x_3,y_3),\dots,(x_n,y_n)\},x_i\in R^{dim},y_i\in\{-1,1\},i=1,2,...,n D={(x1,y1),(x2,y2),(x3,y3),…,(xn,yn)},xi∈Rdim,yi∈{−1,1},i=1,2,...,n - SVM就是为了寻找一个超平面,将不同类别的样本分开
- 设超平面:
( ω , b ) : ω T x + b = 0 , ω , x ∈ R d i m (\omega,b):\omega^Tx+b=0,\omega,x\in R^{dim} (ω,b):ωTx+b=0,ω,x∈Rdim- ω = ( ω 1 , ω 2 , ω 3 , … , ω d i m ) \omega=(\omega_1,\omega_2,\omega_3,\dots,\omega_{dim}) ω=(ω1,ω2,ω3,…,ωdim)为法向量,决定超平面的方向
- b b b为位移项,决定了超平面与原点之间的距离
- 样本空间中任意点
x
x
x到超平面
(
ω
,
b
)
(\omega,b)
(ω,b)的距离
γ = ∣ ω T x + b ∣ ∣ ∣ ω ∣ ∣ \gamma=\frac{|\omega^Tx+b|}{||\omega||} γ=∣∣ω∣∣∣ωTx+b∣- 假设超平面
(
ω
,
b
)
(\omega,b)
(ω,b)能正确分类,则对于
(
x
i
,
y
i
)
∈
D
(x_i,y_i)\in D
(xi,yi)∈D有:
{ ω T x i + b > 0 , y i = 1 ω T x i + b < 0 , y i = − 1 \left\{ \begin{aligned} &\omega^Tx_i+b>0,&y_i=1\\ &\omega^Tx_i+b<0,&y_i=-1\\ \end{aligned} \right. {ωTxi+b>0,ωTxi+b<0,yi=1yi=−1
逻辑回归的思路,但如果作为SVM算法的优化公式,明显取不到最优,因为这个是最基本的成立条件,不能确定这样的超平面 ( ω , b ) (\omega,b) (ω,b)最优的分隔样本空间
- 假设超平面
(
ω
,
b
)
(\omega,b)
(ω,b)能正确分类,则对于
(
x
i
,
y
i
)
∈
D
(x_i,y_i)\in D
(xi,yi)∈D有:
- 为了能取最优,SVM令:
{ ω T x i + b ≥ 1 , y i = 1 ω T x i + b ≤ − 1 , y i = − 1 \left\{ \begin{aligned} &\omega^Tx_i+b\geq1,&y_i=1\\ &\omega^Tx_i+b\leq-1,&y_i=-1\\ \end{aligned} \right. {ωTxi+b≥1,ωTxi+b≤−1,yi=1yi=−1
1.如果 x i x_i xi是边界点,那么 ω T x i + b = 1 \omega^Tx_i+b=1 ωTxi+b=1,所以这个方程组就是说一个有超平面将样本空间分隔为边界点之外,有了个超平面上下有了个空白区。
2.其中距离超平面最近的几个训练样本点使上式的等号成立,这几个训练样本就被称作支持向量(support vector),两个异类支持向量到超平面的距离之和,也称为间隔(margin)。 γ = ∣ b 1 − b 2 ∣ ∣ ∣ ω ∣ ∣ = 2 ∣ ∣ ω ∣ ∣ \gamma=\frac{|b_1-b_2|}{||\omega||}=\frac{2}{||\omega||} γ=∣∣ω∣∣∣b1−b2∣=∣∣ω∣∣2
- SVM令间隔最大(也就是空白区),然后取中间的平面,因为其鲁棒性1好。
- 所以文件就从找到一个最好的划分超平面转换为了找到样本空间里的最大化间隔。
f : m a x ω , b 2 ∣ ∣ ω ∣ ∣ s . t . y i ( ω T x i + b ) ≥ 1 , i = 1 , 2 , . . . , n f:max_{\omega,b}\frac{2}{||\omega||}\\s.t.\ y_i(\omega^Tx_i+b)\geq1,i=1,2,...,n f:maxω,b∣∣ω∣∣2s.t. yi(ωTxi+b)≥1,i=1,2,...,n- 因为样本空间 D D D里总共有 n n n个点,所以 i : 1 → n , ( x i , y i ) i:1\to n,(x_i,y_i) i:1→n,(xi,yi)代表一个样本点
- 条件其实就想当与 ∣ ( ω T x i + b ) ∣ ≥ 1 , y i |(\omega^Tx_i+b)|\geq1,y_i ∣(ωTxi+b)∣≥1,yi就是来消去负号的,就是跟SVM的约束条件一样,不信向上看。
- SVM的基本型是求最小化,所以其形式就是将上式变形,得:
f : m i n ω , b 1 2 ∣ ∣ ω ∣ ∣ 2 s . t . y i ( ω T x i + b ) ≥ 1 , i = 1 , 2 , . . . , n f:min_{\omega,b}\frac{1}{2}{||\omega||}^2\\s.t.\ y_i(\omega^Tx_i+b)\geq1,i=1,2,...,n f:minω,b21∣∣ω∣∣2s.t. yi(ωTxi+b)≥1,i=1,2,...,n- 这样就转化为一个凸二次规划问题(convex quadratic programming)
凸优化问题:实际上是研究定义于凸集中的凸函数最小化问题。
- 凸集:
- 几何意义:指集合中任意两点间的线段永远在该集合中的集合
- 数学定义: x , y ∈ C , θ ∈ R , 0 ≤ θ ≤ 1 , x,y\in C,\theta\in R,0\leq\theta\leq1, x,y∈C,θ∈R,0≤θ≤1,有 θ x + ( 1 − θ ) y ∈ C \theta x+(1-\theta)y\in C θx+(1−θ)y∈C
- 凸函数:
- 几何意义:函数任意两点 ( x , y ) (x, y) (x,y)连线上的值一定大于对应自变量区 ( x , y ) (x, y) (x,y)间内的函数值$(f(x),f(y))
- 数学定义: ∀ x , y ∈ D ( f ) , θ ∈ R , 0 ≤ θ ≤ 1 , \forall x,y\in D(f),\theta\in R,0\leq\theta\leq1, ∀x,y∈D(f),θ∈R,0≤θ≤1,有: f ( θ x + ( 1 − θ ) y ) ≤ θ f ( x ) + ( 1 − θ ) f ( y ) f(\theta x+(1-\theta)y)\leq\theta f(x)+(1-\theta)f(y) f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y)
简单来讲,凸函数问题再优化问题的形式为 m i n f ( x ) , s . t . x ∈ C min\ f(x),\ s.t.x\in C min f(x), s.t.x∈C其中 f f f是一个凸函数, C C C为凸集, x x x是优化变量
专业的定义是这样的: m i n f ( x ) s . t . g i ( x ) ≤ 0 , i = 1 , . . . , m h j ( x ) = 0 , j = 1 , . . . , m min\ f(x)\\\begin{aligned}&s.t.&g_i(x)\leq0,&i=1,...,m\\& &h_j(x)=0,&j=1,...,m\end{aligned} min f(x)s.t.gi(x)≤0,hj(x)=0,i=1,...,mj=1,...,m其中 f f f是一个凸函数, g i g_i gi是一个凸函数, h i h_i hi为仿射函数, x x x是优化变量
常见的凸优化问题有:线性规划、二次规划、二次约束的二次规划、半正定规划
优化方法:通常一个优化问题可以从两个角度来考虑,即主问题(primal problem)和对偶问题(dual problem)。在约束最优化问题中,常常利用拉格朗日对偶性将原始问题(主问题)转换成对偶问题,通过解对偶问题来得到原始问题的解。这样做是因为对偶问题的复杂度往往低于主问题。 f : m i n ω , b 1 2 ∣ ∣ ω ∣ ∣ 2 s . t . y i ( ω T x i + b ) ≥ 1 , i = 1 , 2 , . . . , n f:min_{\omega,b}\frac{1}{2}{||\omega||}^2\\s.t.\ y_i(\omega^Tx_i+b)\geq1,i=1,2,...,n f:minω,b21∣∣ω∣∣2s.t. yi(ωTxi+b)≥1,i=1,2,...,n在求解SVM的时候,我们也会通过其拉格朗日对偶性,将该主问题式转换成对偶问题,然后进行求解。
需要说明的是,因为主问题本身是一个凸二次规划问题,因此它是能直接用现成的优化计算包求解的,使用拉格朗日乘子法得到其对偶问题是为了优化运算效率。
Lagrange(拉格朗日)优化
- 单条件优化
高数上的教程上有,具体用得到再补课吧。
在约束 g ( x ) ≤ 0 g(x)\leq0 g(x)≤0最小化 f ( x ) f(x) f(x)的任务,可以转化为 f : m i n L ( x , λ ) = f ( x ) + λ g ( x ) s . t . { g ( x ) ≤ 0 λ ≥ 0 λ j g j ( x ) = 0 f:min\ L(x,\lambda)=f(x)+\lambda g(x)\\ s.t. \left\{ \begin{aligned} &g(x)\leq0\\ &\lambda\geq0\\ &\lambda_jg_j(x)=0\\ \end{aligned} \right. f:min L(x,λ)=f(x)+λg(x)s.t.⎩⎪⎨⎪⎧g(x)≤0λ≥0λjgj(x)=0 - 多条件优化
具有 m m m个等式约束和 n n n个不等式,且可行域 D ⊂ R d i m D\subset R^{dim} D⊂Rdim非空优化问题
m i n x f ( x ) s . t . g i ( x ) ≤ 0 , i = 1 , . . . , n h j ( x ) = 0 , j = 1 , . . . , m min_x\ f(x)\\\begin{aligned}&s.t.&g_i(x)\leq0,&i=1,...,n\\& &h_j(x)=0,&j=1,...,m\end{aligned} minx f(x)s.t.gi(x)≤0,hj(x)=0,i=1,...,nj=1,...,m
引入拉格朗日算子 λ = ( λ 1 , λ 2 , . . . , λ n ) T \lambda=(\lambda_1,\lambda_2,...,\lambda_n)^T λ=(λ1,λ2,...,λn)T和 μ = ( μ 1 , μ 2 , . . . , μ m ) T \mu=(\mu_1,\mu_2,...,\mu_m)^T μ=(μ1,μ2,...,μm)T,相应的拉格朗日函数为 L ( x , λ , μ ) = f ( x ) + ∑ i = 1 n λ i g i ( x ) + ∑ j = 1 m μ j h j ( x ) s . t . { g i ( x ) ≤ 0 λ i ≥ 0 λ i g i ( x ) = 0 L(x,\lambda,\mu)=f(x)+\sum^n_{i=1}\lambda_ig_i(x)+\sum^m_{j=1}\mu_jh_j(x)\\ s.t. \left\{ \begin{aligned} &g_i(x)\leq0\\ &\lambda_i\geq0\\ &\lambda_ig_i(x)=0 \end{aligned} \right. L(x,λ,μ)=f(x)+i=1∑nλigi(x)+j=1∑mμjhj(x)s.t.⎩⎪⎨⎪⎧gi(x)≤0λi≥0λigi(x)=0
SVM的lagrange函数
- 基本公式
f
:
m
i
n
ω
,
b
1
2
∣
∣
ω
∣
∣
2
s
.
t
.
y
i
(
ω
T
x
i
+
b
)
≥
1
,
i
=
1
,
2
,
.
.
.
,
n
f:min_{\omega,b}\frac{1}{2}{||\omega||}^2\\s.t.\ y_i(\omega^Tx_i+b)\geq1,i=1,2,...,n
f:minω,b21∣∣ω∣∣2s.t. yi(ωTxi+b)≥1,i=1,2,...,n
- f ( ω , b ) = 1 2 ∣ ∣ ω ∣ ∣ 2 f(\omega,b)=\frac{1}{2}{||\omega||}^2 f(ω,b)=21∣∣ω∣∣2
- g ( ω , b ) = 1 − y i ( ω T x i + b ) ≤ 0 , i = 1 , 2 , . . . , n g(\omega,b)=1-y_i(\omega^Tx_i+b)\leq0,i=1,2,...,n g(ω,b)=1−yi(ωTxi+b)≤0,i=1,2,...,n
- h ( ω , b ) = 0 h(\omega,b)=0 h(ω,b)=0
- 带入
l
a
g
r
a
n
g
e
lagrange
lagrange函数
L ( ω , b , α ) = 1 2 ∣ ∣ ω ∣ ∣ 2 + ∑ i = 1 n α i ( 1 − y i ( ω T x i + b ) ) L(\omega,b,\alpha)=\frac{1}{2}{||\omega||}^2+\sum^n_{i=1}\alpha_i(1-y_i(\omega^Tx_i+b)) L(ω,b,α)=21∣∣ω∣∣2+i=1∑nαi(1−yi(ωTxi+b))其中 α = ( α 1 , α 2 , . . . , α n ) \alpha=(\alpha_1,\alpha_2,...,\alpha_n) α=(α1,α2,...,αn)为拉格朗日算子, α ≥ 0 \alpha\geq0 α≥0。
多约束对偶问题
- 多约束对偶问题的主问题
m i n x f ( x ) s . t . g i ( x ) ≤ 0 , i = 1 , . . . , n h j ( x ) = 0 , j = 1 , . . . , m min_x\ f(x)\\\begin{aligned}&s.t.&g_i(x)\leq0,&i=1,...,n\\& &h_j(x)=0,&j=1,...,m\end{aligned} minx f(x)s.t.gi(x)≤0,hj(x)=0,i=1,...,nj=1,...,m - 其相应的拉格朗日函数为
L ( x , λ , μ ) = f ( x ) + ∑ i = 1 n λ i g i ( x ) + ∑ j = 1 m μ j h j ( x ) L(x,\lambda,\mu)=f(x)+\sum^n_{i=1}\lambda_ig_i(x)+\sum^m_{j=1}\mu_jh_j(x) L(x,λ,μ)=f(x)+i=1∑nλigi(x)+j=1∑mμjhj(x) - 主问题对应的拉格朗日函数
Γ
:
R
n
⋅
R
m
→
R
\Gamma:R^n\cdot R^m\to R
Γ:Rn⋅Rm→R定义为(
i
n
f
inf
inf下确界):
Γ
(
λ
,
μ
)
=
i
n
f
x
∈
D
L
(
x
,
λ
,
μ
)
=
i
n
f
x
∈
D
(
f
(
x
)
+
∑
i
=
1
n
λ
i
g
i
(
x
)
+
∑
j
=
1
m
μ
i
h
j
(
x
)
)
\Gamma(\lambda,\mu)=inf_{x\in D}L(x,\lambda,\mu)=inf_{x\in D}(f(x)+\sum^n_{i=1}\lambda_ig_i(x)+\sum^m_{j=1}\mu_ih_j(x))
Γ(λ,μ)=infx∈DL(x,λ,μ)=infx∈D(f(x)+i=1∑nλigi(x)+j=1∑mμihj(x))若
x
~
∈
D
\tilde{x}\in D
x~∈D为主问题可行域中的点,则对任意
λ
≥
0
\lambda\geq0
λ≥0和
μ
\mu
μ都有
∑
j
=
1
m
μ
j
h
j
(
x
)
+
∑
i
=
1
n
λ
i
g
i
(
x
)
≤
0
\sum^m_{j=1}\mu_jh_j(x)+\sum^n_{i=1}\lambda_ig_i(x)\leq0
j=1∑mμjhj(x)+i=1∑nλigi(x)≤0进而有
Γ
(
λ
,
μ
)
=
i
n
f
x
∈
D
L
(
x
,
λ
,
μ
)
≤
L
(
x
~
,
λ
,
μ
)
≤
f
(
x
~
)
\Gamma(\lambda,\mu)=inf_{x\in D}L(x,\lambda,\mu)\leq L(\tilde{x},\lambda,\mu)\leq f(\tilde{x})
Γ(λ,μ)=infx∈DL(x,λ,μ)≤L(x~,λ,μ)≤f(x~)若主问题的最优值为
p
∗
p^*
p∗,则对任意
μ
≥
0
\mu\geq0
μ≥0和
λ
\lambda
λ都有
Γ
(
λ
,
μ
)
≤
p
∗
\Gamma(\lambda,\mu)\leq p^*
Γ(λ,μ)≤p∗即对偶函数给出了主问题最优值的下界。显然,这个下界取决于
μ
\mu
μ和
λ
\lambda
λ的值。于是一个很自然的问题,即:基于对偶函数能获得的最好下界是什么?
m
a
x
λ
,
μ
Γ
(
λ
,
μ
)
s
.
t
.
μ
≥
0
max_{\lambda,\mu}\Gamma(\lambda,\mu)\\s.t.\ \mu\geq0
maxλ,μΓ(λ,μ)s.t. μ≥0上式就是主问题的对偶问题,其中
μ
\mu
μ和
λ
\lambda
λ称为对偶变量(dual variable)。无论主问题的凸性如何,对偶问题始终是凸优化问题。
考虑对偶问题的最优值 d ∗ d^* d∗,显然有- d ∗ ≤ p ∗ d^*\leq p^* d∗≤p∗,这称为“弱对偶性(weak duality)”成立
-
d
∗
=
p
∗
d^*=p*
d∗=p∗,则称为“强对偶性(strong duality)”成立
此时由对偶问题能获得主问题的最优下界
对于一般的优化问题,强对偶性通常不成立,但是若主问题是凸优化问题,式中 f ( x ) f(x) f(x)和 g i ( x ) g_i(x) gi(x)均为凸函数, h j ( x ) h_j(x) hj(x)为仿射函数,且其可行域中至少有一点使不等式约束严格成立,则此时强对偶性成立。
在强对偶性成立时,将拉格朗日函数分别对元变量和对偶变量求导,再同时令导数等于0,即可得到原变量与对偶变量的数值关系。
于是对偶问题解决了,主问题也就解决了。
SVM的对偶问题
- SVM主问题
f : m i n ω , b 1 2 ∣ ∣ ω ∣ ∣ 2 s . t . y i ( ω T x i + b ) ≥ 1 , i = 1 , 2 , . . . , n f:min_{\omega,b}\frac{1}{2}{||\omega||}^2\\s.t.\ y_i(\omega^Tx_i+b)\geq1,i=1,2,...,n f:minω,b21∣∣ω∣∣2s.t. yi(ωTxi+b)≥1,i=1,2,...,n - SVM的lagrange函数
L ( ω , b , α ) = 1 2 ∣ ∣ ω ∣ ∣ 2 + ∑ i = 1 n α i ( 1 − y i ( ω T x i + b ) ) L(\omega,b,\alpha)=\frac{1}{2}{||\omega||}^2+\sum^n_{i=1}\alpha_i(1-y_i(\omega^Tx_i+b)) L(ω,b,α)=21∣∣ω∣∣2+i=1∑nαi(1−yi(ωTxi+b))其中 α = ( α 1 , α 2 , . . . , α n ) \alpha=(\alpha_1,\alpha_2,...,\alpha_n) α=(α1,α2,...,αn)为拉格朗日算子, α ≥ 0 \alpha\geq0 α≥0。
SVM恰恰满足了强对偶性 - 求解
- 令 L ( ω , b , α ) L(\omega,b,\alpha) L(ω,b,α)对 ω \omega ω和 b b b的偏导为0,得 ω = ∑ i = 1 n α i y i x i (1) \tag{1}\omega=\sum^n_{i=1}\alpha_iy_ix_i ω=i=1∑nαiyixi(1) 0 = ∑ i = 1 m α i y i (2) \tag{2}0=\sum^m_{i=1}\alpha_iy_i 0=i=1∑mαiyi(2)
- 将(1)带入SVM的lagrange函数,可将 L ( ω , b , α ) L(\omega,b,\alpha) L(ω,b,α)中的 ω \omega ω和 b b b消去,在考虑(2)的约束,得到SVM的对偶问题 m a x α ∑ i = 1 n α i − 1 2 ∑ i = 1 n ∑ j = 1 n α i α j y i y j x i T x j s . t . ∑ i = 1 n α i y i = 0 , α i ≥ 0 , i = 1 , 2 , . . . , n (3) \tag{3}max_{\alpha}\sum^n_{i=1}\alpha_i-\frac{1}{2}\sum^n_{i=1}\sum^n_{j=1}\alpha_i\alpha_jy_iy_jx_i^Tx_j\\s.t.\sum^n_{i=1}\alpha_iy_i=0,\alpha_i\geq0,i=1,2,...,n maxαi=1∑nαi−21i=1∑nj=1∑nαiαjyiyjxiTxjs.t.i=1∑nαiyi=0,αi≥0,i=1,2,...,n(3)
(3)式是一个二次规划问题,可使用通用的二次规划算法来求解,例如SMO算法
求解模型
- 解出
α
\alpha
α后,求出
ω
\omega
ω和
b
b
b即可得到模型
f
(
x
)
=
ω
T
x
+
b
=
∑
i
=
1
n
α
i
y
i
x
i
T
x
+
b
(4)
\tag{4}f(x)=\omega^Tx+b=\sum^n_{i=1}\alpha_iy_ix_i^Tx+b
f(x)=ωTx+b=i=1∑nαiyixiTx+b(4)从对偶问题中解出的
α
i
\alpha_i
αi是SVM的lagrange函数中的拉格朗日算子,它恰好对应着训练样本
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi),因为SVM标准式中还有不等式约束,因此上述过程还需满足条件,即
{ α i ≥ 0 y i f ( x i ) − 1 ≥ 0 α i ( y i f ( x i ) − 1 ) = 0 \left\{ \begin{aligned} &\alpha_i\geq0\\ &y_if(x_i)-1\geq0\\ &\alpha_i(y_if(x_i)-1)=0 \end{aligned} \right. ⎩⎪⎨⎪⎧αi≥0yif(xi)−1≥0αi(yif(xi)−1)=0- 若 α = 0 \alpha=0 α=0,则该样本不会在(3)中出现,也就不会对 f ( x ) f(x) f(x)产生任何影响
- 若 α > 0 \alpha>0 α>0,则必有 y i f ( x i ) = 1 , 所 对 应 的 样 本 点 位 于 最 大 间 隔 边 上 , 是 一 个 支 持 向 量 y_if(x_i)=1,所对应的样本点位于最大间隔边上,是一个支持向量 yif(xi)=1,所对应的样本点位于最大间隔边上,是一个支持向量
- 这显示出支持向量机的一个重要性质:
训练完成后,大部分的训练样本都不需保留,最终模型仅与支持向量有关。
Reference
[1]https://zhuanlan.zhihu.com/p/35755150
2-python实现
'''
调用scikit-learn库,一个经典的机器学习库
'''
import numpy as np
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])
from sklearn.svm import SVC
clf = make_pipeline(StandardScaler(), SVC(gamma='auto'))
clf.fit(X, y)
print(clf.predict([[-0.8, -1]]))
更多的官方文档里有的是,scikit-learn官方文档
鲁棒性: 对于未知样本点的分类效果好,不会轻易被扰乱 ↩︎