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脚本实现格式化css文件
Apr 08 Python
用python写的一个wordpress的采集程序
Feb 27 Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
django创建自定义模板处理器的实例详解
Aug 14 Python
Python自定义线程类简单示例
Mar 23 Python
python2.7实现FTP文件下载功能
Apr 15 Python
python3+PyQt5实现文档打印功能
Apr 24 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
Python GUI自动化实现绕过验证码登录
Jan 10 Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 Python
什么是python的函数体
Jun 19 Python
使用tensorflow 实现反向传播求导
May 26 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
?算你??的 PHP 程式大小
2006/12/06 PHP
用Zend Encode编写开发PHP程序
2010/02/21 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
PHP实现会员账号单唯一登录的方法分析
2019/03/07 PHP
javascript 面向对象思想 附源码
2009/07/07 Javascript
Javascript对象属性方法汇总
2013/11/21 Javascript
Javascript中的String对象详谈
2014/03/03 Javascript
Javascript实现飞动广告效果的方法
2015/05/25 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
基于vue.js实现购物车
2020/01/15 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
分析并输出Python代码依赖的库的实现代码
2015/08/09 Python
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
python如何读写csv数据
2018/03/21 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
PyQt编程之如何在屏幕中央显示窗体的实例
2019/06/18 Python
Django之使用内置函数和celery发邮件的方法示例
2019/09/16 Python
python元组和字典的内建函数实例详解
2019/10/22 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
《盘古开天地》教学反思
2014/02/28 职场文书
团队拓展活动总结
2014/08/27 职场文书
结婚幸福感言
2015/08/01 职场文书
酒店厨房管理制度
2015/08/06 职场文书
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server