支持向量机理论详解及使用二次规划包的底层实现

支持向量机

CSDN的Latex公式显示有误,可以自行复制编译查看

基础

支持向量机中涉及超平面以及点到超平面距离等概念,现在首先对相关概念进行介绍。

超平面

p p p维空间中,超平面 p − 1 p-1 p1维的仿射子空间,其公式可以表达为
β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β p x p = ∑ i = 1 p β i x i + β 0 = 0 , \beta_0 + \beta_1x_1 + \beta_2x_2+\dotsb+\beta_{p}x_p=\sum_{i=1}^{p}\beta_ix_i+\beta_0=0, β0+β1x1+β2x2++βpxp=i=1pβixi+β0=0,
其法向量为
ω = ( β 1 , β 2 , ⋯   , β p ) , \omega = (\beta_1,\beta_2,\dotsb,\beta_p), ω=(β1,β2,,βp),
∑ i = 1 p β i = 0 \sum_{i=1}^{p}\beta_i=0 i=1pβi=0时,其法向量为单位向量。

点到超平面距离

p p p维空间中一点为
X = ( x 1 , x 2 , ⋯   , x n ) , X=(x_1,x_2,\dotsb,x_n), X=(x1,x2,,xn),
则该点到超平面的距离为
d = ∣ ω X + β 0 ∣ ∣ ω ∣ , d=\frac{|\omega X+\beta_0|}{|\omega|}, d=ωωX+β0,
该公式可由超平面法向量的概念推导得出,当 ∑ i = 1 p β i = 0 \sum_{i=1}^{p}\beta_i=0 i=1pβi=0时,该公式可直接简化为
d = ∣ ω X + β 0 ∣ . d=|\omega X+\beta_0|. d=ωX+β0∣.

分割超平面

下面证明超平面可以用于对特征空间中的点进行二分类,这是最大间隔分类器的理论基础。

定义和性质

现在设有两类共 n n n样本,每个样本均为 p p p维空间中的一个点,其取值分别为
$$
x_1=\begin{Bmatrix}
x_{11}\x_{12}
\\vdots
\x_{1p}

\end{Bmatrix}
,x_2=\begin{Bmatrix}
x_{21}\x_{22}
\\vdots
\x_{2p}

\end{Bmatrix}
,\dotsb,
x_n=\begin{Bmatrix}
x_{n1}\x_{n2}
\\vdots
\x_{np}

\end{Bmatrix},
KaTeX parse error: Can't use function '$' in math mode at position 8: 其样本标签为$̲y_1,y_2,\dotsb,…
\beta_0 + \beta_1x_1 + \beta_2x_2+\dotsb+\beta_{p}x_p=0,
满足 满足 满足
\begin{cases}
\beta_0 + \beta_1x_{i1} + \beta_2x_{i2}+\dotsb+\beta_{p}x_{ip}>0,& \text{ if } y_i = 1, \
\beta_0 + \beta_1x_{i1} + \beta_2x_{i2}+\dotsb+\beta_{p}x_{ip}<0,& \text{ if } y_i=-1,
\end{cases}
$$
则称该超平面为分割超平面。

超平面分离定理

超平面可以用于二分类的原理即超平面分离定理,也称为凸集分离定理。

引理

S ⊆ R n S\subseteq R^n SRn为非空凸集, y ⊆ R n ∖ S y\subseteq R^n \setminus S yRnS,则存在唯一的点 x ˉ \bar{x} xˉ,使得该点与 y y y的距离最小,即有
∥ x ˉ − y ∥ = inf ⁡ { ∥ x − y ∥ ∣ x ∈ S } > 0 , \|\bar{x}-y\|=\inf \{\|x-y\| \mid x \in S\}>0, xˉy=inf{xyxS}>0,
同时由范数的等价性可以得知,这里的范数可以是任意一种。

引理证明

先证明其存在性,考虑单位超球
B = { z ∈ R n ∣ ∥ z ∥ ≤ 1 } , B=\left\{z \in R^{n} \mid\|z\| \leq 1\right\}, B={zRnz1},
取足够大的正数 β \beta β,使得
D = S ∩ ( { y } + β B ) ≠ ∅ , D=S \cap(\{y\}+\beta B) \neq \emptyset, D=S({y}+βB)=,
S S S为闭集, { y } + β B \{y\}+\beta B {y}+βB为有界闭集可知, D D D是非空有界闭集,故 S S S可以在 D D D上取得一个点 x ˉ \bar{x} xˉ使其满足到带你 y y y的距离最小,存在性得证。

