3.1 线性不可以分

我们之前讨论的情况都是建立在样例线性可分的假设上,当样例线性不可分时,我们可以尝试使用核函数来将特征映射到高维,这样很可能就可分了。然而,映射后我们也不能100%保证可分。那怎么办呢,我们需要将模型进行调整,以保证在不可分的情况下,也能够尽可能地找出分隔超平面。

看下面两张图:

可以看到一个离群点(可能是噪声)可以造成超平面的移动,间隔缩小,可见以前的模型对噪声非常敏感。再有甚者,如果离群点在另外一个类中,那么这时候就是线性不可分了。

这时候我们应该允许一些点游离并在在模型中违背限制条件(函数间隔大于1)。我们设计得到新的模型如下(也称软间隔):

引入非负参数后(称为松弛变量),就允许某些样本点的函数间隔小于1,即在最大间隔区间里面,或者函数间隔是负数,即样本点在对方的区域中。而放松限制条件后,我们需要重新调整目标函数,以对离群点进行处罚,目标函数后面加上的就表示离群点越多,目标函数值越大,而我们要求的是尽可能小的目标函数值。这里的C是离群点的权重,C越大表明离群点对目标函数影响越大,也就是越不希望看到离群点。我们看到,目标函数控制了离群点的数目和程度,使大部分样本点仍然遵守限制条件。

模型修改后,拉格朗日公式也要修改如下:

这里的都是拉格朗日乘子,回想我们在拉格朗日对偶中提到的求法,先写出拉格朗日公式(如上),然后将其看作是变量w和b的函数,分别对其求偏导,得到w和b的表达式。然后代入公式中,求带入后公式的极大值。整个推导过程类似以前的模型,这里只写出最后结果如下:

此时,我们发现没有了参数,与之前模型唯一不同在于又多了的限制条件。需要提醒的是,b的求值公式也发生了改变,改变结果在SMO算法里面介绍。先看看KKT条件的变化:

第一个式子表明在两条间隔线外的样本点前面的系数为0,离群样本点前面的系数为C,而支持向量(也就是在超平面两边的最大间隔线上)的样本点前面系数在(0,C)上。通过KKT条件可知,某些在最大间隔线上的样本点也不是支持向量,相反也可能是离群点。

10 坐标上升法(Coordinate ascent)

在最后讨论的求解之前,我们先看看坐标上升法的基本原理。假设要求解下面的优化问题:

这里W是向量的函数。之前我们在回归中提到过两种求最优解的方法,一种是梯度下降法,另外一种是牛顿法。现在我们再讲一种方法称为坐标上升法(求解最小值问题时,称作坐标下降法,原理一样)。

方法过程:

最里面语句的意思是固定除之外的所有,这时W可看作只是关于的函数,那么直接对求导优化即可。这里我们进行最大化求导的顺序i是从1到m,可以通过更改优化顺序来使W能够更快地增加并收敛。如果W在内循环中能够很快地达到最优,那么坐标上升法会是一个很高效的求极值方法。

下面通过一张图来展示:

椭圆代表了二次函数的各个等高线,变量数为2,起始坐标是(2,-2)。图中的直线式迭代优化的路径,可以看到每一步都会向最优值前进一步,而且前进路线是平行于坐标轴的,因为每一步只优化一个变量。

 

3.2 核函数(Kernels)

定义 3.1 (核或正定核)设是中的一个子集,称定义在上的函数是核函数,如果存在一个从到Hilbert空间的映射

(1.1)

使得对任意的,

都成立。其中表示Hilbert空间中的内积。

 

考虑我们最初在“线性回归”中提出的问题,特征是房子的面积x,这里的x是实数,结果y是房子的价格。假设我们从样本点的分布中看到x和y符合3次曲线,那么我们希望使用x的三次多项式来逼近这些样本点。那么首先需要将特征x扩展到三维,然后寻找特征和结果之间的模型。我们将这种特征变换称作特征映射(feature mapping)。映射函数称作,在这个例子中

我们希望将得到的特征映射后的特征应用于SVM分类,而不是最初的特征。这样,我们需要将前面公式中的内积从,映射到

至于为什么需要映射后的特征而不是最初的特征来参与计算,上面提到的(为了更好地拟合)是其中一个原因,另外的一个重要原因是样例可能存在线性不可分的情况,而将特征映射到高维空间后,往往就可分了。(在《数据挖掘导论》Pang-Ning Tan等人著的《支持向量机》那一章有个很好的例子说明)

将核函数形式化定义,如果原始特征内积是,映射后为,那么定义核函数(Kernel)为

到这里,我们可以得出结论,如果要实现该节开头的效果,只需先计算,然后计算即可,然而这种计算方式是非常低效的。比如最初的特征是n维的,我们将其映射到维,然后再计算,这样需要的时间。那么我们能不能想办法减少计算时间呢?

