python机器学习理论与实战(五)支持向量机


Posted in Python onJanuary 19, 2018

       做机器学习的一定对支持向量机(support vector machine-SVM)颇为熟悉,因为在深度学习出现之前,SVM一直霸占着机器学习老大哥的位子。他的理论很优美,各种变种改进版本也很多,比如latent-SVM, structural-SVM等。这节先来看看SVM的理论吧,在(图一)中A图表示有两类的数据集,图B,C,D都提供了一个线性分类器来对数据进行分类?但是哪个效果好一些?

python机器学习理论与实战(五)支持向量机

(图一)

        可能对这个数据集来说,三个的分类器都一样足够好了吧,但是其实不然,这个只是训练集,现实测试的样本分布可能会比较散一些,各种可能都有,为了应对这种情况,我们要做的就是尽可能的使得线性分类器离两个数据集都尽可能的远,因为这样就会减少现实测试样本越过分类器的风险,提高检测精度。这种使得数据集到分类器之间的间距(margin)最大化的思想就是支持向量机的核心思想,而离分类器距离最近的样本成为支持向量。既然知道了我们的目标就是为了寻找最大边距,怎么寻找支持向量?如何实现?下面以(图二)来说明如何完成这些工作。

python机器学习理论与实战(五)支持向量机

(图二)

假设(图二)中的直线表示一个超面,为了方面观看显示成一维直线,特征都是超面维度加一维度的,图中也可以看出,特征是二维,而分类器是一维的。如果特征是三维的,分类器就是一个平面。假设超面的解析式为python机器学习理论与实战(五)支持向量机,那么点A到超面的距离为python机器学习理论与实战(五)支持向量机,下面给出这个距离证明:

python机器学习理论与实战(五)支持向量机

(图三)

在(图三)中,青色菱形表示超面,Xn为数据集中一点,W是超面权重,而且W是垂直于超面的。证明垂直很简单,假设X'和X''都是超面上的一点,

python机器学习理论与实战(五)支持向量机

因此W垂直于超面。知道了W垂直于超面,那么Xn到超面的距离其实就是Xn和超面上任意一点x的连线在W上的投影,如(图四)所示:

python机器学习理论与实战(五)支持向量机

套进拉格朗日乘子法公式得到如(公式五)所示的样子:

python机器学习理论与实战(五)支持向量机

(公式五)

        在(公式五)中通过拉格朗日乘子法函数分别对W和b求导,为了得到极值点,令导数为0,得到

python机器学习理论与实战(五)支持向量机

 ,然后把他们代入拉格朗日乘子法公式里得到(公式六)的形式:

python机器学习理论与实战(五)支持向量机

(公式六)

     (公式六)后两行是目前我们要求解的优化函数,现在只需要做个二次规划即可求出alpha,二次规划优化求解如(公式七)所示:

python机器学习理论与实战(五)支持向量机

(公式七)

         通过(公式七)求出alpha后,就可以用(公式六)中的第一行求出W。到此为止,SVM的公式推导基本完成了,可以看出数学理论很严密,很优美,尽管有些同行们认为看起枯燥,但是最好沉下心来从头看完,也不难,难的是优化。二次规划求解计算量很大,在实际应用中常用SMO(Sequential minimal optimization)算法,SMO算法打算放在下节结合代码来说。

参考文献:

     [1]machine learning in action. Peter Harrington

     [2] Learning From Data. Yaser S.Abu-Mostafa

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python采用socket模拟TCP通讯的实现方法
Nov 19 Python
在ironpython中利用装饰器执行SQL操作的例子
May 02 Python
python中enumerate函数遍历元素用法分析
Mar 11 Python
深入理解Python中变量赋值的问题
Jan 12 Python
Python外星人入侵游戏编程完整版
Mar 30 Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
Jun 08 Python
django 数据库连接模块解析及简单长连接改造方法
Aug 29 Python
python 正则表达式参数替换实例详解
Jan 17 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
Feb 09 Python
解决python 虚拟环境删除包无法加载的问题
Jul 13 Python
史上最详细的Python打包成exe文件教程
Jan 17 Python
Python读取图片为16进制表示简单代码
Jan 19 #Python
Python实现pdf文档转txt的方法示例
Jan 19 #Python
浅谈Python实现2种文件复制的方法
Jan 19 #Python
用Python进行简单图像识别(验证码)
Jan 19 #Python
flask中使用蓝图将路由分开写在不同文件实例解析
Jan 19 #Python
python模拟事件触发机制详解
Jan 19 #Python
flask使用session保存登录状态及拦截未登录请求代码
Jan 19 #Python
You might like
一个可以删除字符串中HTML标记的PHP函数
2006/10/09 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
python检测lvs real server状态
2014/01/22 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
对Python3 序列解包详解
2019/02/16 Python
Python学习笔记之For循环用法详解
2019/08/14 Python
python生成器用法实例详解
2019/11/22 Python
Python 炫技操作之合并字典的七种方法
2020/04/10 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
python中remove函数的踩坑记录
2021/01/04 Python
python math模块的基本使用教程
2021/01/16 Python
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
学年自我鉴定范文
2013/10/01 职场文书
就业推荐自我鉴定
2013/10/06 职场文书
总经理驾驶员岗位职责
2013/12/04 职场文书
大学生写自荐信的技巧
2014/01/08 职场文书
大课间体育活动方案
2014/03/12 职场文书
化妆品活动策划方案
2014/05/23 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
安全先进班组材料
2014/12/26 职场文书
个人年终总结范文
2015/03/09 职场文书
新闻简讯格式及范文
2015/07/22 职场文书
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang