每月学习数理统计--《统计学习方法—李航》(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 前言 之前分析的感知机.主成分分析( ...
随机推荐
- Confluence 6 数据中心的 SAML 单点登录最佳实践和故障排除
最佳实践 SAML 授权仅仅在有限的时间进行校验.你需要确定运行你的应用的计算机时间与 IdP 的时间是同步的. 如果你应用中的用户和用户组是通过用户目录进行配置的,你通常希望用户来源目录和你的 Id ...
- ionic3 git 提交报错
npm ERR! cordova-plugin-camera@ gen-docs: `jsdoc2md --template "jsdoc2md/TEMPLATE.md" &quo ...
- Android 基础 十一 Android的消息机制
Handler是Android消息机制的上层接口,这使得在开发应用过程中我们只需要和Handler交互即可.Handler的使用过程很简单,通过它可以轻松地将一个任务切换到Handler所在的线程中去 ...
- C++ Primer 笔记——基本内置类型
1.算术类型分为两类:整型和浮点型.算术类型的尺寸在不同机器上有所差别,下表列出了C++标准规定的尺寸的最小值.同时允许编译器赋予这些类型更大的尺寸. 一个char的大小和一个机器字节一样. 一个in ...
- 微信小程序 Video默认横屏
wxml文件 <video id='myvideo' src='你的视频文件路径'> </video> js文件 onLoad: function (options) { va ...
- 用 DocumentFormat.OpenXml 和Microsoft.Office.Interop.Word 写入或者读取word文件
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- HDU 1166 敌兵布阵(线段树/树状数组模板题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- D.Starry的神奇魔法(矩阵快速幂)
/*D: Starry的神奇魔法 Time Limit: 1 s Memory Limit: 128 MB Submit My Status Problem Description ...
- AspNetCore MVC + Vue.Js 项目搭建
1.准备 全文重点在于搭建环境,其他相关知识点请百度. VS2017 升级到最新的版本 安装 net core 2.0 安装 npm (npm相关使用请百度或咨询前端小伙伴) 全局安装 webpack ...
- sinoces 2013 消费电子
转眼距离上次看消费电子(http://www.cnblogs.com/sun8134/archive/2012/07/08/2581997.html)又过了一年 也到了今年的消费电子展… 结果一天小雨 ...