支持向量机(SVM)

简介: SVM是有监督学习、属于判别模型(决策函数),非线性,有预测函数,有优化目标,有求解算法(SMO

SVM有监督学习、属于判别模型(决策函数),非线性,有预测函数,有优化目标,有求解算法(SMO)

支持向量机(Support Vector Machine, SVM)的基本模型是在特征空间上找到最佳的分离超平面使得训练集正负样本间隔最大。SVM是用来解决二分类问题的有监督学习算法,在引入了核方法之后SVM也可以用来解决非线性问题。

一般SVM有下面三种:

硬间隔支持向量机(线性可分支持向量机):当训练数据线性可分时,可通过硬间隔最大化学得一个线性可分支持向量机。

软间隔支持向量机:当训练数据近似线性可分时,可通过软间隔最大化学得一个线性支持向量机。

非线性支持向量机:当训练数据线性不可分时,可通过核方法以及软间隔最大化学得一个非线性支持向量机。

三个要素:模型(从数据和目的构建出的决策函数或概率分布)、策略(构造优化目标)、算法(求解优化目标的方法)

针对线性可分的情况:

1、模型:也就是需要学习的决策函数由以下可知:

523a0aa447408330f7ad92a9f71adedf_20190305105858657.png

92db525709d1565b564cc39ad31daaec_2019030510513873.png

2、核心是在已有数据的基础上如何找到最佳的决策函数?

也可表述为:分类学习最基本的想法就是基于训练集D在特征空间中找到一个最佳划分超平面将正负样本分开,而SVM算法解决的就是如何找到最佳超平面的问题

其中的超平面为:

47cde6addbdc7dfd7460849652cf5786_20190305105523781.png

如何得出最佳的超平面?也就是求解出w和b

为了找到优化的目标,也即是最小的损失函数:

引用下图说明:

5f3c6b25be0694986bdc5d02239a528d_70.jpg

问题表述:

对于一部分的样本点到超平面的的距离分类,大于1的为正类,小于-1的为负类(为1的原因是通过等比缩放可以得到,为了问题的简化)

2741260a8c4561ad6951468bce85edce_20190305110925819.png

那么样本点到超平面距离为1的样本点称为支持向量,正负距离为1的样本点距离超平面所构成的间隔结合点到平面的距离公式参考https://www.cnblogs.com/graphics/archive/2010/07/10/1774809.html

0b0f5fdf57aea8f4064569a60810902e_20190305111531541.png

因此可得出正负样本点距离超平面的和(定义为间隔)如下式因此求解最佳超平面的抽象问题进一步转化为求解间隔最大化

c6dbba9533db7d2d3d461e55e065f21e_20190305111705432.png

将如下的公式代入上式:

704e03eb408c6090a01c64f5f3f2c5b6_20190305112045115.png

那么间隔表示为 :

a9032113553157f488b94a6bf7b22a14_20190305112157442.png

求解间隔最大化问题(优化目标)进一步表示为:

e2456d181de2aa62e33b81d13d3142fb_20190305112314111.png

或者(1):

d5048524af48b5db94f261a61287414e_20190305112452334.png

下面进入优化目标的进一步转化:

将引入拉格朗日乘子法和KTT条件(具体可参考:深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件https://blog.csdn.net/lijil168/article/details/69395023

基本的拉格朗日乘子法(又称为拉格朗日乘数法),就是求函数f(x1,x2,...)在g(x1,x2,...)=0的约束条件下的极值的方法。其主要思想是引入一个新的参数λ(即拉格朗日乘子),将约束条件函数与原函数联系到一起,使能配成与变量数量相等的等式方程,从而求出得到原函数极值的各个变量的解。

拉格朗日构造如下:

5ebb79e10c17d6fe82ea28cab25819a9_20190305114857900.png

求偏导:

88b3dab03dec2bfd7ecd613bf88483a8_20190305114944835.png

并将结果代入上式得:

对比(1)式多了一个不等式的约束项,是由于构造拉格朗日乘子时引入的

7e556cb4930b1b5943d886492a7fd663_20190305115104388.png

最终求解的决策模型为:

0b795672045592e3330cc300a62ad069_20190305115308775.png

注意要考虑原有优化问题的不等式约束,为此还需引入KTT约束条件:

585d14517e3b1f5f22728d01809dd8c2_20190305120310585.png

有了优化目标,

7e556cb4930b1b5943d886492a7fd663_20190305115104388.png

cb835c33264815e9167e24d768620c81_20190305120611286.png

3、下面将展示的是求解优化目标的优化算法:

SMO算法:

1a90bc5882cb86501e90b45a2c8ee00d_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hlZGEz,size_16,color_FFFFFF,t_70.png

注意的是:KTT条件违背的程度越大,那么变量更新后可能导致目标函数的减幅越大。

因此两个变量的选择条件是1)选择违背KTT条件最大的变量 2)选择使得目标函数减幅最大的变量

