首先区分一对概念:

线性可分:存在一条直线或一个平面超平面,可以将样本集分开。

非线性可分:不存在......

这里我们假设中间那条直线的方程为:

权重(weight)

偏置(bias)

值得注意的是:在直线的两侧,直线方程分别 大于零小于零 ,这个规定可以是人为的。

接着用数学严格定义训练样本以及他们的标签:

假设:有个样本和他们的标签。

其中

规定:如果  ,则  反之,

线性可分的严格定义:

一个训练样本集线性可分,是指存在,使得对,有:

(1)若,则

(2)若,则

我们也可以用向量的方式定义线性可分:

假设:则:

(1)若,则

(2)若,则

进一步我们可以化简为如下形式:

如果  就取  那么一个训练样本集,在线性可分,是指:

存在,使得对,有:

思考题:

(1)能否给出实际生活中,训练样本集是线性可分和不可分的例子?大多数实际生活中的例子是线性可分还是线性不可分?

(2)请对类别数大于2的情况,给出线性可分与线性不可分的严格数学定义。

(3)请通过数学定义严格证明:在二分类情况下,如果一个数据集是线性可分的,那么一定存在无数多个超平面将这两个类别完全分开。


Vladimir Vapnik提出的支持向量机算法分成如下两个步骤:

一、解决线性可分问题;

二、再将线性可分问题中,获得的结论推广到线性不可分的情况

首先解决线性可分问题,对于那无数多个分开各个类别的超平面中,到底哪一个是最好的呢?

结合没有免费午餐定理,我们需要对为什么2号线最好的做出一定的假设(这种假设可以有很多种):假设训练样本的位置在特征空间上有测量误差,如图:

如果为1号线,则会导致分类错误。而二号线依旧能分类正确。换言之,二号线更能抵御训练样本位置的误差。接下来是个关键的问题,二号线是怎么画出来的?

基于最优化理论,对于任何一条分开圆圈和叉的直线,把这条直线朝一侧平行地移动,直到插到一个或几个训练样本为止,同时也朝另外一侧相同做法,如图所示:

定义那两条直线为数据集的支持向量(support vector),而在其余样本上的平行直线称为:非支持向量把平行线之间地距离称为间隔(margin)。而我们想要求得的二号线是使间隔最大的线。为了使找到的线唯一,还需让这条线在上下两个平行线的中间

总而言之,支持向量机寻找最优分类直线应满足:

(1)该直线分开了两类。

(2)该直线最大化间隔。

(3)该支线处于间隔的中间,到所有支持向量的距离相等。

思考题:证明:在线性可分的条件下,有且只有唯一一条直线满足上面三个条件。

以下用严格的数学,把支持向量机,寻找最优分类超平面的问题写成一个最优化问题:

目标:最小化Minimize):

限制条件

可以看出来 是个凸优化问题( Convex Optimization )中的二次规划问题

二次规划的定义:

(1)目标函数(Objective Function)是二次项。

(2)限制条件是一次项。

凸优化问题要么无解,要么只有唯一的最小值。

——在实际当中,如果一个问题是凸优化问题,那么我们会把它当成一个已经解决的问题,

因为凸优化问题只有唯一的一个全局极值。我们可以应用梯度下降的算法,可以很方便求得它的解。

求解凸优化问题是一门专门的课程。

这里需要注意的是,已知:训练样本集      待求:

想要推出以上式子,需要知道以下事实:

事实1 与  是同一个超平面 

事实2:一个点到超平面的距离

基于事实1,我们可以用  去缩放    :

最终使在支持向量  上有:

而在支持向量外侧,非支持向量上有:

从而有了限制条件 (其中: 是为了协调超平面的左右。)

值得注意的是如果把上式的  改成 ,那么 会比原来相差一个  ,仍代表同一个平面。

根据事实2,支持向量  到超平面的距离将会变为

最大化支持向量到超平面的距离 等价于 最小化 ,为了后续求导会更加方便,

把优化问题定为:最小化 

思考题:支持向量机的限制条件如果从大于1变成大于等于2,则(w,b)会变成(aw,ab),如果Xi和w都是M维的向量,那么算出a是多少?——我猜是2.


如果训练样本集是线性不可分的,那么以上优化问题的解是什么呢?

显然无解,这时需要适当地放松限制条件,使上面的最优化问题变得有解。

思路:设置松弛变量 (slack variable)

限制条件改写为:

当然我们还应该加入新的限制使每一个 能够尽量小。

改造后的支持向量机优化版本:

目标:最小化Minimize): 或者  

 限制条件

——比例因子C起到了平衡两项的关键作用,是人为设定的,我们把认为事先设定的参数叫做算法的超参数(Hyper Parameter)

一般在实际应用中,会不断变化C的值,同时测试算法的识别率,再选取合适的超参数C。

支持向量机是超参数很少的算法模型。