先看一个例子,假设x和z都是n维的,

展开后,得

这个时候发现我们可以只计算原始特征x和z内积的平方(时间复杂度是O(n)),就等价与计算映射后特征的内积。也就是说我们不需要花时间了。

现在看一下映射函数(n=3时),根据上面的公式,得到

也就是说核函数只能在选择这样的作为映射函数时才能够等价于映射后特征的内积。

再看一个核函数

对应的映射函数(n=3时)是

更一般地,核函数对应的映射后特征维度为。(求解方法参见http://zhidao.baidu.com/question/16706714.html)。

由于计算的是内积,我们可以想到IR中的余弦相似度,如果x和z向量夹角越小,那么核函数值越大,反之,越小。因此,核函数值是的相似度。

再看另外一个核函数

这时,如果x和z很相近(),那么核函数值为1,如果x和z相差很大(),那么核函数值约等于0。由于这个函数类似于高斯分布,因此称为高斯核函数,也叫做径向基函数(Radial Basis Function 简称RBF)。它能够把原始特征映射到无穷维。

既然高斯核函数能够比较x和z的相似度,并映射到0到1,回想logistic回归,sigmoid函数可以,因此还有sigmoid核函数等等。

下面有张图说明在低维线性不可分时,映射到高维后就可分了,使用高斯核函数。

来自Eric Xing的slides

注意,使用核函数后,怎么分类新来的样本呢?线性的时候我们使用SVM学习出w和b,新来样本x的话,我们使用来判断,如果值大于等于1,那么是正类,小于等于是负类。在两者之间,认为无法确定。如果使用了核函数后,就变成了,是否先要找到,然后再预测?答案肯定不是了,找很麻烦,回想我们之前说过的

只需将替换成,然后值的判断同上。

 核函数有效性判定

问题:给定一个函数K,我们能否使用K来替代计算,也就说,是否能够找出一个,使得对于所有的x和z,都有

比如给出了,是否能够认为K是一个有效的核函数。

下面来解决这个问题,给定m个训练样本,每一个对应一个特征向量。那么,我们可以将任意两个带入K中,计算得到。I可以从1到m,j可以从1到m,这样可以计算出m*m的核函数矩阵(Kernel Matrix)。为了方便,我们将核函数矩阵和都使用K来表示。

如果假设K是有效地核函数,那么根据核函数定义

可见,矩阵K应该是个对称阵。让我们得出一个更强的结论,首先使用符号来表示映射函数的第k维属性值。那么对于任意向量z,得

最后一步和前面计算时类似。从这个公式我们可以看出,如果K是个有效的核函数(即等价),那么,在训练集上得到的核函数矩阵K应该是半正定的(

这样我们得到一个核函数的必要条件:

K是有效的核函数 ==> 核函数矩阵K是对称半正定的。

可幸的是,这个条件也是充分的,由Mercer定理来表达。

Mercer定理:

如果函数K是上的映射(也就是从两个n维向量映射到实数域)。那么如果K是一个有效核函数(也称为Mercer核函数),那么当且仅当对于训练样例,其相应的核函数矩阵是对称半正定的。

Mercer定理表明为了证明K是有效的核函数,那么我们不用去寻找,而只需要在训练集上求出各个,然后判断矩阵K是否是半正定(使用左上角主子式大于等于零等方法)即可。

许多其他的教科书在Mercer定理证明过程中使用了范数和再生希尔伯特空间等概念,但在特征是n维的情况下,这里给出的证明是等价的。

核函数不仅仅用在SVM上,但凡在一个模型后算法中出现了,我们都可以常使用去替换,这可能能够很好地改善我们的算法。

转载于:https://www.cnblogs.com/Yiutto/articles/4997064.html

SVM(三),支持向量机,线性不可分和核函数相关推荐

  1. SVM之线性不可分与核技巧

    跟我一起机器学习系列文章将首发于公众号:月来客栈,欢迎文末扫码关注! 在前面两篇文章中,笔者通过两个角度来介绍了什么是支持向量机.不过说一千道一万,还是不如动手来做做.在本篇文章中,笔者将首先介绍如何 ...

  2. 机器学习之SVM(支持向量机)

    文章目录 前言 正文 一.预备知识 二.线性可分的情况 三.线性不可分的情况 四.对偶问题 五.核函数 六.KKT条件 七.SMO算法 参考文献 前言 之前一直想总结关于支持向量机的相关内容,今天终于 ...

  3. R语言e1071包中的支持向量机:仿真数据(螺旋线性不可分数据集)、简单线性核的支持向量机SVM(模型在测试集上的表现、可视化模型预测的结果、添加超平面区域与原始数据标签进行对比分析)、如何改进核函数

    R语言e1071包中的支持向量机:仿真数据(螺旋线性不可分数据集).简单线性核的支持向量机SVM(模型在测试集上的表现.可视化模型预测的结果.添加超平面区域与原始数据标签进行对比分析).如何改进核函数 ...

  4. 支持向量机(svm)学习(最优超平面、线性可分、线性不可分、松弛因子、拉格朗日乘子法、核函数、对偶

    文章目录 简介 原理 内容框架 详细学习 最优超平面 支持向量 线性可分 定义 最优化问题 拉格朗日乘子法 强对偶性 线性不可分(部分) 软间隔 线性不可分(完全) 核函数 核函数的作用 常见核函数 ...

  5. OpenCV之ml 模块. 机器学习:支持向量机(SVM)介绍 支持向量机对线性不可分数据的处理

    支持向量机(SVM)介绍 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 CvSVM::train 训练一个SVM分类器, 以及用 CvSVM::predict 测试训练结果. 什么是支持向 ...

  6. R语言e1071包中的支持向量机:构建nu-classification类型的支持向量机SVM并分析不同nu值惩罚下模型分类螺旋线型(sprials)线性不可分数据集的表现

    R语言e1071包中的支持向量机:构建nu-classification类型的支持向量机SVM并分析不同nu值惩罚下模型分类螺旋线型(sprials)线性不可分数据集的表现 目录

  7. OpenCV支持向量机SVM对线性不可分数据的处理

    支持向量机对线性不可分数据的处理 目标 本文档尝试解答如下问题: 在训练数据线性不可分时,如何定义此情形下支持向量机的最优化问题. 如何设置 CvSVMParams 中的参数来解决此类问题. 动机 为 ...

  8. Python实现支持向量机SVM分类模型线性SVM决策过程的可视化项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 支持向量机是由间隔最大化和高维映射两大部件组成.间隔最大化是目标 ...

  9. SVM解释:四、线性不可分的情况

    之前的博客介绍了在数据为线性可分的情况下,如何用SVM对数据集训练,从而得到一个线性分类器,也就是超平面 WX+b=0 W X + b = 0 WX + b = 0. 但是我已经强调过多次,线性可分的 ...

  10. 支持向量机——线性可分支持向量机

    文章目录 1 线性可分支持向量机 2 函数间隔和几何间隔 3 间隔最大化 4 学习的对偶算法 GitHub 简书 CSDN 1 线性可分支持向量机 支持向量机(Support vector machi ...

最新文章

  1. JavaScript如何声明对象、函数以及对象中的函数(即方法)
  2. 敏感数据,“一键脱敏”,Sharding Sphere 完美搞定
  3. .NET6发布了Preview2,这点超越过去10年!
  4. Win7旗舰版系统如何设置定时关机
  5. Atom飞行手册翻译: 1.4 小结
  6. ​新冠疫情给 CTO 们带来的几点启示
  7. [学习整理]eclipe/MyEclipse:重要的快捷键
  8. python random函数_python随机模块random的22种函数(小结)
  9. python3 input函数
  10. linux 服务状态命令,Linux 查看服务列表,查看服务状态
  11. 网络语言y c,惊为天人!当网络流行语翻译成诗词,中文歌曲翻译成英文......
  12. css实现单色或图片背景透明,而文字不透明的方法
  13. 南开大学计算机学院博士毕业要求,南京大学博士研究生申请学位科研成果基本要求...
  14. (教程)教你如何自己办理商标注册事宜
  15. c# Byte解压,压缩
  16. SSM框架-SpringMVC详解,kafka常见的面试问题
  17. 网络犯罪市场Deer.io俄罗斯管理员在美国被判入狱
  18. 剑指offer编程题(JAVA实现)——第38题:二叉树的深度
  19. 创意编程,Python开发多功能壁纸自动切换工具!
  20. 文学创作类APP对创作者的帮助

热门文章

  1. 软件测试精要,软件测试精要.ppt
  2. linux6.5关闭21端口,linux CentOS6.5 防火墙(关闭除提供系统服务以外的端口)
  3. 优必选悟空智能机器人怎么读绘本_优必选发布悟空机器人及操作系统ROSA,关于估值这么回应…...
  4. oracle orcl 更名,Oracle 11gR2 用户重命名(rename user)
  5. NumpyML : Linear Regression
  6. C/C++[codeup 2080]整数奇偶排序
  7. 获取最顶层的ViewController top ViewController swift
  8. 极客大学架构师训练营 微服务架构 Service Mesh 服务网格 RPC 协议实现原理 Dubbo 通讯协议 第19课 听课总结
  9. 算法:判断二叉树是否包含链表Linked List in Binary Tree
  10. 写jsx_使用Vue 3.0做JSX(TSX)风格的组件开发