针对训练数据非线性可分时:

也即是通过一个超平面无法将样本正确分类;为此需要将数据样本空间映射到更高维度的特征空间,使得样本在这个特征空间中线性可分。

推导求解优化目标时需要求解特征函数的内积,为此引入核函数来替代,避免了高维特征空间内积计算复杂的问题。

是实际的情况是特征函数无法确定,因此核函数也无法确定(通过特征函数可以直接计算出核函数)

由定理可知:任何一个核函数隐式定义了一个再生希尔伯特空间

因此通过选择核函数,来确定特征函数

9e86639b93752373dce96ddb4e866423_20190305131615103.png

其中核函数的选择:

50b2e31d475fc05e4264c73b78dac78e_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hlZGEz,size_16,color_FFFFFF,t_70.png

新的核函数可以通过组合来构造:

1)线性组合

2)核函数的乘积

3)乘以任意的函数构造

该模型的优缺点:

优点:

SVM在中小量样本规模的时候容易得到数据和特征之间的非线性关系,可以避免使用神经网络结构选择和局部极小值问题,可解释性强,可以解决高维问题。

缺点:

SVM对缺失数据敏感,对非线性问题没有通用的解决方案,核函数的正确选择不容易,计算复杂度高,主流的算法可以达到O(n2)的复杂度,这对大规模的数据是吃不消的。

参考:https://blog.csdn.net/liugan528/article/details/79448379 

不错的博客:

【1】SVM基础讲解有公式推导,不够详细https://blog.csdn.net/liugan528/article/details/79448379

【2】python中支持向量机的使用方法 http://sklearn.apachecn.org/#/docs/5?id=scores-probabilities

【3】kasci讲解视频https://www.bilibili.com/video/av35363386/?spm_id_from=333.788.videocard.0

【4】机器学习面试之有必要手推SVM吗 https://www.jianshu.com/p/f4c7bc6c4ce2  

【5】SVM https://blog.csdn.net/liugan528/article/details/79448379  






目录
相关文章
|
Docker 容器
Minio Docker安装官方指南
Minio Docker安装官方指南
Minio Docker安装官方指南
|
关系型数据库 数据库 PostgreSQL
PG源码分析系列:内存上下文
title: Pgsql源码分析——内存上下文 date: 2018-05-01 22:00:00 categories: - Postgresql - PgSource Postgresql内存上下文源码分析 1 数据库内存上下文   postgresql在7.1版本引入了内存上下文机制来解决日益严重的内存泄漏的问题,在引入了这种“
1908 1
|
XML Java Maven
jar包导入到项目中、本地maven仓库、私库
jar包导入到项目中、本地maven仓库、私库
2901 0
jar包导入到项目中、本地maven仓库、私库
|
机器学习/深度学习 自然语言处理 监控
自然语言处理技术有哪些
【7月更文挑战第30天】自然语言处理技术有哪些
1020 10
|
8月前
|
安全 数据安全/隐私保护
DzzOffice:太完美啦,开源免费Word、Exce、PPT,多人同时协作,最主要还有免费的网盘,将这个项目集成到你的产品里面,项目立刻拥有整套offce解决方案
嗨,大家好,我是小华同学。DzzOffice是一个免费开源的企业协同办公平台,适合中小型企业及团队使用,功能涵盖网盘、文档、表格、演示文稿等,支持企业微信和钉钉移动办公,保障数据私有部署安全。 关注我们,获取更多优质开源项目和高效工作学习方法。
1230 5
|
SQL 机器学习/深度学习 自然语言处理
Text-to-SQL技术演进 - 阿里云OpenSearch-SQL在BIRD榜单夺冠方法剖析
本文主要介绍了阿里云OpenSearch在Text-to-SQL任务中的最新进展和技术细节。
|
移动开发 JavaScript 网络协议
SpringBoot:Netty-SocketIO + VUE:SocketIO实现前后端实时双向通信
SpringBoot:Netty-SocketIO + VUE:SocketIO实现前后端实时双向通信
726 0
|
自然语言处理
掩码语言模型(MLM)
掩码语言模型(MLM)
|
关系型数据库 MySQL 数据安全/隐私保护
Navicat连接mysql8报错解决:1251- Client does not support authentication protocol requested by server
Navicat连接mysql8报错解决:1251- Client does not support authentication protocol requested by server
3314 0
|
小程序 前端开发 IDE
【经验分享】支付宝小程序订阅消息功能实操(前端篇)|江海计划
【经验分享】支付宝小程序订阅消息功能实操(前端篇)|江海计划
1205 7