机器学习笔记(二十六):支撑向量机(SVM)
凌云时刻 · 技术
导读:这一篇笔记主要讲机器学习算法中一个重要的分类算法,支撑向量机(Support Vector Machine)。它背后有严格的数学理论和统计学理论支撑的,这里我们只对它的原理和应用做以介绍,更深层次的数学理论有兴趣可以查阅其他资料。
作者 | 计缘
来源 | 凌云时刻(微信号:linuxpk)
Soft Margin SVM
在上一节介绍了Hard Margin SVM和Soft Margin SVM,并且在诠释SVM背后最优化问题的数学原理时也是基于Hard Margin SVM前提的。这一节我们来看看Soft Margin SVM。
Soft Margin SVM概念
如上图所示,点A是一个蓝色分类的点,但是它离红色分类的点非常近,那么如果按Hard Margin SVM的思路,上图情况的决策边界很有可能是下图所示这样:
这条决策边界直线看似很好的将蓝色和红色点完全区分开了,但是它的泛化能力是值得怀疑的,因为这条决策边界极大的受到了点A的影响,而点A可能是蓝色点中极为特殊的一个点,也有可能它根本就是一个错误的点。所以根据SVM的思想,比较合理的决策边界应该下图绿色的直线所示:
虽然绿色直线的决策边界没有完全将红蓝点分开,但是如果将它放在生产数据中,可能预测准确度更高,也就是泛化能力更强。
再如上图中的情况,已经根本不可能有一条线性决策边界能将红蓝点分开了,所以我们希望决策边界具有一定的包容性或容错性,已降低分类准确度的代价换来更高的泛化能力。那么这种SVM就称为Soft Margin SVM。
Soft Margin SVM原理
在Hard Margin SVM最优化问题的两个函数中,限定条件 表示在Margin区域内不会有任何点出现,但是在Soft Margin SVM中为了容错性,是允许在Margin区域内出现点的,也就是将Hard Margin SVM的限定条件加以宽松量,并且这个宽松量必须是正数:
上图中有四条直线,其中橘黄色的三条是在讲Hard Margin SVM中得出的,如果我们将Hard Margin SVM中的限定条件加以宽松量的话,其实Margin的区域就会变小,也就是图中绿色虚线和决策边界构成的区域。而绿色虚线的方程为:
那么Soft Margin SVM的限定条件我们就知道了。
但是现在问题来了,如果当 无穷大时会发生什么情况呢?那就意味着容错性无穷大,也就是可以将所有点都认为是同一类了,故而分不出类别。解决这个问题的思路我们之前已经了解过了,那就是模型正则化。
我们知道Hard Margin SVM的优化目标函数为 ,Soft Margin SVM也是基于Hard Margin SVM的思想演变的,所以我们将这个目标函数加一个正则模型,而这个正则模型又恰是Soft Margin SVM的宽松量,这样就达到了在Hard Margin SVM的思路下,增加宽松量从而实现Soft Margin SVM,所以 Soft Margin SVM的目标函数为:
公式里的 是模型正则化中的一个超参数,取值范围在0到1之间。用来权衡Hard Margin SVM目标函数和Soft Margin SVM宽松量两者之间的比例。如此一来也就限制了 无穷大的问题,因为Soft Margin SVM的目标函数最优化要同时估计两部分,相互制约。
我们在之前的笔记中学习过了 范数及 正则模型。这里的 就是 正则模型,而 正则模型是 。
C∑i=1mζi。
模型正则化的内容请参见 机器学习笔记(十七)、(十八)交叉验证、模型正则化 。
Scikit Learn中的SVM
前面两小节介绍了SVM背后的数学原理,这一节来看看如何使用Scikit Learn中封装的SVM方法。我们还是使用之前使用过很多次的鸢尾花数据:
|
接下来我们使用Scikit Learn封装的SVM方法对样本数据进行分类:
|
在上面的示例代码中,我将超参数 取了一个非常大的数,那么为了平衡 整个函数, 就得等于0才能让最大限度的平衡正则模型和整个目标函数。所以宽松量为零,就成了Hard Margin SVM。并且从上图可以看出,离决策边界最近的点,无论是红色点还是蓝色点,也就是红蓝支撑向量到决策边界的距离都差不多。
如果我们将超参数C的值取的小一些,那么整个问题就变成了Soft Margin SVM,来对比看看决策边界会有什么不同:
|
此时从上图可以看到,红蓝支撑向量到决策边界的距离已经不一样了,并且还有一个红色的点被划到蓝色点的范围内,那么我们知道这都是因为Soft Margin SVM中加了宽松量的缘故。
绘制支撑向量直线
在上一小节,我们知道决策边界以及上下支撑向量构成的直线的公式分别是:
决策边界:
上支撑向量直线:
下支撑向量直线:
那么在鸢尾花的示例中,如何来求这三条直线呢?以决策边界直线为例,ww和dd其实我们已经知道了,就是特征系数和截距:
|
因为我们只用了鸢尾花的两个类型和两个特征,所以决策边界直线的公式可以展开为:
将上面的公式转换为 的形式:
同理我们也可以将支撑向量直线的公式作以转换:
此时我们在给定的坐标系内,构建一组,那么就可以求出一组x1x1,然后将这些点连起来,就绘制出了决策边界的直线:
|
从上图可以看到,是一个标准的Hard Margin SVM,Margin区域没有任何一个点,支撑向量一共有五个,红色点三个,蓝色点两个。
我们再来看看Soft Margin SVM的情况:
|
从上图中可以看出,Margin区域内有很多点,说明相比Hard Margin SVM,Soft Margin SVM增加了不少宽松量。
END
往期精彩文章回顾
机器学习笔记(二十五):支撑向量机(SVM)
机器学习笔记(二十四):召回率、混淆矩阵
机器学习笔记(二十三):算法精准率、召回率
机器学习笔记(二十二):逻辑回归中使用模型正则化
机器学习笔记(二十一):决策边界
机器学习笔记(二十):逻辑回归(2)
机器学习笔记(十九):逻辑回归
机器学习笔记(十八):模型正则化
机器学习笔记(十七):交叉验证
机器学习笔记(十六):多项式回归、拟合程度、模型泛化
长按扫描二维码关注凌云时刻
每日收获前沿技术与科技洞见
机器学习笔记(二十六):支撑向量机(SVM)相关推荐
- JVM 学习笔记二十六、JVM监控及诊断工具-GUI篇
二十六.JVM监控及诊断工具-GUI篇 1.工具概述 使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局限: (1)无法获取方法级别的分析数据,如方法间的调用关系 ...
- 机器学习笔记(十)——入门支持向量机(SVM)
一.SVM原理与模型数学推导 支持向量机,SVM(Support Vector Machine),其实就是一个线性分类器.在最初接到这个算法时,我们可能会一头雾水:这个名词好奇怪[问号脸],怎么&qu ...
- 百面机器学习 #3 经典算法:01-2 不完全线性可分(软间隔)支撑向量机SVM
文章目录 ①从原问题到对偶问题 ②对偶问题的解的形式化简 ③从对偶问题的解到原问题的解 ④从原问题的解到分离超平面.决策函数.支撑向量 假设训练数据集不是线性可分的.通常情况是,训练数据中有一些特异点 ...
- 百面机器学习 #3 经典算法:01-1 线性可分(硬间隔)支撑向量机SVM
文章目录 ①从原始问题到对偶问题 ②对偶问题的解的形式化简 ③从对偶问题的解到原问题的解 ④从原问题的解到分离超平面和决策函数.支撑向量 参考李航统计学习方法第7章. 支持向量机学习的基本想法是求解能 ...
- 吴恩达机器学习(二十六) 数据压缩与可视化、PCA
文章目录 1.数据压缩 2.数据可视化 3.PCA 1.数据压缩 降维也是一种无监督学习的方法,降维并不需要使用数据的标签. 降维的其中一个目的是数据压缩,数据压缩不仅能够压缩数据,使用较少的 ...
- Jenkins 持续集成 概念(学习笔记二十六)
持续集成:提交.测试.构建.测试.部署 前不久接触了持续集成(Continuous Integration,CI). 一.持续集成是什么 首先说说"集成"的概念.在实际的软件开发中 ...
- [傅里叶变换及其应用学习笔记] 二十六. 高维傅里叶变换的推导
高维意味着函数中有多个变量,典型的高维傅里叶应用为图像处理. 一个二维图像的亮度(灰度)可以用$f(x_1,x_2)$来表示,以lena为例,图像平面作为$x_1,x_2$平面,灰度作为$z$轴,形成 ...
- 【Visual C++】游戏开发笔记二十六 DirectX 11各组件的介绍 第一个DirectX 11 Demo的创建
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- 【Visual C++】游戏开发笔记二十六 DirectX 11各组件的介绍第一个DirectX 11 Demo的创建
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7688515 作者:毛星云 邮箱: h ...
- 【Visual C++】游戏开发笔记二十六 DirectX 11各组件的介绍第一个DirectX 11 Demo的创建...
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7688515 作者:毛星云 邮箱: happ ...
最新文章
- shell 输入输出脚本
- pm2-zabbix 安装与配置
- 基于jquery的图片懒加载js
- 去停用词 java代码_如何在java中去除中文文本的停用词
- mysql在线修改表结构大数据表的风险与解决办法归纳
- 「offer来了」从基础配置到高级配置,16大知识点带你巩固webpack知识体系
- (转)Spring Boot(七):Mybatis 多数据源最简解决方案
- 在Windows 7 (SP1)上安装Visual Studio 2015
- 使用rarcrack暴力破解RAR,ZIP,7Z压缩包
- 粉笔计算机基础知识,计算机基础知识2-实作.ppt
- 路由宽带运营商服务器未响应,宽带运营商服务器未响应解决方法
- 由于找不到MSVCR100.dll,无法继续执行代码解决方法
- 为什么P2P模式下载的人越多速度越快,为什么P2P伤害机械硬盘
- 手机创新何时不再“纸上谈兵”?
- 中国最拥挤的城市-深圳
- 西安软件园:英特尔移动通信西安有限公司
- 深大uooc学术道德与学术规范教育第九章
- php数字金字塔,探索埃及金字塔与天文以及数学的关系
- 【Spring】(1)Spring概述:什么是Spring框架?为什么要用Spring框架?
- 泰克示波器MDO3054固件升级的一种方法
热门文章
- CentOS中自定义yum仓库和配置文件
- SAP BW 例程(Routine)【开始例程、关键值或特性的例程、结束例程】
- sql server 连接
- Mybatis-学习笔记(1)SqlSessionFactory、SqlSession、Mybatis配置文件configuration的属性标签...
- 介绍一些有趣的MySQL pager命令
- iOS:面试八大陷阱
- 设计模式学习笔记——状态模式(state)
- ASP实例代码:搞个长文章分页代码
- 20191121每日一句
- 传智播客 C/C++学习笔记 一级指针易错模型分析_重点