再证唯一性,记上述最短距离为 r r r,设存在另外一点 x ′ ˉ ∈ S \bar{x'}\in S xˉS满足
∥ x ˉ − y ∥ = ∥ x ′ ˉ − y ∥ = r , \|\bar{x}-y\|=\|\bar{x'}-y\|=r, xˉy=xˉy=r,
x ′ ′ = 1 2 ( x ˉ + x ′ ˉ ) x'' = \frac{1}{2}(\bar{x}+\bar{x'}) x′′=21(xˉ+xˉ),由 x ′ ′ − y = 1 2 x − 1 2 y + 1 2 x ′ − 1 2 y x^{\prime \prime}-y=\frac{1}{2} x-\frac{1}{2} y+\frac{1}{2} x^{\prime}-\frac{1}{2} y x′′y=21x21y+21x21y可知,两边取范数有
∥ x ′ ′ − y ∥ ≤ 1 2 ∥ x − y ∥ + 1 2 ∥ x ′ − y ∥ = r , \left\|x^{\prime \prime}-y\right\| \leq \frac{1}{2}\|x-y\|+\frac{1}{2}\left\|x^{\prime}-y\right\|=r, x′′y21xy+21xy=r,
又由 S S S是凸集可知, x ′ ′ x'' x′′ x ˉ ∈ S \bar{x}\in S xˉS x ′ ˉ ∈ S \bar{x'}\in S xˉS的一个凸组合,即 x ′ ′ ∈ S x''\in S x′′S

r r r y y y S S S的最短距离知道
∥ x ′ ′ − y ∥ = r , \|x^{\prime \prime}-y\|=r, x′′y=r,
由平行四边形定律可知
∥ x ˉ − x ′ ˉ ∥ 2 + 4 ∥ x ′ ′ − y ∥ 2 = 2 ∥ x ˉ − y ∥ 2 + 2 ∥ x ′ ˉ − y ∥ 2 , \left\|\bar{x}-\bar{x'}\right\|^{2}+4\left\|x^{\prime \prime}-y\right\|^{2}=2\|\bar{x}-y\|^{2}+2\left\|\bar{x'}-y\right\|^{2}, xˉxˉ 2+4x′′y2=2∥xˉy2+2 xˉy 2,
r r r代入对应值得到
∥ x ˉ − x ′ ˉ ∥ 2 = 2 r 2 + 2 r 2 − 4 r 2 = 0 , \left\|\bar{x}-\bar{x'}\right\|^{2}=2 r^{2}+2 r^{2}-4 r^{2}=0, xˉxˉ 2=2r2+2r24r2=0,
x ′ ˉ = x ˉ \bar{x'}=\bar{x} xˉ=xˉ,唯一性得证。

定理

S 1 , S 2 ⊆ R n S_{1}, S_{2} \subseteq R^{n} S1,S2Rn,若存在非零向量 p ∈ R n p\in R^n pRn α ∈ R \alpha \in R αR使得
$$
\begin{array}{l}
S_{1} \subseteq H^{-}=\left{x \in R^{n} \mid p^{T} x \leq \alpha\right}, \
S_{2} \subseteq H^{+}=\left{x \in R^{n} \mid p^{T} x \geq \alpha\right},
\end{array}

$$
则称超平面 H = { x ∈ R n ∣ p T x = α } H=\left\{x \in R^{n} \mid p^{T} x=\alpha\right\} H={xRnpTx=α}分离了集合 S 1 S_1 S1 S 2 S_2 S2

定理证明

S S S是非空集合可知,对 S S S外任意一点 y y y,存在 x ′ ∈ S x^{\prime}\in S xS使得
∥ x ′ − y ∥ = inf ⁡ { ∥ x − y ∥ x ∈ S } > 0 , \left\|x^{\prime}-y\right\|=\inf \{\|x-y\| x \in S\}>0, xy=inf{xyxS}>0,
x ∈ S x\in S xS,由 S S S是凸集可知,对任意的 λ ∈ ( 0 , 1 ) \lambda \in (0,1) λ(0,1),有
z = λ x + ( 1 − λ ) x ′ ∈ S , z=\lambda x+(1-\lambda) x^{\prime} \in S, z=λx+(1λ)xS,
故有
KaTeX parse error: Expected 'EOF', got '&' at position 34: …-y\right\|^{2} &̲ \leq\|z-y\|^{2…
去掉上式两边的 ∥ x ′ − y ∥ 2 \|x^{\prime}-y\|^{2} xy2可以得到
λ ∥ x − x ′ ∥ 2 + 2 ( x ′ − y ) T ( x − x ′ ) ≥ 0 , ∀ λ ∈ ( 0 , 1 ) , ∀ x ∈ S , \lambda\left\|x-x^{\prime}\right\|^{2}+2\left(x^{\prime}-y\right)^{T}\left(x-x^{\prime}\right) \geq 0, \forall \lambda \in(0,1), \forall x \in S, λxx2+2(xy)T(xx)0,λ(0,1),xS,
λ → 0 + \lambda \rightarrow 0^{+} λ0+,有
( x ′ − y ) T ( x − x ′ ) ≥ 0 , ∀ x ∈ S , \left(x^{\prime}-y\right)^{T}\left(x-x^{\prime}\right) \geq 0, \forall x \in S, (xy)T(xx)0,xS,
p = y − x ′ ≠ 0 p=y-x^{\prime}\ne 0 p=yx=0,有
p T ( x − x ′ ) ≤ 0 , p^{T}(x-x^{\prime})\le 0, pT(xx)0,
又记 α = p T x ′ \alpha = p^{T}x^{\prime} α=pTx,此时有
p T ≤ α , p^T\le \alpha, pTα,
同时又由
p T y − α = p T ( y − x ′ ) = ( y − x ′ ) T ( y − x ′ ) = ∥ y − x ′ ∥ 2 > 0 p^{T} y-\alpha=p^{T}\left(y-x^{\prime}\right)=\left(y-x^{\prime}\right)^{T}\left(y-x^{\prime}\right)=\left\|y-x^{\prime}\right\|^{2}>0 pTyα=pT(yx)=(yx)T(yx)=yx2>0
可知
p T x ≤ α ≤ p T y , p^Tx\le \alpha \le p^Ty, pTxαpTy,
即将该集合分成了两部分。

最大间隔分类器

原理

如果数据可以被超平面分开,那在数据的特征空间上就存在无限个可以将数据分开的超平面,这时一般考虑最大间隔超平面,即使得样本到超平面的最小间隔最大化,同时,用于计算样本集合到超平面的最小间隔的所有样本点被称为支持向量(如果有多个点,那么这些点到超平面的距离相同)。

可以将最大间隔分类器中的超平面参数视为规划问题中的待求值,而所有样本点都是约束条件(一个样本点是一个约束条件),可以列出规划问题如下

$$
\operatorname{maximize}{\beta{0}, \beta_{1}, \cdots, \beta_{p}} M\

\left{\begin{matrix}
\sum_{j=1}^{p} \beta_{j}^{2}=1,\
y_{i}\left(\beta_{0}+\beta_{1} x_{i \mathrm{t}}+\beta_{2} x_{i z}+\cdots+\beta_{p} x_{i p}\right) \geqslant M, \quad i=1, \cdots, n\\beta_j无约束,\quad j=1,2,3,\dotsb,p,
\end{matrix}\right.
$$

其中目标函数 maximize ⁡ β 0 , β 1 , ⋯   , β p M \operatorname{maximize}_{\beta_{0}, \beta_{1}, \cdots, \beta_{p}} M maximizeβ0,β1,,βpM,其实可以直接写成 max ⁡ β 0 , β 1 , ⋯   , β p M \operatorname{max}_{\beta_{0}, \beta_{1}, \cdots, \beta_{p}} M maxβ0,β1,,βpM,这样得到的结果其实是和原来一样的。

另外,第一个约束$ \sum_{j=1}^{p} \beta_{j}{2}=1$用于保证求出的结果中$M$就是最大间隔分类器中样本点与超平面的最小距离,如果将该约束去掉,对上述规划问题求出的结果而言,最小距离则化为$\frac{M}{\sum_{j=1}{p}\beta_j^2}$;如果在去掉该约束的同时,将第二个约束修改为
1 ∥ ω ∥ y i ( β 0 + β 1 x i t + β 2 x i z + ⋯ + β p x i p ) ≥ M , 或者 y i ( β 0 + β 1 x i t + β 2 x i z + ⋯ + β p x i p ) ≥ M ∥ ω ∥ , \frac{1}{\|\omega\|}y_{i}(\beta_{0}+\beta_{1} x_{i \mathrm{t}}+\beta_{2} x_{i z}+\cdots+\beta_{p} x_{i p})\ge M,\\ 或者\\ y_{i}(\beta_{0}+\beta_{1} x_{i \mathrm{t}}+\beta_{2} x_{i z}+\cdots+\beta_{p} x_{i p})\ge M \|\omega\|, ω1yi(β0+β1xit+β2xiz++βpxip)M,或者yi(β0+β1xit+β2xiz++βpxip)Mω,
此时 M M M就仍然表示样本点集合到超平面的最小距离,若令 M = 1 ∥ ω ∥ M=\frac{1}{\|\omega\|} M=ω1,则目标函数可以进一步写成 max ⁡ β 0 , β 1 , ⋯   , β p 1 ∥ ω ∥ \operatorname{max}_{\beta_{0}, \beta_{1}, \cdots, \beta_{p}} \frac{1}{\|\omega\|} maxβ0,β1,,βpω1,即
min ⁡ β 0 , β 1 , ⋯   , β p ∥ ω ∥ . \operatorname{min}_{\beta_{0}, \beta_{1}, \cdots, \beta_{p}} \|\omega\|. minβ0,β1,,βpω∥.
第二个约束则是保证样本点全部落在超平面正确的一侧。

由于每个样本点都会影响最大间隔分类器中超平面的参数,所以两类样本中一旦出现距离较小的点,这些点将对超平面产生巨大的影响,这也容易因为某些点的出现而出现过拟合,反而会造成对测试集划分效果不好的情况,所以这就引入了对样本点划分没有那么严格的支持向量分类器(也称为软间隔分类器)

代码说明
导入库
import numpy as np
from scipy.optimize import linprog
不等式约束矩阵
def GetA(x, y):
    x = np.array(x)
    y = np.array(y)
    height, width = x.shape
    y = -y.reshape((height, 1))
    tmp = x * y  # 计算得到超平面样本点的系数
    tmp = np.concatenate((tmp, y), axis=1)  # 增加常量的正负系数
    tmp = np.concatenate((tmp, np.ones((height, 1))), axis=1)  # 增加M的系数
    return tmp

使用最开始的规划问题进行编程,其中
y i ( β 0 + β 1 x i t + β 2 x i z + ⋯ + β p x i p ) ⩾ M , i = 1 , ⋯   , n y_{i}\left(\beta_{0}+\beta_{1} x_{i \mathrm{t}}+\beta_{2} x_{i z}+\cdots+\beta_{p} x_{i p}\right) \geqslant M, \quad i=1, \cdots, n yi(β0+β1xit+β2xiz++βpxip)M,i=1,,n
改写为
y i ( β 0 + β 1 x i t + β 2 x i z + ⋯ + β p x i p ) − M ⩾ 0 , i = 1 , ⋯   , n y_{i}\left(\beta_{0}+\beta_{1} x_{i \mathrm{t}}+\beta_{2} x_{i z}+\cdots+\beta_{p} x_{i p}\right)-M \geqslant 0, \quad i=1, \cdots, n yi(β0+β1xit+β2xiz++βpxip)M0,i=1,,n
由于最终使用的scipy.optimize.linprog中要求的规 划问题格式为:不等式的约束条件中符号均为小于等于,目标函数为求最小值,所以继续改写为
− y i ( β 0 + β 1 x i t + β 2 x i z + ⋯ + β p x i p ) + M ⩽ 0 , i = 1 , ⋯   , n -y_{i}\left(\beta_{0}+\beta_{1} x_{i \mathrm{t}}+\beta_{2} x_{i z}+\cdots+\beta_{p} x_{i p}\right)+M \leqslant 0, \quad i=1, \cdots, n yi(β0+β1xit+β2xiz++βpxip)+M0,i=1,,n
若不等式约束设为 A X ≤ b AX\le b AXb,则根据上述公式可以得到不等式约束矩阵为
A = [ − x 11 y 1 ⋯ − x 1 p y 1 − y 1 1 ⋮ ⋱ ⋮ ⋮ ⋮ − x n 1 y n ⋯ − x n p y n − y n 1 ] , A=\begin{bmatrix} -x_{11}y_1& \cdots & -x_{1p}y_1 &-y_1 &1 \\ \vdots& \ddots & \vdots& \vdots &\vdots \\ -x_{n1}y_n& \cdots &-x_{np}y_n &-y_n &1 \end{bmatrix}, A= x11y1xn1ynx1py1xnpyny1yn11 ,
其中待求变量为
X = [ β 1 β 2 ⋯ β p β 0 M ] T , X=\begin{bmatrix} \beta_1& \beta_2 & \cdots &\beta_p &\beta_0 &M \end{bmatrix}^T, X=[β1β2βpβ0M]T,
不等式约束变量为
b = [ 0 0 0 ⋯ 0 ] T , b=\begin{bmatrix}0&0&0&\cdots &0\end{bmatrix}^T, b=[0000]T,
目标函数为
max ⁡ M = min ⁡ ( − M ) . \max M = \min (-M). maxM=min(M).

不等式约束向量
def GetB(x):
    x = np.array(x)
    height, width = x.shape
    return np.zeros((height,))  # 不等式约束条件右边的b全部为0,约束条件个数即为样本点个数
目标函数系数
def GetC(x):
    x = np.array(x)
    height, width = x.shape
    c_num = width + 2  # 需要求解的参数的个数 = 特征空间维度 + 超平面方程中的一个常量 + 所求大M
    tmp = np.zeros((c_num,))
    tmp[-1] = -1
    return tmp
决策变量的界
def GetBound(x):
    x = np.array(x)
    height, width = x.shape
    get = []
    for i in range(width + 1):
        get.append((None, None))
    get.append((0, None))  # 只有M需要约束其界大于等于0
    return tuple(get)
求解
def solve(x, y):
    A = GetA(x, y)
    B = GetB(x)
    C = GetC(x)
    Bound = GetBound(x)
    r = linprog(c=C, A_ub=A, b_ub=B, bounds=Bound)
    return r

值得注意的是,该求解最终得到的结果中的 M M M并不是样本结合到超平面的最小间隔,需要进一步除以超平面法向量的模来求得真实间隔。

其中返回的结果结构如下

     con: array([], dtype=float64)
     fun: -54452226.63349579
 message: 'The algorithm terminated successfully and determined that the problem is unbounded.'
     nit: 4
   slack: array([4.72635938e+07, 8.77588747e+07, 7.34542083e+07, 3.05744090e+08,
       2.61286827e+08, 3.74980180e+08, 4.90151060e+08, 4.86659674e+08,
       4.48112515e+08, 4.65908568e+08, 1.98497176e+08, 6.13494814e+08,
       2.90681402e+08, 4.94361952e+08, 1.13727802e+08, 4.84489864e+08,
       1.39447820e+08, 7.81356956e+07, 2.64020192e+08, 1.25613750e+08,
       1.84441418e+08, 2.09625102e+08, 2.15064611e+08])
  status: 3
 success: False
       x: array([ 1.77960531e+08, -1.23565441e+08, -5.52446963e+07,  5.44522266e+07])

该结果中的 x x x前三个数分别代表超平面
A x + B y + C = 0 Ax+By+C=0 Ax+By+C=0
中的 A 、 B 、 C A、B、C ABC,可根据该参数得到超平面方程。

结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-78sQY5yu-1678444236210)(D:\DESKTOP\我的坚果云\typora图片\image-20221116171624844.png)]

二次规划问题

根据上文中的推导,当损失函数设置为 min ⁡ β 0 , β 1 , ⋯   , β p , ε 1 , ε 2 , ⋯   , ε n ∥ ω ∥ \operatorname{min}_{\beta_{0}, \beta_{1}, \cdots, \beta_{p}, \varepsilon_1,\varepsilon_2,\cdots,\varepsilon_n} \|\omega\| minβ0,β1,,βp,ε1,ε2,,εnω时,规划问题如下
$$
\operatorname{min}{\beta{0}, \beta_{1}, \cdots, \beta_{p}} |\omega|\

s.t.\left{\begin{matrix}
y_{i}\left(\beta_{0}+\beta_{1} x_{i \mathrm{t}}+\beta_{2} x_{i z}+\cdots+\beta_{p} x_{i p}\right) \geqslant 1, \quad i=1, \cdots, n\
\beta_j无约束,\quad j=0,1,2,3,\dotsb,p,
\end{matrix}\right.
KaTeX parse error: Can't use function '$' in math mode at position 26: …示的意义,可以将目标函数改写为$̲\operatorname{m…
\operatorname{min}{\beta{0}, \beta_{1}, \cdots, \beta_{p}} \frac{1}{2}\omega^T \omega\

s.t.\left{\begin{matrix}
y_{i}\left(\omega^Tx_i+b\right) \geqslant 1, \quad i=1, \cdots, n\
\omega无约束
\end{matrix}\right.
可以写出拉格朗日函数: 可以写出拉格朗日函数: 可以写出拉格朗日函数:
L(\omega,b,\lambda)=\frac{1}{2}\omegaT\omega+\sum_{i=1}{N}\lambda_i[1-y_{i}\left(\omega^Tx_i+b\right)],
$$
若求 max ⁡ L ( ω , b , λ ) \max L(\omega,b,\lambda) maxL(ω,b,λ)时,若所有样本点 x i x_i xi均满足原规划问题中的约束,有 1 − y i ( ω T x i + b ) ⩽ 0 1-y_{i}\left(\omega^Tx_i+b\right)\leqslant0 1yi(ωTxi+b)0,此时所有的 λ i \lambda_i λi均取 0 0 0 L ( ω , b , λ ) L(\omega,b,\lambda) L(ω,b,λ)才能取到最大值,且最大值为 L ( ω , b , λ ) = 1 2 ω T ω L(\omega,b,\lambda)=\frac{1}{2}\omega^T \omega L(ω,b,λ)=21ωTω;反之,若存在样本点 x i x_i xi不满足原规划问题中的约束,对应位置的 1 − y i ( ω T x i + b ) ⩾ 0 1-y_{i}\left(\omega^Tx_i+b\right)\geqslant0 1yi(ωTxi+b)0,此时若要使得 L ( ω , b , λ ) L(\omega,b,\lambda) L(ω,b,λ)取最大值,对应的 λ i \lambda_i λi取正无穷时可以取得最大值即为正无穷。

综上所述,有
min ⁡ ω , b max ⁡ λ L ( ω , b , λ ) = min ⁡ ω , b ( + ∞ , 1 2 ω T ω ) = min ⁡ ω , b 1 2 ω T ω , \min_{\omega,b} \max_{\lambda} L(\omega,b,\lambda)=\min_{\omega,b}(+\infty, \frac{1}{2}\omega^T \omega )=\min_{\omega,b}\frac{1}{2}\omega^T\omega, ω,bminλmaxL(ω,b,λ)=ω,bmin(+,21ωTω)=ω,bmin21ωTω,
此时原规划问题化为
$$
\min_{\omega,b} \max_{\lambda} L(\omega,b,\lambda)\

s.t.\quad \lambda_i\geqslant0, \quad i=1, \cdots, n\
其对偶问题为 其对偶问题为 其对偶问题为
\max_{\lambda} \min_{\omega,b} L(\omega,b,\lambda)\

s.t.\quad \lambda_i\geqslant0, \quad i=1, \cdots, n\
KaTeX parse error: Can't use function '$' in math mode at position 10: 求解对偶问题,令$̲\frac{\partial …
\begin{align}L(\omega,b,\lambda) & =\frac{1}{2}\omegaT\omega+\sum_{i=1}{n}\lambda_i-\sum_{i=1}^{n}\lambda_i y_i \omega^T x_i-\sum_{i=1}^{n}\lambda_iy_ib\
&=\frac{1}{2}\omegaT\omega+\sum_{i=1}{n}\lambda_i-\sum_{i=1}^{n}\lambda_i y_i \omega^T x_i,
\end{align}
KaTeX parse error: Can't use function '$' in math mode at position 4: 又令$̲\frac{\partial …
\begin{align}L(\omega,b,\lambda) & =\frac{1}{2}(\sum_{i=1}{n}\lambda_iy_ix_i)T(\sum_{i=1}{n}\lambda_iy_ix_i)+\sum_{i=1}{n}\lambda_i-\sum_{i=1}^{n}\lambda_i y_i (\sum_{i=1}{n}\lambda_iy_ix_i)T x_i\
&=-\frac{1}{2}\sum_{i=1}{n}\sum_{j=1}{n}\lambda_i\lambda_jy_iy_jx_iTx_j+\sum_{i=1}{n}\lambda_i,
\end{align}
此时原对偶问题化为 此时原对偶问题化为 此时原对偶问题化为
\max_{\lambda} -\frac{1}{2}\sum_{i=1}{n}\sum_{j=1}{n}\lambda_i\lambda_jy_iy_jx_iTx_j+\sum_{i=1}{n}\lambda_i\

s.t.\left{\begin{matrix}
\lambda_i \geqslant 1, \quad i=1, \cdots, n\
\sum_{i=1}^{n}\lambda_i y_i=0
\end{matrix}\right.
KaTeX parse error: Can't use function '$' in math mode at position 23: …多数凸优化求解包中目标函数都是$̲\min$的要求,在目标函数上…
\min_{\lambda} \frac{1}{2}\sum_{i=1}{n}\sum_{j=1}{n}\lambda_i\lambda_jy_iy_jx_iTx_j-\sum_{i=1}{n}\lambda_i\

s.t.\left{\begin{matrix}
\lambda_i \geqslant 1, \quad i=1, \cdots, n\
\sum_{i=1}^{n}\lambda_i y_i=0
\end{matrix}\right.
$$
由于上述推导过程中已经满足KKT条件,所以该二次规划问题的最优解即为原问题的最优解。

支持向量分类器

原理

支持向量分类器并不寻求最大的间隔,而是希望对大部分样本点划分正确,这样可以使得模型的泛化能力更强。

可以通过修改最大间隔分类器的规划问题满足新的要求,具体规划问题为
$$
\operatorname{maximize}{\beta{0}, \beta_{1}, \cdots, \beta_{p}, \varepsilon_1,\varepsilon_2,\cdots,\varepsilon_n} M\

s.t.\left{\begin{matrix}
\sum_{j=1}^{p} \beta_{j}^{2}=1,\
y_{i}\left(\beta_{0}+\beta_{1} x_{i \mathrm{t}}+\beta_{2} x_{i z}+\cdots+\beta_{p} x_{i p}\right) \geqslant M(1-\varepsilon_i), \quad i=1, \cdots, n\
\varepsilon_i\ge0,\quad \sum_{i=1}^{n}\varepsilon_i\le C,\
\beta_j无约束,\quad j=1,2,3,\dotsb,p,
\end{matrix}\right.
$$
其中 ε i \varepsilon_i εi的设置是允许一部分样本点被划分在间隔内甚至是被划分到超平面的错误一侧,又由于 ε i \varepsilon_i εi大于1时表示得到该约束条件的样本点被错误分类到了超平面的另一侧,所以 C C C(需要由自己设置)代表该支持向量分类器分类错误(被划分到超平面的错误一侧)的最大样本点个数,且当 C = 0 C=0 C=0时支持向量分类器恢复为最大间隔分类器(因为所有的 ε i \varepsilon_i εi都将为0)。

若根据上文使用 min ⁡ β 0 , β 1 , ⋯   , β p ∥ ω ∥ \operatorname{min}_{\beta_{0}, \beta_{1}, \cdots, \beta_{p}} \|\omega\| minβ0,β1,,βpω作为目标函数,此时该规划问题变为一个凸优化问题,其形式如下
$$
\operatorname{min}{\beta{0}, \beta_{1}, \cdots, \beta_{p}, \varepsilon_1,\varepsilon_2,\cdots,\varepsilon_n} |\omega|\

s.t.\left{\begin{matrix}
y_{i}\left(\beta_{0}+\beta_{1} x_{i \mathrm{t}}+\beta_{2} x_{i z}+\cdots+\beta_{p} x_{i p}\right) \geqslant 1-\varepsilon_i, \quad i=1, \cdots, n\
\varepsilon_i\ge0,\quad \sum_{i=1}^{n}\varepsilon_i\le C,\
\beta_j无约束,\quad j=1,2,3,\dotsb,p,
\end{matrix}\right.
$$
同时,在支持向量分类器中,刚好落在间隔上和落在间隔错误一侧的样本点被称为支持向量(比最大间隔分类器中的支持向量增加了落在间隔错误一侧的样本点),且只有支持向量会对支持向量分类器的参数产生影响。

但是支持向量分类器只对线性可分的样本点起作用,如果样本点集合不是线性可分的,就需要引入支持向量机。

代码编写推导

对上述目标函数为 min ⁡ β 0 , β 1 , ⋯   , β p ∥ ω ∥ \operatorname{min}_{\beta_{0}, \beta_{1}, \cdots, \beta_{p}} \|\omega\| minβ0,β1,,βpω的规划问题,可以将第一行约束条件化为
y i ( β 0 + β 1 x i t + β 2 x i z + ⋯ + β p x i p ) + ε i ⩾ 1 , i = 1 , ⋯   , n y_{i}\left(\beta_{0}+\beta_{1} x_{i \mathrm{t}}+\beta_{2} x_{i z}+\cdots+\beta_{p} x_{i p}\right) +\varepsilon_i\geqslant 1, \quad i=1, \cdots, n yi(β0+β1xit+β2xiz++βpxip)+εi1,i=1,,n
可以得到其不等式约束矩阵为
A 1 = [ x 11 y 1 ⋯ x 1 p y 1 y 1 1 1 ⋯ 0 ⋮ ⋱ ⋮ ⋮ ⋮ ⋮ ⋱ ⋮ x n 1 y n ⋯ x n p y n y n 1 0 ⋯ 1 ] , A_1=\begin{bmatrix} x_{11}y_1& \cdots & x_{1p}y_1 &y_1 &1&1&\cdots&0 \\ \vdots& \ddots & \vdots& \vdots &\vdots &\vdots& \ddots&\vdots \\ x_{n1}y_n& \cdots &x_{np}y_n &y_n &1&0& \cdots&1 \end{bmatrix}, A1= x11y1xn1ynx1py1xnpyny1yn111001 ,
待求变量为
X = [ β 1 β 2 ⋯ β p β 0 ε 1 ε 2 ⋯ ε n ] T , X=\begin{bmatrix} \beta_1& \beta_2 & \cdots &\beta_p &\beta_0 &\varepsilon_1&\varepsilon_2&\cdots&\varepsilon_n \end{bmatrix}^T, X=[β1β2βpβ0ε1ε2εn]T,
为了保持与上面约束条件的符号方向相同,第二行的约束条件可以化为
− ε 1 − ε 2 − ⋯ − ε n ⩾ − C , -\varepsilon_1-\varepsilon_2-\cdots-\varepsilon_n\geqslant -C, ε1ε2εnC,
除此之外,还有约束条件 ε i ≥ 0 \varepsilon_i\ge0 εi0需要满足,将其约束矩阵均添加到总的约束矩阵中可以得到
A = [ x 11 y 1 ⋯ x 1 p y 1 y 1 1 1 ⋯ 0 ⋮ ⋱ ⋮ ⋮ ⋮ ⋮ ⋱ ⋮ x n 1 y n ⋯ x n p y n y n 1 0 ⋯ 1 0 ⋯ 0 0 − 1 − 1 ⋯ − 1 0 ⋯ 0 0 0 1 ⋯ 0 ⋮ ⋱ ⋮ ⋮ ⋮ ⋮ ⋱ 0 0 ⋯ 0 0 0 1 ⋯ 1 ] , A=\begin{bmatrix} x_{11}y_1& \cdots & x_{1p}y_1 &y_1 &1&1&\cdots&0 \\ \vdots& \ddots & \vdots& \vdots &\vdots &\vdots& \ddots&\vdots \\ x_{n1}y_n& \cdots &x_{np}y_n &y_n &1&0& \cdots&1\\ 0& \cdots &0 &0 &-1&-1& \cdots&-1\\ 0& \cdots &0 &0 & 0&1&\cdots&0\\ \vdots& \ddots &\vdots &\vdots & \vdots&\vdots&\ddots&0\\ 0& \cdots &0 &0 & 0&1&\cdots&1 \end{bmatrix}, A= x11y1xn1yn000x1py1xnpyn000y1yn0001110010111011001 ,
同时可以写出约束向量为
b = [ 1 1 ⋯ 1 − C 0 0 ⋯ 0 ] T , b=\begin{bmatrix} 1&1&\cdots&1&-C&0&0&\cdots&0 \end{bmatrix}^T, b=[111C000]T,
其中共有 n n n个1、 n n n个0和1个 C C C,可以根据上述推导写出约束条件被化为
A X ⩾ b . AX\geqslant b. AXb.

代码实现
导入库
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import cvxpy as cp
from cvxopt import matrix, solvers
系数矩阵获取
def GetA(x, y):
    x = np.array(x)
    y = np.array(y)
    height, width = x.shape
    y = y.reshape((height, 1))
    tmp = x * y  # 计算得到超平面样本点的系数
    tmp = np.concatenate((tmp, y), axis=1)  # 增加常量的正负系数
    tmp = np.concatenate((tmp, np.eye(height)), axis=1)  # 增加beta0的系数
    # 使得所有epsilon之和小于等于C
    bottom = np.concatenate((np.zeros((1, width + 1)), -np.ones((1, height))), axis=1)  
    tmp = np.concatenate((tmp, bottom), axis=0)
    # 使得所有epsilon的取值大于等于0
    bottom = np.concatenate((np.zeros((height, width + 1)), np.eye(height)), axis=1)
    tmp = np.concatenate((tmp, bottom), axis=0)
    return tmp
约束向量获取
def GetB(x, C):
    x = np.array(x)
    height, width = x.shape
    tmp = np.ones((height,))  # 前面由样本点得到的约束条件全是大于等于1
    tmp = np.append(tmp, -C)  # 所有epsilon之和应该小于等于C,这里因为用的是大于等于矩阵,所以使用-C
    tmp = np.concatenate((tmp,np.zeros(height,)))
    return tmp
求解实现
def Solve(x, y, C):
    x = np.array(x)
    y = np.array(y)
    height, width = x.shape  # n = height, p = width
    A = GetA(x, y)
    B = GetB(x, C)
    # print(A.shape)
    # 这里是目标函数,由于cvxopt库会自动在二次型前加1/2,所以对结果值×2在开方才是法向量的模
    P = matrix(np.diag(np.concatenate((np.ones((width,)),np.zeros((height + 1,))))))
    # 没有使用到后面不同参数相乘的部分
    q = matrix(np.zeros((height+width+1)))
    # 由于cvxopt库中默认是小于等于,所以需要将推导中的大于等于修改为小于等于
    G = matrix(-A*1.0)
    # print(G.size)
    h = matrix(-B)
    sol = solvers.qp(P, q, G, h)
    print("primal objective:      ",sol['primal objective'])
    print("primal objective(乘2并开方):      ", (sol['primal objective'])**(1/2))
    return np.array(sol['x']), sol['primal objective']
实验
x1 = [-0.4, 0.9, -0.2, 0.3, -0.7, -1.2, -1.5, -0.3, -0.5, -0.6, 0]
y1 = [-0.2, 2, 0.3, 2.9, 1.1, 1.3, 1.8, 3.5, 2.9, 2.9, 1.6]
x2 = [3.3, 1, 2.7, 0.7, 3.2, 1.4, 0.5, 2.1, 1.6, 2, 1.1, 1.2]
y2 = [-1.1, -1.8, -1, -0.8, -0.2, 0, -0.8, 0, 0.4, 0.5, -1, -0.9]
data = []
target = []
for i in range(len(x1)):
    data.append([x1[i], y1[i]])
    target.append(-1)
for j in range(len(x2)):
    data.append([x2[j], y2[j]])
    target.append(1)
data = np.array(data)

x_get,M_get = Solve(data,target,2)
A,B,C = x_get[:3]
cos = np.sqrt(B**2/(A**2+B**2))
画图
d = float((1/np.sqrt(2*M_get))/cos)
xx1 = np.linspace(-5, 5)
k = -A / B
t = -C / B
yy1 = k * xx1 + t
yy_up1 = k * xx1 + (t + d)
# yy_down1 = k * xx1 + (t - 0.8 - (k * 0.5 + t))
yy_down1 = k * xx1 + (t - d)

# 画出超平面
plt.plot(xx1, yy1, 'k-')
plt.plot(xx1, yy_down1, 'k--')
plt.plot(xx1, yy_up1, 'k--')

plt.fill_between(xx1, yy_down1, yy_up1, color='green', alpha=.25)  

cm_dark = matplotlib.colors.ListedColormap(['r', 'b'])
plt.scatter(data[:, 0], data[:, 1],
            s=80, facecolors='none')
plt.scatter(data[:, 0], data[:, 1], c=target, cmap=cm_dark)

plt.xlim(xmin=-2, xmax=4)
plt.ylim(ymin=-2, ymax=4)

plt.show()
结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UwpW5UZZ-1678444236212)(D:\DESKTOP\我的坚果云\typora图片\image-20221116171724324.png)]

可以看到,在设置 C C C后,有部分点被划分在了间隔的错误一侧,但没有点被划分在超平面错误的一侧。

支持向量机

核函数与解函数

支持向量机的核心就是通过使用某些函数将当前的样本点映射到另一个特征空间再使用超平面进行划分,这种函数称为核函数

通过对上述规划问题(二次规划)的求解,最后可以求得一个解函数为
f ( x ) = ∑ i = 1 N α i y i K ( x , x i ) + β 0 , f(x)=\sum_{i=1}^{N} \alpha_{i} y_{i} K\left(x, x_{i}\right)+\beta_{0}, f(x)=i=1NαiyiK(x,xi)+β0,
即,将样本点输入该函数就可以得到其在超平面的哪一侧,并且解函数中只涉及核函数的内积,并不需要清晰知道核函数的计算,知道其变换后内积的计算就足够了,常用的核函数(内积计算)如下

名称核函数内积
线性核函数 K ( x , x ′ ) = ⟨ x , x i ⟩ K\left(x, x^{\prime}\right)=\left\langle x, x_{i}\right\rangle K(x,x)=x,xi
d d d阶多项式核函数 K ( x , x ′ ) = ( 1 + ⟨ x , x ′ ⟩ ) d K\left(x, x^{\prime}\right)=\left(1+\left\langle x, x^{\prime}\right\rangle\right)^{d} K(x,x)=(1+x,x)d
高斯核函数 K ( x , x ′ ) = exp ⁡ ( − γ ∣ x − x ′ ∣ 2 ) K\left(x, x^{\prime}\right)=\exp \left(-\gamma\left|x-x^{\prime}\right|^{2}\right) K(x,x)=exp(γxx2)
二次规划形式

现在以最大间隔分类器二次规划形式的推导过程为基础,对软间隔分类器的二次规划形式进行推导。

当损失函数设置为 min ⁡ β 0 , β 1 , ⋯   , β p , ε 1 , ε 2 , ⋯   , ε n ∥ ω ∥ \operatorname{min}_{\beta_{0}, \beta_{1}, \cdots, \beta_{p}, \varepsilon_1,\varepsilon_2,\cdots,\varepsilon_n} \|\omega\| minβ0,β1,,βp,ε1,ε2,,εnω时,软间隔分类器的规划形式为
min ⁡ β 0 , β 1 , ⋯   , β p , ε 1 , ε 2 , ⋯   , ε n ∥ ω ∥ \operatorname{min}_{\beta_{0}, \beta_{1}, \cdots, \beta_{p}, \varepsilon_1,\varepsilon_2,\cdots,\varepsilon_n} \|\omega\|\\ minβ0,β1,,βp,ε1,ε2,,εnω
s . t . { y i ( ω T x i + b ) ⩾ 1 − ε i , i = 1 , ⋯   , n ε i ≥ 0 , ∑ i = 1 n ε i ≤ C , s.t.\left\{\begin{matrix} y_{i}\left(\omega^T x_i +b\right) \geqslant 1-\varepsilon_i, \quad i=1, \cdots, n\\ \varepsilon_i\ge0,\quad \sum_{i=1}^{n}\varepsilon_i\le C, \end{matrix}\right. s.t.{yi(ωTxi+b)1εi,i=1,,nεi0,i=1nεiC,
与最大间隔分类器类似的,其目标函数可以改写为 min ⁡ β 0 , β 1 , ⋯   , β p , ε 1 , ε 2 , ⋯   , ε n 1 2 ω T ω \operatorname{min}_{\beta_{0}, \beta_{1}, \cdots, \beta_{p},\varepsilon_1,\varepsilon_2,\cdots,\varepsilon_n} \frac{1}{2}\omega^T \omega minβ0,β1,,βp,ε1,ε2,,εn21ωTω,此时规划问题为
min ⁡ β 0 , β 1 , ⋯   , β p , ε 1 , ε 2 , ⋯   , ε n 1 2 ω T ω \operatorname{min}_{\beta_{0}, \beta_{1}, \cdots, \beta_{p},\varepsilon_1,\varepsilon_2,\cdots,\varepsilon_n} \frac{1}{2}\omega^T \omega minβ0,β1,,βp,ε1,ε2,,εn21ωTω
s . t . { y i ( ω T x i + b ) ⩾ 1 − ε i , i = 1 , ⋯   , n ε i ≥ 0 , ∑ i = 1 n ε i ≤ C , s.t.\left\{\begin{matrix} y_{i}\left(\omega^T x_i +b\right) \geqslant 1-\varepsilon_i, \quad i=1, \cdots, n\\ \varepsilon_i\ge0,\quad \sum_{i=1}^{n}\varepsilon_i\le C, \end{matrix}\right. s.t.{yi(ωTxi+b)1εi,i=1,,nεi0,i=1nεiC,

为了方便后续的求解,可以将约束条件中与 C C C有关的部分去掉,并将目标函数修改为 min ⁡ β 0 , β 1 , ⋯   , β p , ε 1 , ε 2 , ⋯   , ε n 1 2 ω T ω + C ∑ i = 1 n ε i \operatorname{min}_{\beta_{0}, \beta_{1}, \cdots, \beta_{p},\varepsilon_1,\varepsilon_2,\cdots,\varepsilon_n} \frac{1}{2}\omega^T \omega+C\sum_{i=1}^{n}\varepsilon_i minβ0,β1,,βp,ε1,ε2,,εn21ωTω+Ci=1nεi,即得到如下形式

KaTeX parse error: Undefined control sequence: \label at position 379: …{array}\right. \̲l̲a̲b̲e̲l̲{initial}

可以写出对应的拉格朗日函数:
L ( ω , b , ε , λ , μ ) = 1 2 ω T ω + C ∑ i = 1 n ε i − ∑ i = 1 n λ i [ y i ( ω T ⋅ x i + b ) − 1 + ε i ] − ∑ i = 1 n μ i ε i , L(\omega, b, \varepsilon, \lambda, \mu) = \frac{1}{2}\omega^T\omega+C \sum_{i=1}^{n} \varepsilon_{i}-\sum_{i=1}^{n} \lambda_{i}\left[y_{i}\left(\omega^T \cdot x_{i}+b\right)-1+\varepsilon_{i}\right]-\sum_{i=1}^{n} \mu_{i} \varepsilon_{i}, L(ω,b,ε,λ,μ)=21ωTω+Ci=1nεii=1nλi[yi(ωTxi+b)1+εi]i=1nμiεi,
其中 λ i , μ i ⩾ 0 \lambda_i,\mu_i \geqslant 0 λi,μi0

经过与最大间隔分类器中类似的分析,可以知道规划问题\ref{initial}可以写成如下形式
min ⁡ ω , b , ε max ⁡ λ , μ L ( ω , b , ε , λ , μ )  s.t.  { λ i ⩾ 0 , i = 1 , ⋯   , n ε i ⩾ 0 , i = 1 , ⋯   , n , \min _{\omega, b,\varepsilon} \max _{\lambda,\mu} L(\omega, b, \varepsilon, \lambda, \mu) \\ \text { s.t. }\left\{\begin{array}{c} \lambda_i \geqslant 0, \quad i = 1, \cdots, n \\ \varepsilon_{i} \geqslant 0, \quad i = 1, \cdots, n, \end{array}\right. ω,b,εminλ,μmaxL(ω,b,ε,λ,μ) s.t. {λi0,i=1,,nεi0,i=1,,n,
其对偶问题为
max ⁡ λ , μ min ⁡ ω , b , ε L ( ω , b , ε , λ , μ )  s.t.  { λ i ⩾ 0 , i = 1 , ⋯   , n ε i ⩾ 0 , i = 1 , ⋯   , n , \max _{\lambda,\mu}\min _{\omega, b,\varepsilon} L(\omega, b, \varepsilon, \lambda, \mu) \\ \text { s.t. }\left\{\begin{array}{c} \lambda_i \geqslant 0, \quad i = 1, \cdots, n \\ \varepsilon_{i} \geqslant 0, \quad i = 1, \cdots, n, \end{array}\right. λ,μmaxω,b,εminL(ω,b,ε,λ,μ) s.t. {λi0,i=1,,nεi0,i=1,,n,
对该对偶问题进行分析,求 min ⁡ ω , b , ε L ( ω , b , ε , λ , μ ) \min _{\omega, b,\varepsilon} L(\omega, b, \varepsilon, \lambda, \mu) minω,b,εL(ω,b,ε,λ,μ),令其满足
∇ w L ( w , b , ε , λ , μ ) = w − ∑ i = 1 N λ i y i x i = 0 , ∇ b L ( w , b , ε , λ , μ ) = − ∑ i = 1 N λ i y i = 0 , ∇ ε i L ( w , b , ε , λ , μ ) = C − λ i − μ i = 0 , \begin{array}{l} \nabla_{w} L(w, b, \varepsilon , \lambda, \mu)=w-\sum_{i=1}^{N} \lambda_{i} y_{i} x_{i}=0, \\ \nabla_{b} L(w, b, \varepsilon , \lambda, \mu)=-\sum_{i=1}^{N} \lambda_{i} y_{i}=0, \\ \nabla_{\varepsilon_{i}} L(w, b, \varepsilon , \lambda, \mu)=C-\lambda_{i}-\mu_{i}=0, \end{array} wL(w,b,ε,λ,μ)=wi=1Nλiyixi=0,bL(w,b,ε,λ,μ)=i=1Nλiyi=0,εiL(w,b,ε,λ,μ)=Cλiμi=0,
可以求得
ω = ∑ i = 1 n λ i y i x i , ∑ i = 1 n λ i y i = 0 , C − λ i − μ i = 0 , \omega=\sum_{i=1}^{n} \lambda_{i} y_{i} x_{i}, \nonumber \\ \sum_{i=1}^{n} \lambda_{i} y_{i}=0,\nonumber \\ C-\lambda_{i}-\mu_{i}=0, ω=i=1nλiyixi,i=1nλiyi=0,Cλiμi=0,
将其代入 L ( ω , b , ε , λ , μ ) L(\omega, b, \varepsilon, \lambda, \mu) L(ω,b,ε,λ,μ)可得其最小值为
min ⁡ ω , b , ε L ( w , b , ε , α , μ ) = − 1 2 ∑ i = 1 n ∑ j = 1 n λ i λ j y i y j x i T x j + ∑ i = 1 n λ i , \min _{\omega, b, \varepsilon} L(w, b, \varepsilon, \alpha, \mu)=-\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}x_{i}^T x_{j}+\sum_{i=1}^{n} \lambda_{i}, ω,b,εminL(w,b,ε,α,μ)=21i=1nj=1nλiλjyiyjxiTxj+i=1nλi,
此时得到的对偶问题可以写成
max ⁡ λ , μ − 1 2 ∑ i = 1 n ∑ j = 1 n λ i λ j y i y j x i T x j + ∑ i = 1 n λ i  s.t.  { ∑ i = 1 n λ i y i = 0 C − λ i − μ i = 0 , λ i ⩾ 0 , i = 1 , ⋯   , n ε i ⩾ 0 , i = 1 , ⋯   , n , \max _{\lambda,\mu}-\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}x_{i}^T x_{j}+\sum_{i=1}^{n} \lambda_{i} \\ \text { s.t. }\left\{\begin{array}{c} \sum_{i=1}^{n} \lambda_{i} y_{i}=0\\ C-\lambda_{i}-\mu_{i}=0, \\ \lambda_i \geqslant 0, \quad i = 1, \cdots, n \\ \varepsilon_{i} \geqslant 0, \quad i = 1, \cdots, n, \end{array}\right. λ,μmax21i=1nj=1nλiλjyiyjxiTxj+i=1nλi s.t.  i=1nλiyi=0Cλiμi=0,λi0,i=1,,nεi0,i=1,,n,
又由式 C − λ i − μ i = 0 C-\lambda_{i}-\mu_{i}=0 Cλiμi=0可知,可将约束条件 ε i ⩾ 0 \varepsilon_{i} \geqslant 0 εi0改写为 0 ⩽ λ i ⩽ C 0 \leqslant \lambda_i \leqslant C 0λiC,即得到
max ⁡ λ − 1 2 ∑ i = 1 n ∑ j = 1 n λ i λ j y i y j x i T x j + ∑ i = 1 n λ i  s.t.  { ∑ i = 1 n λ i y i = 0 0 ⩽ λ i ⩽ C , i = 1 , ⋯   , n \max _{\lambda}-\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}x_{i}^T x_{j}+\sum_{i=1}^{n} \lambda_{i} \\ \text { s.t. }\left\{\begin{array}{c} \sum_{i=1}^{n} \lambda_{i} y_{i}=0\\ 0 \leqslant \lambda_i \leqslant C, \quad i = 1, \cdots, n \end{array}\right. λmax21i=1nj=1nλiλjyiyjxiTxj+i=1nλi s.t. {i=1nλiyi=00λiC,i=1,,n

可以从上面的推导过程中得出,当原问题与对偶问题的解相等时,需要该问题符合以下KKT条件
∇ w L ( ω , b , ε , λ , μ ) = ω − ∑ i = 1 n ω i y i x i = 0 , ∇ b L ( ω , b , ε , λ , μ ) = − ∑ i = 1 n λ i y i = 0 , ∇ ξ L ( ω , b , ε , λ , μ ) = C − λ − μ = 0 , λ i [ y i ( ω T ⋅ x i + b ) − 1 + ε i ] = 0 , μ i ε i = 0 , \nabla_{w} L\left(\omega , b, \varepsilon, \lambda, \mu\right)=\omega-\sum_{i=1}^{n} \omega_{i} y_{i} x_{i}=0,\nonumber \\ \nabla_{b} L\left(\omega , b, \varepsilon, \lambda, \mu\right)=-\sum_{i=1}^{n} \lambda_{i} y_{i}=0, \nonumber\\ \nabla_{\xi} L\left(\omega , b, \varepsilon, \lambda, \mu\right)=C-\lambda-\mu=0, \nonumber\\ \lambda_{i}\left[y_{i}\left(\omega^T \cdot x_{i}+b\right)-1+\varepsilon_{i}\right]=0,\nonumber \\ \mu_{i} \varepsilon_{i}=0, wL(ω,b,ε,λ,μ)=ωi=1nωiyixi=0,bL(ω,b,ε,λ,μ)=i=1nλiyi=0,ξL(ω,b,ε,λ,μ)=Cλμ=0,λi[yi(ωTxi+b)1+εi]=0,μiεi=0,
其中前四条与最大间隔分类器二次规划形式的推导中类似,不再赘述。针对最后一条式子,有

  • ε i ≠ 0 \varepsilon_i\ne 0 εi=0时,对应样本点在间隔的错误一侧,为使式(\ref{lagrange2})最大化,有 μ i = 0 \mu_i=0 μi=0,此时即 μ i ε i = 0 \mu_i\varepsilon_i=0 μiεi=0,且 λ i = C \lambda_i=C λi=C;
  • ε i = 0 \varepsilon_i= 0 εi=0时,对应样本点在间隔的错误一侧,可有 μ i ⩾ 0 \mu_i\geqslant 0 μi0,此时即 μ i ε i = 0 \mu_i\varepsilon_i=0 μiεi=0 λ i ⩽ C \lambda_i\leqslant C λiC;

可以知道 μ i ε i = 0 \mu_{i} \varepsilon_{i}=0 μiεi=0成立。

综上所述,对问题原问题的求解可以化为以下问题的求解:
min ⁡ λ 1 2 ∑ i = 1 n ∑ j = 1 n λ i λ j y i y j x i T x j − ∑ i = 1 n λ i  s.t.  { ∑ i = 1 n λ i y i = 0 0 ⩽ λ i ⩽ C , i = 1 , ⋯   , n \min_{\lambda}\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}x_{i}^T x_{j}-\sum_{i=1}^{n} \lambda_{i} \\ \text { s.t. }\left\{\begin{array}{c} \sum_{i=1}^{n} \lambda_{i} y_{i}=0\\ 0 \leqslant \lambda_i \leqslant C, \quad i = 1, \cdots, n \end{array}\right. λmin21i=1nj=1nλiλjyiyjxiTxji=1nλi s.t. {i=1nλiyi=00λiC,i=1,,n
与最大间隔分类器二次规划形式的推导中类似,存在一个样本点满足其对应的 0 < λ i ⩽ C 0<\lambda_i \leqslant C 0<λiC,可由该样本点得到 y j ( ω T ⋅ x i + b ) − 1 = 0 y_{j}\left(\omega^T \cdot x_{i}+b\right)-1=0 yj(ωTxi+b)1=0,即可以得到超平面中的参数存在其所求超平面的参数为
KaTeX parse error: Undefined control sequence: \label at position 40: …ambda_i y_ix_i,\̲l̲a̲b̲e̲l̲{finalomega}\\ …
若使用了核函数,则该二次规划问题写为
min ⁡ λ 1 2 ∑ i = 1 n ∑ j = 1 n λ i λ j y i y j K ( x i , x j ) − ∑ i = 1 n λ i  s.t.  { ∑ i = 1 n λ i y i = 0 0 ⩽ λ i ⩽ C , i = 1 , ⋯   , n \min_{\lambda}\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}K(x_{i}, x_{j})-\sum_{i=1}^{n} \lambda_{i} \\ \text { s.t. }\left\{\begin{array}{c} \sum_{i=1}^{n} \lambda_{i} y_{i}=0\\ 0 \leqslant \lambda_i \leqslant C, \quad i = 1, \cdots, n \end{array}\right. λmin21i=1nj=1nλiλjyiyjK(xi,xj)i=1nλi s.t. {i=1nλiyi=00λiC,i=1,,n
此时类别判别函数为
f ( x ) = s g n ( ∑ i = 1 N α i y i K ( x , x i ) + b ) . f(x)=\mathrm{sgn}(\sum_{i=1}^{N} \alpha_{i} y_{i} K\left(x, x_{i}\right)+b). f(x)=sgn(i=1NαiyiK(x,xi)+b).

代码编写

根据二次规划形式的推导可以知道,对支持向量机中超平面的求解可以化为对以下问题的求解
min ⁡ λ 1 2 ∑ i = 1 n ∑ j = 1 n λ i λ j y i y j K ( x i , x j ) − ∑ i = 1 n λ i  s.t.  { ∑ i = 1 n λ i y i = 0 0 ⩽ λ i ⩽ C , i = 1 , ⋯   , n \min_{\lambda}\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}K(x_{i}, x_{j})-\sum_{i=1}^{n} \lambda_{i} \\ \text { s.t. }\left\{\begin{array}{c} \sum_{i=1}^{n} \lambda_{i} y_{i}=0\\ 0 \leqslant \lambda_i \leqslant C, \quad i = 1, \cdots, n \end{array}\right. λmin21i=1nj=1nλiλjyiyjK(xi,xj)i=1nλi s.t. {i=1nλiyi=00λiC,i=1,,n
若令
$$
P=\begin{bmatrix}
y_1y_1K(x_1,x_1)&\cdots &y_1y_nK(x_1,x_n)\
\vdots & \ddots &\vdots \
y_ny_1K(x_n,x_1)&\cdots &y_ny_nK(x_n,x_n)
\end{bmatrix},\quad \lambda = \begin{pmatrix}
\lambda_1\
\vdots \\lambda_n

\end{pmatrix},
则有 则有 则有
\sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}K(x_{i},x_{j})=\lambda^TP\lambda.
KaTeX parse error: Can't use function '$' in math mode at position 12: 同样的,目标函数中的$̲-\sum_{i=1}^{n}…
-\sum_{i=1}^{n} \lambda_{i}=\begin{bmatrix}
-1 & & \
& \ddots & \
& & -1
\end{bmatrix}\lambda = Q\lambda,
此时,目标函数为 此时,目标函数为 此时,目标函数为
\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}K(x_{i}, x_{j})-\sum_{i=1}^{n} \lambda_{i}=\frac{1}{2}\lambda^TP\lambda+Q\lambda.
若令 若令 若令
G=\begin{bmatrix}1&&\&\ddots& \&&1 \ -1&&\&\ddots& \&&-1\end{bmatrix},\quad h=\begin{bmatrix}C\\vdots \C \ 0\\vdots\0 \end{bmatrix},
KaTeX parse error: Can't use function '$' in math mode at position 7: 其中,矩阵$̲G$中前$n$行为单位矩阵,后…
G\lambda\leqslant h,
同样的,令 同样的,令 同样的,令
A=\begin{bmatrix}y_1,y_2,\cdots,y_n\end{bmatrix},\
b = 0,
KaTeX parse error: Can't use function '$' in math mode at position 7: 则约束条件$̲\sum_{i=1}^{n} …
A\lambda=b.
综上所述,原二次规划问题可以化为以下形式 综上所述,原二次规划问题可以化为以下形式 综上所述,原二次规划问题可以化为以下形式
\min_{\lambda}\frac{1}{2} \lambda^TP\lambda+Q\lambda \
\text { s.t. }\left{\begin{array}{c}
A\lambda=b,\
G\lambda\leqslant h,
\end{array}\right.
a , a, a,
此时,目标函数为
1 2 ∑ i = 1 n ∑ j = 1 n λ i λ j y i y j K ( x i , x j ) − ∑ i = 1 n λ i = 1 2 λ T P λ + Q λ . \frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}K(x_{i}, x_{j})-\sum_{i=1}^{n} \lambda_{i}=\frac{1}{2}\lambda^TP\lambda+Q\lambda. 21i=1nj=1nλiλjyiyjK(xi,xj)i=1nλi=21λTPλ+Qλ.
若令
G = [ 1 ⋱ 1 − 1 ⋱ − 1 ] , h = [ C ⋮ C 0 ⋮ 0 ] , G=\begin{bmatrix}1&&\\&\ddots& \\&&1 \\ -1&&\\&\ddots& \\&&-1\end{bmatrix},\quad h=\begin{bmatrix}C\\\vdots \\C \\ 0\\\vdots\\0 \end{bmatrix}, G= 1111 ,h= CC00 ,
其中,矩阵 G G G中前 n n n行为单位矩阵,后 n n n行为负单位矩阵;向量 h h h中前 n n n行均为 C C C,后 n n n行均为 0 0 0,此时原二次规划的约束条件 0 ⩽ λ i ⩽ C , i = 1 , ⋯   , n 0 \leqslant \lambda_i \leqslant C, \quad i = 1, \cdots, n 0λiC,i=1,,n可以化为
G λ ⩽ h , G\lambda\leqslant h, Gλh,
同样的,令
A = [ y 1 , y 2 , ⋯   , y n ] , b = 0 , A=\begin{bmatrix}y_1,y_2,\cdots,y_n\end{bmatrix},\\ b = 0, A=[y1,y2,,yn],b=0,
则约束条件 ∑ i = 1 n λ i y i = 0 \sum_{i=1}^{n} \lambda_{i} y_{i}=0 i=1nλiyi=0可以化为
A λ = b . A\lambda=b. Aλ=b.
综上所述,原二次规划问题可以化为以下形式
min ⁡ λ 1 2 λ T P λ + Q λ  s.t.  { A λ = b , G λ ⩽ h , \min_{\lambda}\frac{1}{2} \lambda^TP\lambda+Q\lambda \\ \text { s.t. }\left\{\begin{array}{c} A\lambda=b,\\ G\lambda\leqslant h, \end{array}\right. λmin21λTPλ+Qλ s.t. {Aλ=b,Gλh,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值