机器学习之SVM详细推导及源码

求解二次规划问题

标准形式:
m i n 1 2 x T P x + q T x min\frac{1}{2}x^TPx+q^Tx min21xTPx+qTx
注意:p为对称矩阵,x是列向量

示例:
1 2 [ x 1 x 2 ] [ a b b d ] [ x 1 x 2 ] = 1 2 ( a x 1 2 + d x 2 2 + 2 b x 1 x 2 ) \frac{1}{2} \begin{bmatrix} x_1&x_2\\ \end{bmatrix} \begin{bmatrix} a&b\\ b&d\\ \end{bmatrix} \begin{bmatrix} x_1\\ x_2\\ \end{bmatrix}= \frac{1}{2} (ax_1^2+dx_2^2+2bx_1x_2) 21[x1x2][abbd][x1x2]=21(ax12+dx22+2bx1x2)

min ⁡ x 1 2 + x 2 2 + x 1 x 2 + 2 x 1 + x 2 \min x_1^2+x_2^2+x_1x_2+2x_1+x_2 minx12+x22+x1x2+2x1+x2

s . t . x i ≥ 0 , i = 1 , 2 s.t.x_i≥0,i=1,2 s.t.xi0i=1,2

∑ i = 1 2 x i = 1 \sum_{i=1}^2x_i=1 i=12xi=1

因此,由
x 1 2 + x 2 2 + x 1 x 2 x_1^2+x_2^2+x_1x_2 x12+x22+x1x2

