SVM -支持向量机原理详解与实践之四

  1. SVM原理分析

    1. SMO算法分析

SMO即Sequential minmal optimization, 是最快的二次规划的优化算法,特使对线性SVM和稀疏数据性能更优。在正式介绍SMO算法之前,首先要了解坐标上升法。

  1. 坐标上升法(Coordinate ascent)

坐标上升法(Coordinate Ascent)简单点说就是它每次通过更新函数中的一维,通过多次的迭代以达到优化函数的目的。

  1. 坐标上升法原理讲解

为了更加通用的表示算法的求解过程,我们将算法表示成:

 

(3.13-1)

坐标上升法的算法为:

这个算法中最为关键的地方就是内循环对于的求解,意思是固定除了之外的所有a(从i=1~m),也就是说将除外的其他变量看成是常数,并且将W看做是关于的函数,那么直接对求导优化得到极大值,在上面算法的版本中,内循环优化变量的顺序是但是一个更高级的版本可能选择其它的顺序,例如我可以根据我们的期望来选择下一个变量来更新,并让W(a)有最大的增加。

当函数W在内循环中能够最快的达到最优,则坐标上升是一个有效的算法,下面是一个坐标上升的示意图:

上图中的椭圆形线代表我们需要优化问题的二次函数的等高线,变量数为2,起始坐标是(2,2),途中的直线是迭代优化的路径,可以看到每一步都会相最优值前进一步,而且前进的路线都是平行与相应的坐标轴的,因为每次只优化一个变量。

  1. C++算法编程实践

问题:求解函数的最大值。

解:回顾我们前面分析的求取函数最大值的关键是,求解每一个迭代变量的导数,当求解某一变量的导数的时候,其他的变量看做是常数:

VS2013控制台工程参考代码如下:

// Coordinate ascent.cpp : Defines the entry point for the console application.

//

#include"stdafx.h"

#include<iostream>

usingnamespace std;

#definef(x1,x2,x3) (-x1*x1-2*x2*x2-3*x3*x3+2*x1*x2+2*x1*x3-4*x2*x3+6)

int_tmain(intargc,_TCHAR*argv[])

{

double x1 = 1;

double x2 = 1;

double x3 = 1;

double f0 =f(x1, x2, x3);

double err = 1.0e-10;

while (true)

{

x1 = x2 + x3;//对x1求导的表达式,每次迭代后更新

x2 = 0.5*x1 - x3;//对x2求导的表达式,每次迭代后更新

x3 = 1.0 / 3 * x1 - 2.0 / 3 * x2;//对x3求导的表达式,每次迭代后更新

double ft =f(x1, x2, x3);//求函数值

if (abs(ft - f0)<err)//判断f是否收敛

{

break;//收敛即完成求解过程

}

f0 = ft;//更新f0

}

cout <<"\nmax{f(x1,x2,x3)}=" <<f(x1, x2, x3) << endl;

cout <<"取得最大值时的坐标:\n(x1,x2,x3)=(" << x1 <<"," << x2 <<"," << x3 <<")" << endl;

system("pause");

return 0;

}

运行结果如下:

  1. SMO算法详解

回到我们软间隔与正则化章节(还有最优间隔分类器),我们的对偶问题,就是通过固定拉格朗日乘子a,得到w和b的最优化表达式(关于a的表达式),所以最后我们只需要确认a,我们就可以最终确定w和b,但是在讨论SMO算法之前,我们并没有真正求解出。这一章我们就会通过介绍SMO算法对对偶问题最后需要解决的问题:

做出一个求解,也就是在参数上求W最大值的问题,注意其中的就是训练样本的输入,x即为样本的输入特征,y即样本对应的标签(结果)。

按照前面介绍的坐标上升的思路,我们首先固定除了以外的所有参数,然后在上求极值。现在下面先固定以外的所有参数,看看具体的求解步骤:

  1. 首先由优化问题的约束条件可知:

即可推出

 

 

两边乘以:

 
 

(3.13.2-1)

因为,所以,因此到这一步,就由其它的决定,如果我们固定主,无论如何不能违背优化问题的约束

因此如果我们想要更新一些的对象,为了保持满足约束条件就必须至少快速的更新它们中的两个,这个就激发出SMO算法,那么SMO算法可以简单的描述成:

重复大括号中的操作直到收敛{

  1. 选择一对来更新下一个(用启发式的方法,也就是尝试选取两个允许我们朝着全局最大方向做最大前进的参数)。
  1. 固定所有其它的参数,优化关于和的函数W(a)。

}

为了测试该算法的收敛性,我们可以检查KKT条件:

是否满足收敛容错参数,典型值为0.1~0.001之间。

SMO作为一个高效的算法的关键原因在于计算更新的效率非常高。假设当前我们有一些满足(3.10.3-5)的约束,固定,想要优化关于的函数,用表示有:

 

 

由于右边固定,我们可以直接用一个常数表示,例如用表示:

于是我可以将的约束画出来:

根据约束条件:

可知上图中表示的横轴和纵轴必须限制在0到C的方框内,并且也要在直线上。并且的纵轴也必须满足,否则就不能满足约束条件。

下面用表示,过程是:

其中,因为,所以有:

所以目标问题W可以表示为:

其中为常数。

