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实现的数据结构与算法之基本搜索详解
Apr 22 Python
Python计算字符宽度的方法
Jun 14 Python
基于Python __dict__与dir()的区别详解
Oct 30 Python
手把手教你python实现SVM算法
Dec 27 Python
对numpy中array和asarray的区别详解
Apr 17 Python
Python3数据库操作包pymysql的操作方法
Jul 16 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
Apr 28 Python
对Python _取log的几种方式小结
Jul 25 Python
Django实现内容缓存实例方法
Jun 30 Python
python matplotlib绘制三维图的示例
Sep 24 Python
django中cookiecutter的使用教程
Dec 03 Python
python标准库ElementTree处理xml
May 20 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
GD输出汉字的函数的分析
2006/10/09 PHP
php文件上传类的分享
2017/07/06 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
JavaScript 学习笔记(十一)
2010/01/19 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
Window.Open如何在同一个标签页打开
2014/06/20 Javascript
javacript获取当前屏幕大小
2016/06/04 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
js与applet相互调用的方法
2016/06/22 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
AngularJS表单验证功能
2017/10/19 Javascript
使用socket.io制做简易WEB聊天室
2018/01/02 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
微信小程序自定义tabBar在uni-app的适配详解
2019/09/30 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
Python实现豆瓣图片下载的方法
2015/05/25 Python
Python中super的用法实例
2015/05/28 Python
Python实现二叉堆
2016/02/03 Python
Python对多属性的重复数据去重实例
2018/04/18 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
python set内置函数的具体使用
2019/07/02 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
测绘工程个人的自我评价
2013/11/10 职场文书
酒店销售主管岗位职责
2014/01/04 职场文书
安全大检查反思材料
2014/01/31 职场文书
技校毕业生自荐信
2014/06/03 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书