• SVM-非线性支持向量机及SMO算法


    SVM-非线性支持向量机及SMO算法

    如果您想体验更好的阅读:请戳这里littlefish.top

    线性不可分情况

    线性可分问题的支持向量机学习方法,对线性不可分训练数据是不适用的,为了满足函数间隔大于1的约束条件,可以对每个样本$(x_i, y_i)$引进一个松弛变量$xi_i ge 0$,使函数间隔加上松弛变量大于等于1,,

    $$y_i (w cdot x_i + b) ge 1 - xi_i$$

    目标函数变为

    $$frac 1 2 {||w||^2} + C sum_{j=1}^N xi_i$$

    其中,C>0称为惩罚参数,值越大对误分类的惩罚越大,值越小对误分类的惩罚越小。

    因此,最小化目标函数也就是使$frac 1 2 {||w||^2}$尽量小(间隔尽量大),同时使误分类点的个数尽量小。

    线性不可分的线性支持向量机的学习问题变成如下凸二次规划问题:

    $$ min_{w,b,xi}frac 1 2 {||w||}^2 + C sum_{i=1}^N xi_i
    s.t. quad y_i(w cdot x_i + b) ge 1 - xi_i, quad i=1,2,...,N, xi_i ge 0, i=1,2,...,N$$

    线性支持向量学习算法

    • 选择惩罚参数C>0,构造并求解凸二次规划问题

    $$ min_alpha frac 1 2 sum_{i=1}^N sum_{j=1}^N alpha_i alpha_j y_i y_j (x_i cdot x_j) - sum_{i=1}^N alpha_i
    s.t. quad sum_{i=1}^N alpha_i y_i = 0
    0 le alpha_i le C, i=1,2,...,N$$

    求得最优解$alpha*=(alpha_1*, alpha_2^*, ... , alpha_N*)T$

    • 计算$w*=sum_{i=1}N alpha_i^* y_i x_i$

    选择$alpha*$的一个分量$alpha_j*$适合条件$0<alpha_j^*<C$,计算

    $$b^*=y_i - sum_{i=1}^N y_i alpha_i^*(x_i cdot x_j)$$

    • 求得分离超平面

    $$w^* cdot x + b^* = 0$$

    分类决策函数:

    $$f(x) = sign(w^* cdot x + b^*)$$

    核函数

    用线性分类方法求解非线性分类问题分为两步:首先使用一个变换将原空间的数据映射到新空间;然后在新空间里用线性分类学习方法从训练数据中学习分类模型。

    核函数的空间转换

    核技巧应用在支持向量机的基本思想:通过一个非线性变换将输入空间(欧式空间$Rn$或离散集合)对应于一个特征空间(希尔伯特空间H),使得在输入空间$Rn$中的超曲面模型对应于特征空间H中的超平面模型(支持向量机)。

    非线性支持向量分类机

    非线性支持向量机

    从非线性分类训练集,通过核函数与间隔最大化或凸二次规划,学习得到的分类决策函数:

    $$f(x)=sign(sum_{i=1}^N alpha_i^*y_i K(x,x_i) + b^*)$$

    称为非线性支持向量,$K(x,z)$是正定核函数。

    学习算法

    • 选择适当的核函数$K(x,z)$和适当的参数C,构造并求解最优化问题

    $$min_alpha frac 1 2 sum_{i=1}^N sum_{j=1}^N alpha_i alpha_j y_i y_j K(x_i, x_j) - sum_{i=1}^N alpha_i
    s.t. quad sum_{i=1}^N alpha_i y_i = 0, 0<alpha_i<C,i=1,2,...,N$$

    求解最优解$alpha*=(alpha_1*, alpha_2*,...,alpha_N*)$

    • 选择$alpha*$的第一个正分量$0<alpha_j*<C$,计算

    $$b^*=y_i - sum_{i=1}^N alpha_i^* y_i K(x_i cdot x_j)$$

    • 构造决策函数

    $$f(x)=sign(sum_{i=1}^N alpha_i^* y_i K(x cdot x_i) + b^*)$$

    序列最小优化算法

    SMO算法是一种启发式算法。如果所有变量都满足KKT条件,那么这个最优化问题就解决了(KKT问题是该最优化问题的充要条件),否则,选择两个变量,固定其他变量,针对这两个变量构造二次规划问题。该方法会使原始二次规划问题的目标函数变小,不断分解自问题并对子问题求解进而达到求解原问题的目的。

    由于

    $$sum_{i=1}^N alpha_i y_i = 0$$

    所以

    $$alpha_i = - frac 1 {y_i} sum_{i=2}^N alpha_i y_i$$

    两个变量的二次规划求解

    假设选择两个变量$alpha_1,alpha_2$,

    $$min_{alpha_1alpha_2} quad = frac 1 2 K_{11} alpha_1^2 + frac 1 2 K_{22} alpha_2^2 + y_1 y_2 K_{12} alpha_1 alpha_2
    quad (alpha_1 + alpha_2) + y_1 alpha_1 sum_{i=3}^N y_i alpha_i K_{i1} + y_2alpha_2sum_{i=3}^N y_i alpha_i K_{12}
    s.t. quad alpha_1 y_1 + alpha_2 y_2 = - sum_{i=3}^N y_i alpha_i = xi
    0 le alpha_i le C, i=1,2$$

    由于只有两个变量$(alpha_i,alpha_j)$,因此根据两变量的符号情况约束条件可用二位空间中的图表示(参考$alpha_1 y_1 + alpha_2 y_2 = xi(常数)$),

    二变量优化问题

    L和H是$alpha$取值的最小和最大值,如果$y_i != y_j$,则

    $$L=max(0,alpha_2 - alpha_1), H=min(C,C+alpha_2-alpha_1)$$

    如果$y_i = y_j$,则

    $$L=max(0,alpha_2 + alpha_1 + C), H=min(C,alpha_2+alpha_1)$$

    $$g(x) = sum_{i=1}^N alpha_i y_i K(x_i, x) + b$$

    得到误差值:

    $$E_i = g(x_i) - y_i = ( sum_{i=1}^N alpha_i y_i K(x_i, x) + b) - y_i$, quad i = 1,2$$

    此最优问题的解是:

    $$alpha_2^{new} = alpha_2^{old} + y_2 frac {(E_1 - E_2)} eta$$

    其中,

    $$eta = K_{11} + K_{22} - 2K_{12} = {||phi(x_1) - phi(x_2)||}^2$$

    $phi(x)$为输入空间到特征空间的映射,经过剪辑后是

    $$f(n)=egin{cases}
    H,quad alpha_2^{new} > H
    alpha_2^{new}, quad L le alpha_2^{new} le H
    L,quad alpha_2^{new} < L end{cases}$$

    则$alpha_1^{new}$为

    $$alpha_1^{new} = alpha_1^{old} + y_1 y_2 (alpha_2^{old} - alpha_2^{new})$$

    变量的选择方法

    SMO算法在每个子问题中选择两个变量优化,其中至少一个变量是违反KKT条件的。

    1.第1个变量的选择

    SMO算法在外层循环中选取违反KKT条件最严重的样本点,并将其对应的变量作为第1个变量,KKT条件如下

    $$alpha_i = 0 <=> y_i g(x_i) ge 1
    0 < alpha_i < C <=> y_i g(x_i)=1
    alpha_i = C <=> y_i g(x_i) le 1$$

    其中,$g(x_i) = sum_{j=1}^N alpha_j y_j K(x_i,x_j)+b$。

    该检验在$epsilon$范围内进行的,在校验过程中,外层循环首先遍历所有满足条件$0<alpha_i<C$的样本点,即在间隔边界上的支持向量点,检验它们是否满足KKT条件。如果这些样本点都满足KKT条件,那么遍历整个训练集,检验它们是否满足KKT条件。

    2.第2个变量的选择

    SMO算法在内层循环,假设在外层循环中已经找到第一个变量$alpha_1$,现在要在内层循环中找到第2个变量$alpha_2$,第2个变量选择的标准是希望能使$alpha_2$有足够的变化。根据上一节可知,$alpha_2^{new}$是依赖$|E_1 - E_2|$的,为了加快计算速度,最简单的做法是选择$|E_1 - E_2|$最大的(如果$E_1$为负值,则选择最大的$E_i$作为$E_2$,否则选择最小的$E_i$为$E_2$,需要保存所有的$E_i$)。

    3.计算阈值b和差值$E_i$

    在每次完成两个变量优化后,都要重新计算阈值b。

    由KKT条件得

    $$sum_{i=1}^N alpha_i y_i K_{i1} + b = y_i$$

    从而

    $$b_1^{new} = y_1 - sum_{i=3}^N alpha_i y_i K_{i1} - alpha_1^{new} y_1 K_{11} - alpha_2^{new} y_2 K_{21}$$

    由于$E_i = g(x_i) - y_i = ( sum_{i=1}^N alpha_i y_i K(x_i, x) + b) - y_i$, quad i = 1,2$,则

    $$E_1 = g(x_1) - y_1 = sum_{i=3}^N alpha_i y_i K_{i1} + alpha_1^{old} y_1 K_{11} + alpha_2^{old} y_2 K_{21} + b^{old} - y_1$$

    将上式中的$y_i - sum_{i=3}^N alpha_i y_i K_{i1} $代入$b_1^{new}$的公式中,得到

    $$b_1^{new} = -E_1 - y_1 K_{11} (alpha_1^{new} - alpha_1^{old} ) - y_2 K_{21} (alpha_2^{new} - alpha_2^{old} ) + b^old$$

    对于b的取值:

    $$b{new}=egin{cases}b_1{new}=b_2^{new}, quad 0 < alpha_i^{new} < C, i =1,2
    frac {b_1^{new} + b_2^{new}} 2,quad alpha_i^{new} == 0 or C,满足KKT条件end{cases}$$

  • 相关阅读:
    python的包和模块
    python 匿名函数
    hdu 1455 Sticks
    python 返回函数
    python 自定义排序函数
    batchsize对收敛速度的影响
    mini_batch GD
    dropout
    sift
    hog
  • 原文地址:https://www.cnblogs.com/coder2012/p/4589963.html
Copyright © 2020-2023  润新知