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模拟登录百度贴吧(百度贴吧登录)实例
Dec 18 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
May 31 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
python爬虫获取百度首页内容教学
Dec 23 Python
创建Django项目图文实例详解
Jun 06 Python
检测python爬虫时是否代理ip伪装成功的方法
Jul 12 Python
python3 selenium自动化 下拉框定位的例子
Aug 23 Python
解决Tensorflow 内存泄露问题
Feb 05 Python
keras tensorflow 实现在python下多进程运行
Feb 06 Python
Python实现文件压缩和解压的示例代码
Aug 12 Python
利用Python的folium包绘制城市道路图的实现示例
Aug 24 Python
Python QT组件库qtwidgets的使用
Nov 02 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
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
2019/08/12 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
2019/10/30 PHP
tp5.1 框架路由操作-URL生成实例分析
2020/05/26 PHP
JavaScript中的闭包原理分析
2010/03/08 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
纯CSS3代码实现滑动开关效果
2015/08/19 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
Bootstrap的Refresh Icon也spin起来
2016/07/13 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
解决vue-cli webpack打包后加载资源的路径问题
2018/09/25 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
2019/12/06 Javascript
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
Python中操作符重载用法分析
2016/04/29 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
Python中格式化format()方法详解
2017/04/01 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
娇韵诗香港官网:Clarins香港
2020/08/13 全球购物
应用化学专业本科生求职信
2013/09/29 职场文书
4s客服专员岗位职责
2013/12/01 职场文书
平面设计岗位职责
2013/12/14 职场文书
企业申诉管理制度
2014/01/30 职场文书
竞选班干部演讲稿600字
2014/08/20 职场文书
庆七一活动总结
2014/08/27 职场文书
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js