SMO算法--SVM(3)


利用SMO算法解决这个问题:

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


求解两个变量的解析方法

先选择两个变量,其余的固定, 得到子问题:

更新

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

求导, 得到:

由于决策函数为:

令:


定义误差项

定义学习率

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

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

求出:

表示未加约束条件求出来的(未剪辑)

加上约束条件:

约束条件如下图的正方形框所示, 一共会有两种情况:

以左图为例子分析:,约束条件可以写成:,分别求取的上界和下界:
下界:

上界:

同理,右图情况下
下界:

上界:
加入约束条件后:

然后根据:计算出


选择变量的启发式方法

的选择

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

的选择:

由KKT条件:

具体证明过程:

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

的选择:

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

更新 b

更新b要满足:

得到:

根据E1的计算公式:

代入即可得到:

同理:

更新b:

更新Ei

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

其中,S是支持向量的集合。


SMO算法的总结:

先初始化参数, 选择, 然后更新到所有变量满足KKT条件。
.

.

.

SMO算法--SVM(3)的更多相关文章

  1. 机器学习经典算法详解及Python实现--基于SMO的SVM分类器

    原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector  ...

  2. 序列最小最优化算法(SMO)-SVM的求解(续)

    在前一篇文章中,我们给出了感知器和逻辑回归的求解,还将SVM算法的求解推导到了最后一步,在这篇文章里面,我们将给出最后一步的求解.也就是我们接下来要介绍的序列最小最优化算法. 序列最小最优化算法(SM ...

  3. [笔记]关于支持向量机(SVM)中 SMO算法的学习(一)理论总结

    1. 前言 最近又重新复习了一遍支持向量机(SVM).其实个人感觉SVM整体可以分成三个部分: 1. SVM理论本身:包括最大间隔超平面(Maximum Margin Classifier),拉格朗日 ...

  4. 支持向量机(Support Vector Machine)-----SVM之SMO算法(转)

    此文转自两篇博文 有修改 序列最小优化算法(英语:Sequential minimal optimization, SMO)是一种用于解决支持向量机训练过程中所产生优化问题的算法.SMO由微软研究院的 ...

  5. 统计学习方法c++实现之六 支持向量机(SVM)及SMO算法

    前言 支持向量机(SVM)是一种很重要的机器学习分类算法,本身是一种线性分类算法,但是由于加入了核技巧,使得SVM也可以进行非线性数据的分类:SVM本来是一种二分类分类器,但是可以扩展到多分类,本篇不 ...

  6. 支持向量机(SVM)中的 SMO算法

    1. 前言 最近又重新复习了一遍支持向量机(SVM).其实个人感觉SVM整体可以分成三个部分: 1. SVM理论本身:包括最大间隔超平面(Maximum Margin Classifier),拉格朗日 ...

  7. <转>SVM实现之SMO算法

    转自http://blog.csdn.net/zouxy09/article/details/17292011 终于到SVM的实现部分了.那么神奇和有效的东西还得回归到实现才可以展示其强大的功力.SV ...

  8. SVM之SMO算法(转)

    支持向量机(Support Vector Machine)-----SVM之SMO算法(转) 此文转自两篇博文 有修改 序列最小优化算法(英语:Sequential minimal optimizat ...

  9. ML-求解 SVM 的SMO 算法

    这算是我真正意义上认真去读的第一篇ML论文了, but, 我还是很多地方没有搞懂, 想想, 缓缓吧, 还是先熟练调用API 哈哈 原论文地址: https://www.microsoft.com/en ...

随机推荐

  1. Tomcat JDK MySql 安装配置

    Tomcat 7绿色版指定jdk并注册服务  https://blog.csdn.net/weixin_43976019/article/details/89386171   例如:service.b ...

  2. ES6中新增let命令使用方法

     在ES6中新增了let命令,该命令的用法与var 类似,但是所声明的变量只能在let命令所在的代码块(最接近let 命令的大括号内)中有效果.但是let 又有一些不同于var 的特性. 1.let定 ...

  3. 线性数据结构案例1 —— 单向链表中获取倒数k个节点

    一.介绍  先遍历整个链表获取链表长度length,然后通过 (length-index) 方式得到我们想要节点在链表中的位置. 二.代码 public Node findLastIndexNode( ...

  4. JS照片轮换

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Codeforces_449B 最短路+统计

    也是给这个题目跪了一天...时间不多了,也不多讲 首先要用 nlogn的优先队列dijstla来求最短路,n^2的会超时,不过发现SPFA好像也可以过,他的复杂度应该介于NlogN和N^2之间. 然后 ...

  6. 使用eclipse创建maven时遇到的问题

    转自https://www.cnblogs.com/hongmoshui/p/7994759.html   1.在eclipse中用maven创建项目,右键new>>Maven Proje ...

  7. C语言的字符串类型

    C语言使用指针来管理字符串(1)C语言中定义字符串的方法:char *p = "linux";此时p就叫字符串,但是实际上p只是一个字符指针(本质上就是一个指针变量,只是p指向了一 ...

  8. Python调用OpenCV读显写

    OpenCV提供了python的接口,而且很重要的一点是python下的很多接口名与C++的接口名是一样的,这一篇先记录python调用OpenCV去读取图像.显示图像和保存图像. 1.OpenCV读 ...

  9. jquery---利用jquery插件生成二维码

    <script type="text/javascript" src="<?php echo RESOURCE_SITE_URL;?>/js/jquer ...

  10. elastic启动脚本

    #!bin/bash export JAVA_HOME=/usr/java/jdk1.8.0_144 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH ...