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^*)$$

核函数

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

核技巧应用在支持向量机的基本思想:通过一个非线性变换将输入空间(欧式空间$R^n$或离散集合)对应于一个特征空间(希尔伯特空间H),使得在输入空间$R^n$中的超曲面模型对应于特征空间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_1\alpha_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_2\alpha_2\sum_{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)=\begin{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}=\begin{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}$$

SVM-非线性支持向量机及SMO算法的更多相关文章

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

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

  2. 机器学习算法整理(七)支持向量机以及SMO算法实现

    以下均为自己看视频做的笔记,自用,侵删! 还参考了:http://www.ai-start.com/ml2014/ 在监督学习中,许多学习算法的性能都非常类似,因此,重要的不是你该选择使用学习算法A还 ...

  3. 深入理解SVM,详解SMO算法

    今天是机器学习专题第35篇文章,我们继续SVM模型的原理,今天我们来讲解的是SMO算法. 公式回顾 在之前的文章当中我们对硬间隔以及软间隔问题都进行了分析和公式推导,我们发现软间隔和硬间隔的形式非常接 ...

  4. SVM(支持向量机)分类算法

    SVM算法比较复杂,数学功底要求很高. 详见七月大神博客<支持向量机通俗导论(理解SVM的三层境界)>

  5. 支持向量机的smo算法(MATLAB code)

    建立smo.m % function [alpha,bias] = smo(X, y, C, tol) function model = smo(X, y, C, tol) % SMO: SMO al ...

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

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

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

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

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

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

  9. 机器学习——支持向量机(SVM)之Platt SMO算法

    Platt SMO算法是通过一个外循环来选择第一个alpha值的,并且其选择过程会在两种方式之间进行交替: 一种方式是在所有数据集上进行单遍扫描,另一种方式则是在非边界alpha中实现单遍扫描. 所谓 ...

随机推荐

  1. CSS3动画效果结合JS的轮播

    <style> *{;} #big{ width: 100%; height: 280px; } .carousel-wrapper{ width: 500px; height: 280p ...

  2. Forwards on Weibo (30)

    BFS,题意比较难懂,是求离query L层的总共人数 #include <stdio.h> #include <string.h> #include <iostream ...

  3. linux搞大头,bang bang bang

    偶遇网站打不开,人懵逼了,然后各种查询资料,查到可能跟服务器的问题有关,于是乎连接linux服务器,开始一段苦逼旅程. 其实主要是一些简单的linux命令,对我这个没怎么接触linux的小白来说,何等 ...

  4. Json数据中的特殊字符处理

    今天在项目中遇到一个问题,页面上的数据突然显示不出来了,查验后得知是Json数据出现了问题.使用JSON从后台向前台传输数据的时候,当数据本身含有一些特殊字符,会导致JSON数据的解析出错.如果内容中 ...

  5. ubuntu安装goldendict以及添加本地词典和在线词典

    软件在ubuntu软件中心安装就可以了, 关于网络词典, 推荐有道在线词典,网址http://dict.youdao.com/search?q=%GDWORD%&ue=utf8 添加方法:编辑 ...

  6. 修改Linux可显示的行数

    在/boot/grub/menu.lst中,找到kernel开头的那一行,在后面加上参数vga=791 下面是vga可以取的值 #     +----------------------------- ...

  7. 集成TBS(腾讯浏览服务)x5内核的webView

    由于公司产品需要展示html5页面,一开始我使用的是android自带webview,一些简单的页面没什么问题,但是碰到比较复杂的页面就让人无语了. 1.Android各大厂商都有自己定制的ROM,导 ...

  8. Swift - mutating关键字的使用

    转载自:http://www.jianshu.com/p/14cc9d30770a  感谢作者:此ID想了很久 Swift中protocol的功能比OC中强大很多,不仅能再class中实现,同时也适用 ...

  9. java学习:ArrayList的实现及原理

    1. ArrayList概述: ArrayList是List接口的可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类还提供一些方法来操作内部 ...

  10. 关于mha手动切换的一些记录(mha方案来自网络)

    mha方案出自:http://www.cnblogs.com/xuanzhi201111/p/4231412.html 当主服务器故障时,人工手动调用MHA来进行故障切换操作,具体命令如下: 先停MH ...