{ 1 2 a = 1 1 2 d = 1 1 2 ∗ 2 ∗ b = 1 \begin{cases} \frac{1}{2}a=1 \\ \frac{1}{2}d=1 \\ \frac{1}{2}*2*b=1 \end{cases} 21a=121d=1212b=1

推出
p = [ 2 1 1 2 ] p= \begin{bmatrix} 2&1\\ 1&2\\ \end{bmatrix} p=[2112]

2 x 1 + x 2 2x_1+x_2 2x1+x2
推出
q = [ 2 1 ] q= \begin{bmatrix} 2\\ 1\\ \end{bmatrix} q=[21]
将约束条件转化为标准形式
s . t . − x i ≤ 0 , i = 1 , 2 s.t.-x_i≤0,i=1,2 s.t.xi0i=1,2

∑ i = 1 2 x i = 1 \sum_{i=1}^2x_i=1 i=12xi=1

推出:
G = [ − 1 0 0 − 1 ] G= \begin{bmatrix} -1&0\\ 0&-1\\ \end{bmatrix} G=[1001]

h = [ 0 0 ] h= \begin{bmatrix} 0\\ 0\\ \end{bmatrix} h=[00]

A = [ 1 1 ] A= \begin{bmatrix} 1&1\\ \end{bmatrix} A=[11]

b = 1 b=1 b=1

求解二次规划问题,可通过:cvxopt.solvers.qp(P,q,G,h,A,b)来进行求解。
p = [ 2 1 1 2 ] , q = [ 2 1 ] , G = [ − 1 0 0 − 1 ] , h = [ 0 0 ] , A = [ 1 1 ] , b = 1 p= \begin{bmatrix} 2&1\\ 1&2\\ \end{bmatrix}, q= \begin{bmatrix} 2\\ 1\\ \end{bmatrix}, G= \begin{bmatrix} -1&0\\ 0&-1\\ \end{bmatrix}, h= \begin{bmatrix} 0\\ 0\\ \end{bmatrix}, A= \begin{bmatrix} 1&1\\ \end{bmatrix}, b=1 p=[2112],q=[21],G=[1001],h=[00],A=[11],b=1

支持向量机

线性方程:
ω T x + b = 0 \omega^Tx+b=0 ωTx+b=0
其中,法向量
ω = ( ω 1 ; ω 2 ; ω 3 ; … ; ω d ) \omega=(\omega_1;\omega_2;\omega_3;…;\omega_d) ω=(ω1;ω2;ω3;;ωd)
b为截距

补充:点到直线的距离公式:
d = ∣ A x 0 + B y 0 + c ( A 2 + B 2 ) ∣ d = |\frac{Ax_0+By_0+c}{\sqrt(A^2+B^2)}| d=( A2+B2)Ax0+By0+c
样本空间中任意点x到超平面(w,b)的距离为:
r = ∣ ω T x + b ∣ ∣ ∣ ω ∣ ∣ r=\frac{|\omega^Tx+b|}{||\omega||} r=ωωTx+b
训练样本正确分类为:
{ ω T x i + b ≥ + 1 , y i = + 1 ω T x i + b ≤ − 1 , y i = − 1 \begin{cases} \omega^Tx_i+b≥+1,y_i=+1\\ \omega^Tx_i+b≤-1,y_i=-1 \end{cases} {ωTxi+b+1yi=+1ωTxi+b1yi=1
间隔:
γ = 2 ∣ ∣ ω ∣ ∣ \gamma=\frac{2}{||\omega||} γ=ω2

在这里插入图片描述

要找最大间隔,找到约束的参数w和b,就要y最大
max ⁡ ω , b 2 ∣ ∣ ω ∣ ∣ \max_{\omega,b}\frac{2}{||\omega||} ω,bmaxω2

s . t . y i ( ω T x i + b ) ≥ 1 , i = 1 , 2 , … , m s.t.y_i(\omega^Tx_i+b)≥1,i=1,2,…,m s.t.yi(ωTxi+b)1i=1,2,m

为了最大化间隔,最大化||w||-1,等价于最小化||w||2,
min ⁡ ω , b 1 2 ∣ ∣ ω ∣ ∣ 2 \min_{\omega,b}\frac{1}{2}||\omega||^2 ω,bmin21ω2

s . t . y i ( ω T x i + b ) ≥ 1 , i = 1 , 2 , … , m s.t. y_i(\omega^Tx_i+b)≥1,i=1,2,…,m s.t.yi(ωTxi+b)1i=1,2,m

综上:我们所要求的目标为w和b

求解上述问题,需要求解上述公式

对偶问题

上述公式为凸二次规划问题,需使用拉格朗日乘数法求得对偶问题,拉格朗日函数
L ( ω , b , α ) = 1 2 ∣ ∣ ω ∣ ∣ 2 + ∑ i = 1 m α i ( 1 − y i ( ω T x i + b ) ) L(\omega,b,\alpha)=\frac{1}{2}||\omega||^2+\sum_{i=1}^m\alpha_i(1-y_i(\omega^Tx_i+b)) L(ω,b,α)=21ω2+i=1mαi(1yi(ωTxi+b))
其中
α = ( α 1 ; α 2 ; … ; α m ) \alpha=(\alpha_1;\alpha_2;…;\alpha_m) α=(α1;α2;;αm)

∣ ∣ ω ∣ ∣ 2 = ω T ω ||\omega||^2=\omega^T\omega ω2=ωTω

令L(w,b,a)对w和b的偏导为零可得
ω = ∑ i = 1 m α i y i x i \omega=\sum_{i=1}^m\alpha_iy_ix_i ω=i=1mαiyixi

0 = ∑ i = 1 m α i y i 0=\sum_{i=1}^m\alpha_iy_i 0=i=1mαiyi

将求导后的公式带入拉格朗日函数
1 2 ∣ ∣ ω ∣ ∣ 2 = 1 2 ω T ω = 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j \frac{1}{2}||\omega||^2 \\ =\frac{1}{2}\omega^T\omega \\ =\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jx_i^Tx_j 21ω2=21ωTω=21i=1mj=1mαiαjyiyjxiTxj

∑ i = 1 m [ α i − α i y i ( ∑ j = 1 m α j y j x i T x j + b ) ] = ∑ i = 1 m α i − ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j − b ∑ i = 1 m α i y i = ∑ i = 1 m α i − ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j \sum_{i=1}^m[\alpha_i-\alpha_iy_i(\sum_{j=1}^m\alpha_jy_jx_i^Tx_j+b)] \\ =\sum_{i=1}^m\alpha_i-\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jx_i^Tx_j-b\sum_{i=1}^m\alpha_iy_i \\ =\sum_{i=1}^m\alpha_i-\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jx_i^Tx_j i=1m[αiαiyi(j=1mαjyjxiTxj+b)]=i=1mαii=1mj=1mαiαjyiyjxiTxjbi=1mαiyi=i=1mαii=1mj=1mαiαjyiyjxiTxj

得到对偶问题
max ⁡ α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j \max_\alpha\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jx_i^Tx_j αmaxi=1mαi21i=1mj=1mαiαjyiyjxiTxj

s . t . ∑ i = 1 m α i y i = 0 , 0 ≤ α i ≤ C , i = 1 , 2 , … , m s.t.\sum_{i=1}^m\alpha_iy_i=0,\\ 0≤\alpha_i≤C,i=1,2,…,m s.t.i=1mαiyi=0,0αiCi=1,2,,m

求解出二次规划问题后,会解出a,再通过a,求得w和b

求解a,w,b

根据上述二次规划问题求解,可得出

solvers.qp(p, q, G, h, A, b)   # 求解二次规划问题
# p
y = np.eye(n)                   # 对角矩阵 n*n,对角线全为1
y = label_y * y                 #
p = np.dot(train_x, train_x.T)
p = np.dot(y,p)
p = np.dot(p,y)
p = matrix(p)
# q
q = matrix(-1 * np.ones(n))
# αi ≤ c
# αi ≥ 0 → -αi ≤ 0
# G
G1 = np.eye(n)  #  对角矩阵
G2 = -1 * np.eye(n)  # -x<=0
G = matrix(np.vstack([G1,G2]))
# h
h1 = np.full([n, 1], c)
h2 = np.zeros([n, 1])
h = matrix(np.vstack( [h1,h2] ))
# A  →  yi
A = matrix(label_y.reshape([1, n]))
# b  →  0
b = matrix(0.0)
# 求出α
sol = solvers.qp(p, q, G, h, A, b)   # 求解二次规划问题
alpha = np.array(sol['x'])

求解的a后,再求解w
ω = ∑ i = 1 m α i y i x i \omega=\sum_{i=1}^m\alpha_iy_ix_i ω=i=1mαiyixi

# 2、求w, 法向量
w = alpha * label_y * train_x
w = np.sum(w, axis=0)

求的w后,再求解b
b = y i − ∑ j : α i > 0 α j y j x i T x j b=y_i-\sum_{j:\alpha_i>0}\alpha_jy_jx_i^Tx_j b=yij:αi>0αjyjxiTxj

# 3、求b
b = label_y[index].T - np.dot(w ,train_x[index].T)  # 1 * index
b = np.mean(b)

映射到高维空间,后模型为
f ( x ) = ω T ϕ ( x ) + b f(x)=\omega^T\phi(x)+b f(x)=ωTϕ(x)+b
对偶问题为
max ⁡ α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j ϕ ( x i ) T ϕ ( x j ) \max_\alpha\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_j\phi(x_i)^T\phi(x_j) αmaxi=1mαi21i=1mj=1mαiαjyiyjϕ(xi)Tϕ(xj)

s . t . ∑ i = 1 m α i y i = 0 , 0 ≤ α i ≤ C , i = 1 , 2 , … , m s.t.\sum_{i=1}^m\alpha_iy_i=0,\\ 0≤\alpha_i≤C,i=1,2,…,m s.t.i=1mαiyi=0,0αiCi=1,2,,m

其中,内积的形式
ϕ ( x i ) T ϕ ( x j ) = ⟨ ϕ ( x i ) T , ϕ ( x j ) ⟩ = k ( x i , x j ) \phi(x_i)^T\phi(x_j)\\ =\langle \phi(x_i)^T,\phi(x_j) \rangle \\ =k(x_i,x_j) ϕ(xi)Tϕ(xj)=ϕ(xi)T,ϕ(xj)=k(xi,xj)
对偶问题重写为
max ⁡ α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j k ( x i , x j ) \max_\alpha\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_jk(x_i,x_j) αmaxi=1mαi21i=1mj=1mαiαjyiyjk(xi,xj)

s . t . ∑ i = 1 m α i y i = 0 , 0 ≤ α i ≤ C , i = 1 , 2 , … , m s.t.\sum_{i=1}^m\alpha_iy_i=0,\\ 0≤\alpha_i≤C,i=1,2,…,m s.t.i=1mαiyi=0,0αiCi=1,2,,m

k(.,.)为核函数

预测

求得w和b后,保存,放入公式

test_res = np.dot(w, text_x.T) + b

判断结果是否大于0

test_res[test_res > 0] = 1
test_res[test_res < 0] = -1
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姑苏 · 安阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值