• SMO算法--SVM(3)


    SMO算法--SVM(3)


    利用SMO算法解决这个问题:
    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119201123784-510590663.png)

    SMO算法的基本思路
    SMO算法是一种启发式的算法(别管启发式这个术语, 感兴趣可了解), 如果所有变量的解都满足最优化的KKT条件, 那么最优化问题就得到了。
    每次只优化两个, 将问题转化成很多个二次规划的子问题, 直到所有的解都满足KKT条件为止。
    整个SMO算法包括两个部分:
    1, 求解两个变量的解析方法
    2, 选择变量的启发式方法


    ## 求解两个变量的解析方法 先选择两个变量![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119201247864-601304977.png),其余的![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119202059754-483692123.png)固定, 得到子问题:
    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119202528379-1108753977.png)

    更新

    先不考虑约束条件, 代入, 得到:

    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119202904744-1111249647.png)

    求导, 得到:

    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119202955509-1503940682.png)

    由于决策函数为:

    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119203123499-464867959.png)
    令:
    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119203154954-210061429.png) ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119203230790-1740478769.png)
    定义**误差项**:
    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119205824766-518147084.png)

    定义学习率

    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119205903183-1321300825.png)

    将v1, v2代入到中, 得到:

    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119203343824-1661502373.png)

    代入误差项和学习率, 得到最终的导数表达式:

    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119203449085-1071423170.png)

    求出:

    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119204035364-576358518.png)
    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119204045925-2054619963.png)表示未加约束条件求出来的(未剪辑)

    加上约束条件:

    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119204154404-251379170.png)
    约束条件如下图的正方形框所示, 一共会有两种情况:
    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119204402684-296555615.png)
    以左图为例子分析:![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119204437610-159230524.png),约束条件可以写成:![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119204511504-1541869993.png),分别求取![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119204545425-479290477.png)的上界和下界: 下界:![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119204826064-389684988.png)

    上界:

    同理,右图情况下
    下界:

    上界:
    加入约束条件后:

    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119205309835-1682150724.png)

    然后根据:计算出

    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119205009044-1620578688.png)

    ## 选择变量的启发式方法

    的选择

    选择违反KKT条件的, 选择使|E1 - E2|变化最大的。
    具体过程如下:

    的选择:

    由KKT条件:

    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119210543989-1112016459.png)
    具体证明过程:
    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119211120409-1329468313.png) ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119211842349-588524709.png)

    一般来说,我们首先选择违反这个条件的点。如果这些支持向量都满足KKT条件,再选择违反的点。

    的选择:

    要让|E1 - E2|变化最大。E1已经确定, 找到使得|E1-E2|最大的E2对应的即可。

    更新 b

    更新b要满足:

    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119213018043-580202864.png)
    得到:
    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119213441763-1870466840.png)
    根据E1的计算公式:
    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119213917528-1600065896.png)
    代入即可得到:
    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119214648444-1447093898.png)
    同理:
    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119214622054-365894880.png)
    更新b:
    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119215342405-1392333298.png)

    更新Ei

    更新Ei时候, 只需要用到支持向量就好了, 因为超平面就是用支持向量来确定的, 其他的点其实并没有贡献什么作用, 只计算支持向量可以减小计算量。

    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119215450095-1260786589.png)
    其中,S是支持向量的集合。
    ## SMO算法的总结: 先初始化参数, 选择![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119201247864-601304977.png), 然后更新到所有变量满足KKT条件。 .
    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119220730192-303519467.png)
    .
    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119220834943-149911405.png)
    .
    ![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119221311777-549121282.png)
  • 相关阅读:
    ViewPager
    SpringBoot入门
    SpringMVC拦截器
    QML布局概述(Qt Quick Layouts Overview)
    Ubuntu16.04软件安装错误处理(以安装ssh-server为例)
    VirtualBox实用网络设置
    Ubuntu安装cmake 3.9
    QML学习笔记
    Qt一些方便易用的小技巧
    Qt 4.8.5 + MinGW32 + Qt creater 安装
  • 原文地址:https://www.cnblogs.com/hichens/p/11892881.html
Copyright © 2020-2023  润新知