以下是求得的结果,显然未达到求解的目的。那么问题出在哪里呢?

问题在于:我们的算法模型是线性的,即我们假设分开两类的函数是线性的,但是线性模型的表现力是不够的。因此我们只有扩大可选的函数范围,使它超越线性,才有可能应对各种复杂的线性不可分场景。

思考题:对于上图,需要有一个椭圆,来分开圆圈和叉,另一个方面,我们也可以对特征空间的两个维度x1和x2做某种非线性变换从而把本来线性不可分的线性样本集变为线性可分。这个变换如何设计?


支持向量机在扩大函数可选范围方面可谓独树一帜:

神经网络采取的是多层的非线性函数的组合的方式,而支持向量机的做法则是通过特征空间由低维映射到高维,然后在高位的特征空间当中仍然用线性超平面对数据进行分类

映射函数:   

例如:

原本线性不可分的数据集变成了线性可分。

一般结论:

假设在一个M维空间上随机取N个训练样本,随机的对每一个训练样本赋予标签+1或-1,同时假设这些训练样本线性可分的概率为P(M)则有当M趋于无穷大时,P(M)=1.

将训练数据从低维映射到高维,会增大线性可分的概率。

其实很好理解,当我们增加特征空间的维度时,待估参数(w,b)的维度也增加。即整个算法模型的自由度增加。当然就更有可能分开低维时候无法分开的数据集。

如何构造 就成了一个关键性的问题。这里先假设 已经确定,那么原先的优化问题只需改变一点点:

 目标:最小化Minimize): 或者   

 限制条件      ( 的维度与  相同)

我们仍然可用凸优化理论求解。


为了具体研究的形式,我们引入核函数:

理念是这样的:我们可以不用知道的具体形式,取而代之,如果对任意两个向量X1和X2.

我们知道 那么我们仍然能够通过一些技巧获得一个测试样本的类别信息,从而完成对测试样本类别的预测。在这里我们定义核函数(Kernel Function

并且结果是一个实数。核函数和映射 是一一对应的关系。

——需要指出的是核函数的形式不能随意的取。需要满足一定的条件才能分解为两个内积的形式。

能写成的充要条件:

(1) (交换性

(2) 半正定性

虽然无法知道的值,但却可以通过核函数有办法知道的值。

引入原问题和对偶问题:

原问题(Prime problem):

最小化:  自变量为: 多维向量

限制条件(Subject to):

定义该原问题的对偶问题过程如下:

首先定义一个函数:

其中:

对偶问题如下:

最大化

(意思是:遍历所有定义域内的,找到使最小的,并把这个值赋给

限制条件

综合员问题和对偶问题定义得到:

定理一:

        如果是原问题的解,是对偶问题的解,则有

其中: , 

我们把定义为对偶差距(Duality Gap)

强对偶定理:

如果为凸函数,则有,即对偶差距为0.

换言之,如果原问题的目标函数是凸函数,而限制条件是线性函数,那么原问题的解和对偶问题的解就会相等  

KKT条件:

,则定理一中必然能够推出,对于所有的

要么,要么

将支持向量机的原问题转化为对偶问题:

1. 首先证明支持向量机的原问题满足强对偶定理:

为了将限制条件全部写成小于等于0的形式,先将变号,整理一下得到:

最小化: 或者 

限制条件:

可以看到这两个限制条件都是线性的,而目标函数是凸的。所以满足强对偶定理。

值得注意的是这里的  自变量指的是 的组合。

在这个问题当中没有等式约束条件,不存在

对偶问题如下:

最大化:

限制条件:

因为是遍历每一个的组合,我们可以分别对三个变量求导,并令导数为0。可以得到:

将获得的三个式子代入表达式中,进一步转化对偶问题为:

最大化:

限制条件:

基于此对偶问题给出支持向量机算法的统一流程:

首先把对偶式子中的代替。解出所有的

可以根据第一个求导的式子: 得到:

再由第一个对偶问题根据KKT定理得到:

而如果对某个,则根据KKT条件,必有;且:

所以只需要找一个 ,就能得到

算出了b,那么测试样本的类别信息也就知道了

根据之前的式子展开得到:

这一结论被称为核函数戏法(Kernel Trick)

最后得到如下判别标准:

我们一旦知道了所有的,我们就完成了支持向量机的训练过程。

思考题:推到目标函数中的支持向量机训练和测试流程。

我们在应用SVM工具包的时候需要对两个超参进行人为设置:

-c 、-g:


 这里gama就是         

基于人工的经验我们用网格搜索,搜索参数的最佳取值:

暂时先想写这么多了。。。

机器学习——支持向量机相关推荐

  1. 机器学习——支持向量机SVMpython实现

    一.SVM理论 可见以下文章: <机器学习--支持向量机SVM之线性模型> <机器学习--支持向量机SVM之非线性模型低维到高维映射> <机器学习--支持向量机SVM之非 ...

  2. 机器学习--支持向量机(sklearn)

    机器学习–支持向量机 1.1 线性可分支持向量机(硬间隔支持向量机) 训练数据集 $T={ (x_1,y_1),(x_2,y_2),-,(x_N,y_N)} $ 当 y i = + 1 y_i=+1 ...

  3. 机器学习 —— 支持向量机简单入门

    机器学习 -- 支持向量机简单入门 第1关:线性可分支持向量机 1.线性二分类问题 2.基本思想 3.间隔与支持向量 4.对偶问题 5.选择题 第2关:线性支持向量机 0.数据集介绍 1.软间隔 2. ...

  4. 周志华机器学习-支持向量机

    周志华机器学习-支持向量机 第一章 绪论 第二章 模型评估与选择 第三章 线性模型 第四章 决策树 第五章 支持向量机 第六章 神经网络 第七章 贝叶斯分类器 第八章 集成学习和聚类 – 文章目录 周 ...

  5. 机器学习——支持向量机SVM之非线性模型(原问题和对偶问题)

    目录 一.原问题(prime problem) 二.原问题的对偶问题(dual problem) 1.定义一个辅助函数 2.定义对偶问题 >>>问题1:上面说到遍历w,那w的取值范围 ...

  6. 机器学习——支持向量机SVM之非线性模型(低维到高维映射)

    目录 一.非线性模型的最优化问题 1.非线性模型最优化模型 2.两个概念 1)正则项(regularization term) 2)调参参数 2.高维映射 1)定义及作用 2)高维映射后的最优化模型 ...

  7. 机器学习——支持向量机SVM之线性模型

    目录 一.没有免费的午餐定理 二.支持向量机SVM(support vector machine) 1.线性模型和非线性模型 2.如何在线性模型中画出一条直线(优化过程--vplink) 1)多少条? ...

  8. Python 西瓜书机器学习支持向量机(SVM)

    %matplotlib inline #为了在notebook中画图展示 import numpy as np import matplotlib.pyplot as plt from scipy i ...

  9. 机器学习——支持向量机(SVM)

    在机器学习中,支持向量机(英语:Support Vector Machine,常简称为SVM,又名支持向量网络[1])是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法.给定一组训练实例,每 ...

  10. 机器学习--支持向量机(六)径向基核函数(RBF)详解

    前面讲解了什么是核函数,以及有效核函数的要求,到这里基本上就结束了,很多博客也是如此,但是呢这些只是理解支持向量机的原理,如何使用它讲解的却很少,尤其是如何选择核函数更没有人讲,不讲也是有原因的,因为 ...

