目录

什么是支持向量机(SVM)

引例

假定有训练数据集

,其中,x是向量,y=+1或-1。试学习一个SVM模型。

分析:将线性可分数据集区分开的超平面有无数个,但是SVM要做的是求解一个最优的超平面,最优意味着模型的泛化能力越强,具体做法就是选择使间隔最大的超平面。在图中可以看出黑色超平面优于红色超平面。红色圈内的样本就是支持向量,仅依靠支持向量就可以确定分割平面的位置。

李航《统计学习方法》中的定义

SVM是一种二类分类模型.它的基支持向量机(support vector machines,本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机; 支持向量机还包括核技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划(convexquadratic programming) 的问题,也等价于正则化的合页损失函数的最小化问题.支持向量机的学习算法是求解凸二次规划的最优化算法。

线性可分数据集的分类

给定训练数据集其中,x是向量,y=+1或-1。再假设训练数据集是线性可分的。试学习一个SVM模型。

第一步:

假设超平面为

第二步:

构造并求解线性可分情况的最优化问题:

可转化成:

求解这个凸二次规划问题,可以得到唯一的

第三步:

得到分离超平面:

第四步:

得到分类决策函数:

通过一个例子展示求解过程:(摘自李航《统计学习方法》)

线性可分数据集的分类(对偶形式)

以上是求解原始形式的最优化问题,其实,还有一种对偶形式,使用对偶形式求解具有的优点是:

一、对偶形式更容易求解;

二、自然引入核函数,进而推广到非线性分类问题。

最优化问题转化到对偶形式的主要步骤是:构建拉格朗日函数然后求极值。

第一步:

假设超平面为

第二步:

将线性可分的最优化问题:

转化成线性可分的最优化问题的对偶形式:

对于这种带约束求极值的问题,可以使用拉格朗日乘子法,可以求得

,其中

对应于训练集中的实例点就是支持向量。

第三步:

得到分离超平面:

其中

是唯一的,任取一个作为支持向量的实例点

,则可以算出

第四步:

得到分类决策函数:

通过一个例子展示求解过程:(摘自李航《统计学习方法》)

线性近似可分数据集的分类

给定训练数据集其中,x是向量,y=+1或-1。再假设训练数据集是线性近似可分的。试学习一个SVM模型。

分析:线性近似可分意味着某些样本点不能满足

为了解决这个问题,可以对每个样本点

引进一个松弛变量

,使所有样本点满足

那么,如何求解这个间隔最大的超平面呢?

第一步:

假设超平面为

第二步:

将线性可分情况下的最优化问题:

转化为线性近似可分情况下的最优化问题:

这个目标函数的含义:使间隔尽量大,同时使误分类的个数尽量小。C是一个惩罚参数,是调和二者的系数。C越大,分类器将力图通过分割超平面对所有的样例都正确分类。

求解这个凸二次规划问题,可以得到

,可以证明

是唯一的,而

存在于一个区间。

第三步:

得到分离超平面:

第四步:

得到分类决策函数:

线性近似可分数据集的分类(对偶形式)

第一步:

假设超平面为

第二步:

将线性近似可分情况下的最优化问题:

转化为线性近似可分情况下的最优化问题的对偶形式:

对于这种带约束求极值的问题,可以使用拉格朗日乘子法,可以求得

,其中

对应于训练集中的实例点就是落在间隔边界上的支持向量。

第三步:

得到分离超平面:

其中

是不唯一的,一般求它的方法是:取每一个间隔边界上的支持向量实例点

,算出

后取均值。

第四步:

得到分类决策函数:

非线性数据集的分类

给定训练数据集其中,x是向量,y=+1或-1。再假设训练数据集是非线性的。试学习一个SVM模型。

对于线性不可分的数据集,无法在原始空间上找到分离平面,所以要将原始数据映射到更高的维度,并找到一个间隔最大的超平面。

那么,如何求解这个间隔最大的超平面呢?

其实求解的关键就在于将数据映射到高维的空间,然后在高维的空间寻找最优分割超平面。

第一步:

假设超平面为

第二步:

将线性近似可分情况下的最优化问题的对偶形式:

中的维度增加(将原始的维度空间映射到高维空间):

比如:在原始空间上样本

的特征是d+1维的,映射到高维空间 (d*d+1维)变成:

(思想:既然我在原始空间找不到超平面,不妨去高维空间寻找)

在高维空间使用线性支持向量机求间隔最大的分离超平面。这样做可以成功,但是计算复杂度会急增,因为增加了训练的难度。如何解决呢?

这里引入核函数,核函数的作用就是:通过一种“偷吃步”的技巧,让我们能够在高维空间求解,而且还能将计算复杂度降下来。下面看一下核函数是如何工作的。

对于这种带约束求极值的问题,可以使用拉格朗日乘子法,可以求得

,其中

对应于训练集中的实例点就是落在间隔边界上的支持向量。

第三步:

得到分离超平面(求解过程与线性近似可分的情况相同,Ns是支持向量个数):

第四步:

得到分类决策函数:

有了核函数,就无需人为的去定义

了,那么核函数的选择有哪些讲究呢? 其实,在实际应用中,往往依赖领域知识选择核函数,核函数的选择的有效性需要通过实验验证。 下面介绍常用的核函数,以及他们的优缺点。

SMO算法

支持向量机的学习关键在于求解凸二次规划,这样的凸二次规划问题具有全局最优解。但是当训练样本很多时,需要一种高效的实现算法,SMO算法就是一种主流的高效的算法。 SMO算法要解决如下凸二次规划的对偶问题:

在这个问题里,变量是拉格朗日乘子,一个变量

对应一个样本点;变量的总数等于训练样本容量N。SMO的特点是不断地将原二次规划问题分解为只有两个变量的二次规划子问题,并对子问题进行解析求解,也就是每一步确定2个

直到求完所有

为止。子问题求解是快速的,即使有很多这样的子问题,SMO的求解也是高效的。

合页损失函数

对于线性支持向量机学习来说,其模型为分离超平面

及决策函数

,其学习策略为软间隔最大化,学习算法为凸二次规划。

线性支持向量机还有另一种解释,就是最小化以下目标函数:

目标函数的第1项是经验损失,函数

称为合页损失函数。下标“+”表示若值非正就为0;若为正就为其本身。这就是说,当样本点

被正确分类且函数间隔(确定度)

大于1时,损失是0,否则是

目标函数的第2项是系数为

的L2范数,是正则化项,防止过拟合的。

定理:线性支持向量机原始最优化问题:

等价于最优化问题:

证明(摘自李航《统计学习方法》):

合页损失函数的图形为:

Python代码(sklearn库)

待续...

python支持向量机模型_【Spark机器学习速成宝典】模型篇08支持向量机【SVM】(Python版)...相关推荐

  1. python贝叶斯模型_【机器学习速成宝典】模型篇05朴素贝叶斯【Naive Bayes】(Python版)...

    目录 先验概率与后验概率 条件概率公式.全概率公式.贝叶斯公式 什么是朴素贝叶斯(Naive Bayes) 拉普拉斯平滑(Laplace Smoothing) 应用:遇到连续变量怎么办?(多项式分布, ...

  2. python print rdd_【Spark机器学习速成宝典】基础篇02RDD常见的操作(Python版)

    #-*-coding=utf-8 -*- from pyspark importSparkConf, SparkContext sc= SparkContext('local')#map(func): ...

  3. 【Spark机器学习速成宝典】推荐引擎——协同过滤

    目录 推荐模型的分类 ALS交替最小二乘算法:显式矩阵分解 Spark Python代码:显式矩阵分解 ALS交替最小二乘算法:隐式矩阵分解 Spark Python代码:隐式矩阵分解 推荐模型的分类 ...

  4. 【Spark机器学习速成宝典】模型篇01支持向量机【SVM】(Python版)

    目录 支持向量机原理 支持向量机代码(Spark Python) 支持向量机原理 详见博文:http://www.cnblogs.com/itmorn/p/8011587.html 返回目录 支持向量 ...

  5. 【Spark机器学习速成宝典】模型篇08保序回归【Isotonic Regression】(Python版)

    目录 保序回归原理 保序回归代码(Spark Python) 保序回归原理 待续... 返回目录 保序回归代码(Spark Python) 代码里数据:https://pan.baidu.com/s/ ...

  6. python速成版_【Spark机器学习速成宝典】基础篇04数据类型(Python版)

    目录 Vector 一个数学向量.MLlib 既支持稠密向量也支持稀疏向量,前者表示向量的每一位都存储下来,后者则只存储非零位以节约空间.后面会简单讨论不同种类的向量.向量可以通过mllib.lina ...

  7. logistic回归模型python_【机器学习速成宝典】模型篇03逻辑斯谛回归【Logistic回归】(Python版)...

    目录 一元线性回归.多元线性回归.Logistic回归.广义线性回归.非线性回归的关系 什么是极大似然估计 逻辑斯谛回归(Logistic回归) 多类分类Logistic回归 Python代码(skl ...

  8. python多进程编程_【玩树莓】编程篇(八)Python多线程、多进程编程

    1.多任务编程 除了计算性能和图形显示以外,树莓派区别于Arduino的一大特点就是运行多任务操作系统.通过多任务系统用户可以同时执行多个互相独立的程序(任务),来完成不同的操作. 利用Python的 ...

  9. 【机器学习速成宝典】模型篇02线性回归【LR】(Python版)

    目录 什么是线性回归 最小二乘法 一元线性回归 多元线性回归 什么是规范化 Python代码(sklearn库) 什么是线性回归(Linear regression) 引例 假设某地区租房价格只与房屋 ...

最新文章

  1. 【译】function.caller 被认为是有害的
  2. 微软可能是全球最大的开源贡献者,但开发者似乎并不买账​​​​​​​
  3. Linux服务配置:Vsftp的基本配置[转]
  4. 洛谷——P1012 拼数
  5. 云端一体化差分+安全升级,AliOS Things物联网升级“利器”
  6. Linux idle基础
  7. 去重 属性_Javascript算法 — 数组去重
  8. 我想我是适合独处的人
  9. 微信小程序云开发教程-JavaScript入门(2)-变量定义
  10. 大数据自学全套教程,免费分享,赶紧码起来!(纯干货系列)
  11. linux与ipad传输文件,实用!三种iPhone与Windows电脑互传文件操作技巧,建议收藏...
  12. 2023年全国最新工会考试精选真题及答案37
  13. android.hardware.Camera 5.1之后操作照相机是不是不能用啦,我用小米手机(基本android 6.0)
  14. 第7章第24节:双图排版:两张图片的一大一小对比排版 [PowerPoint精美幻灯片实战教程]
  15. CPU指令的流水线执行
  16. python怎么加载图片png图片位置_Python添加png图片出现的问题和解决
  17. 深眸分享——机器视觉光源基础知识
  18. Git git config 配置使用
  19. 智慧城市UE4 奥特曼教程
  20. Java项目如何接入钉钉群机器人

热门文章

  1. 如何在CentOS7上创建Kubernetes k8s集群
  2. listlength函数头文件_酷町问答 - 我们编程时,通常要用到哪些头文件,包含什么函数...
  3. MetaIn中poi点在智慧城市的运用
  4. 【20210713】【机器/深度学习】Python SVM模型学习笔记
  5. ubuntu下如何批量修改文件后缀名
  6. 群晖DS918+ 二合一 分区扩充教程
  7. mybatisPlus 实体类与数据库表映射关系
  8. 浅谈Flutter跨平台调用方式MethodChannel
  9. java实验指导_《JAVA程序设计》实验指导书(完整).pdf
  10. SoO of EIGRP