求解二次规划问题
标准形式:
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.xi≥0,i=1,2
∑ i = 1 2 x i = 1 \sum_{i=1}^2x_i=1 i=1∑2xi=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=121∗2∗b=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.−xi≤0,i=1,2
∑ i = 1 2 x i = 1 \sum_{i=1}^2x_i=1 i=1∑2xi=1
推出:
G
=
[
−
1
0
0
−
1
]
G= \begin{bmatrix} -1&0\\ 0&-1\\ \end{bmatrix}
G=[−100−1]
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=[−100−1],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≥+1,yi=+1ωTxi+b≤−1,yi=−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)≥1,i=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)≥1,i=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=1∑mαi(1−yi(ω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=1∑mαiyixi
0 = ∑ i = 1 m α i y i 0=\sum_{i=1}^m\alpha_iy_i 0=i=1∑mα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=1∑mj=1∑mα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=1∑m[αi−αiyi(j=1∑mαjyjxiTxj+b)]=i=1∑mαi−i=1∑mj=1∑mαiαjyiyjxiTxj−bi=1∑mαiyi=i=1∑mαi−i=1∑mj=1∑mα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=1∑mαi−21i=1∑mj=1∑mα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=1∑mαiyi=0,0≤αi≤C,i=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=1∑mα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=yi−j:α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=1∑mαi−21i=1∑mj=1∑mα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=1∑mαiyi=0,0≤αi≤C,i=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=1∑mαi−21i=1∑mj=1∑mα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=1∑mαiyi=0,0≤αi≤C,i=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