每月学习数理统计--《统计学习方法—李航》(3): SVM
1. SVM的最优化问题
支持向量机(Support Vector Machine, SVM)的基本模型是在特征空间上找到最佳的分离超平面使得训练集上正负样本间隔最大。SVM是用来解决二分类问题的有监督学习算法,在引入了核方法之后SVM也可以用来解决非线性问题。
一般SVM有下面三种:
硬间隔支持向量机(线性可分支持向量机):当训练数据线性可分时,可通过硬间隔最大化学得一个线性可分支持向量机。
软间隔支持向量机:当训练数据近似线性可分时,可通过软间隔最大化学得一个线性支持向量机。
非线性支持向量机:当训练数据线性不可分时,可通过核方法以及软间隔最大化学得一个非线性支持向量机
在SVM中,我需要的是找到一个超平面,定义几何间隔M定义为:
其中
那么我们要做的就是找到最大间隔,又因为
所以在最大间隔中,即
所以我们的问题就变成
即
为什么我们要费这么⼤的劲去重写这个问题?因为原始的最优化问题很难解,作为替代,我们现在有凸⼆次函数最优化问题,虽然它平淡⽆奇,但是⾮常容易解。
2. 凸优化问题的解法
1. 拉格朗日乘数法
我们求最优解问题:
即我们找最小值就是在同一个方向的梯度点符合条件,也就是求出
通常我们称a为拉格朗日乘子。
拉格朗⽇乘数法能总结为以下三步:
- 1.通过每⼀个带乘⼦的约束条件来构造拉格朗⽇函数
- 2.给出拉格朗⽇函数的梯度
- 3.解函L(x, a)=0
所以通过我们列出的条件便可以写出拉格朗日函数
2. 对偶问题
我们在列出拉格朗日函数后,我们发现优化 就是优化我们的拉格朗日函数,约束条件就是
,所以我们的目标函数可以表示为
也就是
所以我们先求w和b的最小值,求这个最小值演化为L的偏导数中求w和b:
因此我们发现
同时考虑 那么我们可以写出我们的式子
所以我们的问题演化为一个对偶问题
上式可知我们并不关心单个样本是如何的,我们只关心样本间两两的乘积,这也为后面核方法提供了很大的便利。
求解出α之后,再求解出w和b即可得到SVM决策模型。
实际上,我在学习其他书本后发现了一个很重要的地方,就是这个$\alpha $实际上是点与点的权重,那么这里面就隐藏着一个很重要的东西,就是:离SVM vector越远的点,他的权重就越小,虽然这句话很直观,而且很朴实,但是实际上这里面蕴藏着很多的调试方法与对SVM的理解。希望大家在使用SVM的时候要记住这一点。
3. KKT条件(Karush-Kuhn-Tucker)
所谓KKT条件,就是如果一个解法满足KKT条件,那么这个解法就是一个最优解法(是不是特别神奇!)那么这个KKT条件必须满足以下四条:
- 稳定条件 (L函数在w的梯度为0,在b处的梯度也为0)
- 原可行条件
- 对偶可行条件
- 互补松弛条件
如果αi=0则由式(15)可知该样本点对求解最佳超平面没有任何影响。当αi>0时必有,表明对应的样本点在最大间隔边界上,即对应着支持向量。也由此得出了SVM的一个重要性质:训练完成之后,大部分的训练样本都不需要保留,最终的模型仅与支持向量有关[2]。 从另一个角度,如果SVM的超平面主要与支持向量有关,同时大多数的
均为0。
同时,我们知道了,最终问题我们便是求解,只要我们将
求解出来,那么我们的w与b也就求解出来了。这里有两种方法求解
,QP法与SMO方法。
3. 软间隔支持向量机
这里有一个很严重的问题,我们之前讲的问题,就必须要求数据集是可分的,而实际上,数据经常会出现又异常情况出现,通常来说,这些数据异常通常接近分类边界,如下图所示,只有一个数据异常,却破坏了线性可分。
对于这种情况,我们使用软边界,目的不是做到0错误,而是允许少量的错误
参数C让我们控制如何让SVM来处理错误。让我们举例说明如何去改变它的值来 得到不同的超平⾯
4. 非线性支持向量机
我们知道,有很多情况下,许多数据集都是不可分的,他们的分布是非常复杂,我们可以在直接处理这些数据集之前,对数据集做一些变换,目的是为了将数据集分布改变,一个合适的变化,可以将一个数据集变得非常简单可分,同时满足需求。我们知道,在对偶问题中,
点积实际上可以用其他算法替代,本质上来说,我们是重新定义内积,因为内积只要满足 正定,双线性那三个性质即可,那么我们在求解内积的时候,便可以对数据集实现变换,让其变得可分。一般来说,我们使用的是标准内积。
通常来说,我们使用不同的核,就是使用不同的内积,包括高斯核,RBF核,多项式核,线性核,他们无非是实现了广度,深度的增加,或者是是对原数据集做线性变换。本质上还是不同的内积,所以非线性支持向量机是非常简单的。
5. SMO算法
通常来说,我们有很多成熟的软件包来实现SVM,但是那样的解法是没有灵魂了。当然了,这个部分我也没有理解的太深刻,所以并不敢写出来,所以我只能分享一个博主写的有关SMO的算法的文章,希望大家能多看看,等我完全搞懂了以后我便会重新写出来。这一篇我认为是写的最为详细的文章了:https://blog.csdn.net/jesmine_gu/article/details/84024702
每月学习数理统计--《统计学习方法—李航》(3): SVM的更多相关文章
- Adaboost算法的一个简单实现——基于《统计学习方法(李航)》第八章
最近阅读了李航的<统计学习方法(第二版)>,对AdaBoost算法进行了学习. 在第八章的8.1.3小节中,举了一个具体的算法计算实例.美中不足的是书上只给出了数值解,这里用代码将它实现一 ...
- 统计学习方法:支撑向量机(SVM)
作者:桂. 时间:2017-05-13 21:52:14 链接:http://www.cnblogs.com/xingshansi/p/6850684.html 前言 主要记录SVM的相关知识,参考 ...
- 统计学习方法—SVM推导
目录 SVM 1. 定义 1.1 函数间隔和几何间隔 1.2 间隔最大化 2. 线性可分SVM 2.1 对偶问题 2.2 序列最小最优算法(SMO) 3. 线性不可分SVM 3.1 松弛变量 3.2 ...
- 统计学习方法学习(四)--KNN及kd树的java实现
K近邻法 1基本概念 K近邻法,是一种基本分类和回归规则.根据已有的训练数据集(含有标签),对于新的实例,根据其最近的k个近邻的类别,通过多数表决的方式进行预测. 2模型相关 2.1 距离的度量方式 ...
- 李航《统计学习方法》CH01
CH01 统计学方法概论 前言 章节目录 统计学习 监督学习 基本概念 问题的形式化 统计学习三要素 模型 策略 算法 模型评估与模型选择 训练误差与测试误差 过拟合与模型选择 正则化与交叉验证 正则 ...
- 统计学习方法c++实现之六 支持向量机(SVM)及SMO算法
前言 支持向量机(SVM)是一种很重要的机器学习分类算法,本身是一种线性分类算法,但是由于加入了核技巧,使得SVM也可以进行非线性数据的分类:SVM本来是一种二分类分类器,但是可以扩展到多分类,本篇不 ...
- R学习:《机器学习与数据科学基于R的统计学习方法》中文PDF+代码
当前,机器学习和数据科学都是很重要和热门的相关学科,需要深入地研究学习才能精通. <机器学习与数据科学基于R的统计学习方法>试图指导读者掌握如何完成涉及机器学习的数据科学项目.为数据科学家 ...
- 统计学习方法(李航)朴素贝叶斯python实现
朴素贝叶斯法 首先训练朴素贝叶斯模型,对应算法4.1(1),分别计算先验概率及条件概率,分别存在字典priorP和condP中(初始化函数中定义).其中,计算一个向量各元素频率的操作反复出现,定义为c ...
- 统计学习方法:核函数(Kernel function)
作者:桂. 时间:2017-04-26 12:17:42 链接:http://www.cnblogs.com/xingshansi/p/6767980.html 前言 之前分析的感知机.主成分分析( ...
随机推荐
- 关于deepin linux15.6-15.9.1系统播放视频卡顿解决办法
关于deepin linux15.6-15.9.1系统播放视频卡顿解决办法 chrome浏览器 关闭chrome硬件加速模式 设置>高级>使用硬件加速模式 注释:由于视频卡顿是因显卡驱动问 ...
- redis客户端、分布式锁及数据一致性
Redis Java客户端有很多的开源产品比如Redission.Jedis.lettuce等. Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持:Redis ...
- 深入分析Zookeeper的实现原理
zookeeper 的由来 分布式系统的很多难题,都是由于缺少协调机制造成的.在分布式协调这块做得比较好的,有 Google 的 Chubby 以及 Apache 的 Zookeeper.Google ...
- 【linux】复制文件夹内容到另一个文件夹
我一直觉得cp是个非常简单的指令.结果居然遇到坑了.记录一下. 文件夹1:test1/ 文件夹2:test2/ 目标:将test1/中的所有文件和目录拷贝到test2/中 正确指令: cp -rf t ...
- ERROR 1045 (28000): Access denied for user 'mysql'@'localhost' (using password: YES
一.有时可以直接输入命令: mysql进入数据库 启动数据库:# mysqld_safe & 二.查看用户命令: mysql> use mysql; Reading table info ...
- 攻击WordPress和其他程序
1.SAAS服务(Software as a Service )管理其他作为内容管理的一个人框架的软件,http://www.turnkeylinx.org 上发布了很多测试应用的程序.WordPre ...
- bzoj1912 树形dp求直径(新写法),求直径的两端点
通过回溯法可以求出直径的两个端点,同时注意有负权边的树求直径不可以用两次dfs来求,而必须用dp做 /* 分情况讨论问题 一条边也不加的情况,显然每条边要扫描两次, 该情况的答案是2(n-1) 只加一 ...
- CF1005F
这题不错... 首先,不难看到他想让你求出的是最短路树 然后,考虑到所有边权均为1,所以可以采用bfs直接生成最短路树 至于方案的储存,可以在加边的时候同时记录边的编号,然后对每个点维护一个能转移他的 ...
- 论文阅读笔记三十五:R-FCN:Object Detection via Region-based Fully Convolutional Networks(CVPR2016)
论文源址:https://arxiv.org/abs/1605.06409 开源代码:https://github.com/PureDiors/pytorch_RFCN 摘要 提出了基于区域的全卷积网 ...
- 常见的爬虫分析库(4)-爬虫之PyQuery
PyQuery 是 Python 仿照 jQuery 的严格实现.语法与 jQuery 几乎完全相同. 官方文档:http://pyquery.readthedocs.io/ 安装 1 pip ins ...