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时间模块datetime、time、calendar的使用方法
Jan 13 Python
理解Python中的With语句
Mar 18 Python
Python实现在线音乐播放器
Mar 03 Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
Jun 04 Python
python安装twisted的问题解析
Aug 21 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
Sep 27 Python
使用Python横向合并excel文件的实例
Dec 11 Python
python爬虫基础教程:requests库(二)代码实例
Apr 09 Python
使用Python检测文章抄袭及去重算法原理解析
Jun 14 Python
python实现一个猜拳游戏
Apr 05 Python
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
May 22 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
php5.3不能连接mssql数据库的解决方法
2014/12/27 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
超酷的网页音乐播放器DewPlayer使用方法
2010/12/18 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
2013/08/16 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
jquery1.10给新增元素绑定事件的方法
2014/03/06 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
Js利用Canvas实现图片压缩功能
2017/09/13 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
Python中的jquery PyQuery库使用小结
2014/05/13 Python
Python批量发送post请求的实现代码
2018/05/05 Python
python实现批量图片格式转换
2020/06/16 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
2019/01/07 Python
浅谈python标准库--functools.partial
2019/03/13 Python
对于Python深浅拷贝的理解
2019/07/29 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
python文件编写好后如何实践
2020/07/07 Python
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
实现向右循环移位
2014/07/31 面试题
普通大学毕业生自荐信
2013/11/04 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
八月一日观后感
2015/06/10 职场文书
趣味运动会标语口号
2015/12/26 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