最新文章

  1. 参加java培训都有哪些学习阶段
  2. [原创]软件产品的质量
  3. Linux Used内存到底哪里去了?
  4. 《Excel最强功能-数据透视表》 网课笔记
  5. 前端学习(1318):同步api和异步api
  6. 米莱狄的机器人是_王者荣耀2.22更新:米莱狄机器人化身超级兵,狂铁将成T1级战士...
  7. 对钱没兴趣的马云又爆10个金句
  8. 滴滴:女乘客性骚扰男司机一事属实 已对该乘客永久封禁
  9. 【洛谷新手村】简单字符串 p1055 ISBN号码
  10. 光纤通信(邱昆、王晟版)课后答案
  11. 惠普m154a状态页_惠普m154a感叹号闪烁
  12. 笔记本电脑如何同时上内外网(通过usb外接网卡实现虚拟机连外网)
  13. DSP程序开发与优化经验之四:TMS320C64x+ DSP------Using Cache
  14. luogu P4408 [NOI2003]逃学的小孩
  15. Android 技术淘金者:杨丰盛
  16. Java面向对象练习题
  17. 用51单片机点亮流水灯
  18. python爬虫,站长之家
  19. 照片直播 php,php直播源码,iOS 图片去背景
  20. 新能力:企业微信【客户群群发】的最全使用指南!

热门文章

  1. 用VLC搭建简单的流媒体服务器
  2. 以视频搜视频时代来了!神目发布视频拷贝搜索引擎
  3. Springboot旅游网站管理系统毕业设计、Springboot旅游线路和景点网站设计与实现 毕设作品参考
  4. 千亿参数大模型首次被撬开!Meta复刻GPT-3“背刺”OpenAI,完整模型权重及训练代码全公布...
  5. android毕业设计——基于Android+XAMPP+MySQL的家校互动平台设计与实现(毕业论文+程序源码)——家校互动平台
  6. 分水岭算法实现岩石分割
  7. Java开发的六大基本原则
  8. 小白学 Python 数据分析(7):Pandas 数据分组
  9. 优秀Android博客大全,整理了国内外大神博客/Github地址,是学习Android进阶的首选[转]
  10. 信息与通信的数学基础——第十二章 分离变量法