实际的问题中W展开后就是一个关于的二次函数, A、B、C是固定值,这样通过对W进行求导可得,然而要保证满足,我们使用 表示求导求出的, 然而最后的,需要根据下面的情况得到:

求出以后,我们可以就可以得到

  1. 支持向量机实践

这里限于篇幅,实践的内容将在下一篇展开…



SVM -支持向量机原理详解与实践之四相关推荐

  1. SVM -支持向量机原理详解与实践之五

    SVM -支持向量机原理详解与实践之四 SVM原理分析 SMO算法分析 SMO即Sequential minmal optimization, 是最快的二次规划的优化算法,特使对线性SVM和稀疏数据性 ...

  2. SVM-支持向量机原理详解与实践之四

    SVM-支持向量机原理详解与实践之三 SVM原理分析 核函数与核技巧 什么是核 什么是核,核其实就是一种特殊的函数,更确切的说是核技巧(Kernel trick),清楚的明白这一点很重要. 为什么说是 ...

  3. SVM分类器原理详解

    SVM分类器原理详解 标签: svm文本分类java 2015-08-21 11:51 2399人阅读 评论(0) 收藏 举报  分类: 数据挖掘 文本处理(16)  机器学习 分类算法(10)  目 ...

  4. SVM-支持向量机原理详解与实践之一

    SVM-支持向量机原理详解与实践 前言 去年由于工作项目的需要实际运用到了SVM和ANN算法,也就是支持向量机和人工神经网络算法,主要是实现项目中的实时采集图片(工业高速摄像头采集)的图像识别的这一部 ...

  5. SVM-支持向量机原理详解与实践之三

    SVM-支持向量机原理详解与实践之二 SVM原理分析 以下内容接上篇. 拉格朗日对偶性(Largrange duality)深入分析 前面提到了支持向量机的凸优化问题中拉格朗日对偶性的重要性. 因为通 ...

  6. LVS原理详解及部署之四:keepalived介绍

    -------------------LVS专题------------------------ LVS原理详解及部署之一:ARP原理准备 LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调 ...

  7. SVM(support vector machine)支持向量机原理详解

    SVM是什么? SVM - support vector machine, 俗称支持向量机,为一种supervised learning算法,属于classification的范畴. 在数据挖掘的应用 ...

  8. SVM算法原理详解及python实现

    SVM算法 算法原理 对数据的要求 算法的优缺点 算法需要注意的点 算法实现(python)(待更.........) 算法原理 {wTx+b>0yi=1⟺y(xi)>0wTx+b< ...

  9. LVS原理详解及部署之五:LVS+keepalived实现负载均衡高可用

    本文我们主要讲解的是LVS通过keepalived来实现负载均衡和高可用,而不是我们第三篇文章介绍的通过手动的方式来进行配置.通过脚本的方式来显示RS节点的健康检查和LVS的故障切换.此文会通过一个实 ...

  10. SVM -支持向量机原理与实践之实践篇

    SVM -支持向量机原理与实践之实践篇 前言 最近太忙,这几天还是抽空完成实践篇,毕竟所有理论都是为实践服务的,上一篇花了很大篇幅从小白的角度详细的分析了SVM支持向量积的原理,当然还有很多内容没有涉 ...

最新文章

  1. Java基础——组合关系
  2. tensorflow 进阶(二),BP神经网络
  3. 位操作的应用:无参数交换数据,异或加密,循环移位加密【位操作】(56)
  4. kubernetes(k8s)
  5. Python 条件推导式 - Python零基础入门教程
  6. ICCV2021 Oral-TAUFacebook提出了通用的Attention模型可解释性
  7. IplImage, CvMat, Mat 的关系和相互转换(转)
  8. 架构学习----消息队列
  9. 什么是哈希(hash)
  10. 叶聪:朋友圈背后的计算机视觉技术与应用
  11. 个人学习笔记——庄懂的技术美术入门课(美术向)06
  12. 模拟一个简单的购房商贷月供计算器
  13. 【LM】windows7 内部版本7601,此windows副本不是正版——已解决
  14. 链队列——-链式存储实现队列的入队出队(带next,front,rear指针)
  15. SD/eMMC初始化流程、读写流程(dwc mshc)
  16. 星星之火-35:为什么傅里叶分析需要引入负频率以及负频率的物理意义是什么?
  17. 第三十八章 短语动词
  18. 一个普通的小活动让超市回头客源源不断?方案简单到爆
  19. 瞪羚企业申报流程材料
  20. IIS 配置问题解决

热门文章

  1. [Linux 驱动]模块加载RTX8025驱动
  2. 紫光输入法linux,紫光拼音输入法下载_紫光拼音输入法最新版下载-太平洋下载中心...
  3. Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(11):一些图片
  4. 树莓派串口/RS485通信
  5. android版本4.4.2导航,天敏D8+_rk3288_Android_4.4.2_kiui7_蓝光导航极速版
  6. 软件研发过程客观体检指标
  7. 液晶拼接处理器_大屏幕显示系统设备中矩阵与液晶拼接屏的连接方法
  8. android电视工程模式,智能电视进入工厂/工程模式教程汇总!
  9. 19电子设计速成实战宝典pdf_ALTIUMDESIGNER19(中文版)电子设计速成实战宝典
  10. python爬取京东商品数据要先登录_Python爬虫的起点