上一篇文章推导SMO算法时,我们通过导入松弛因子,改变了对偶问题的约束条件,这里涉及到软间隔和正则化的问题,我们一直假定训练样本是完美无缺的,样本在样本空间或特征空间一定是线性可分的,即存在一个超平面将不同类的样本完全划分开,然而现实中,数据往往不那么‘完美’,即使找到完美的它,我们也很难断定这里的线性可分是否存在过拟合。

如何解决这个问题呢,允许支持向量机在一些样本上出错,这样我们便引入了软间隔

允许一些样本出错就是指的一些样本可能分在间隔带之内,例如A点,一个人悄悄跑到了危险边缘试探,再过分一点就是B点了, 他直接跑到别人的阵营里去,而除了A,B之外,大家都安分守己,乖乖呆在自己的位置。如果我们不设定软间隔,即强行让这些点线性分开,那可能最后会得到一个训练模型精确度很高但泛化能力很差的支持向量机;这是因为个别误差大的Support Vector会对分类的超平面造成较大的影响,甚至过拟合,我们之前的硬间隔要求所有样本均满足条件,而这里软间隔则允许一些样本不满足约束。当然,在最大化间隔时,我们要求不满足约束的样本尽量少。

下面看一个目标函数:

这里我们在原优化函数的基础上,加入了损失项,即C那一部分,这里C是一个常数,又叫正则化常数,用于控制我们对犯错的容忍度,L(0/1)是0-1损失函数:

当C无穷大时,min函数会迫使所有样本满足条件,而当C取有限值时,则会允许一些样本出错。这里我是这么考虑的,C取无限大,而我们的目标函数是求min,所以我们在C很大时就会希望后面的L(0/1)函数很小,为0最好,而L(0/1)为0的条件是z≥0,即

这正是样本争取分类的条件,所以C很大时,会迫使所有样本满足,而C很小时,一些样本出错对min函数的影响很微小,从而实现软间隔。

但是有一个问题,L(0/1)函数非凸,非连续,存在间断点,数学性质不好,对目标函数优化不便,所以我们用一些其他函数代替,称为替代损失,常见的替代损失有以下几种:

动手画一下这几个函数,看看什么样子:

import math
import matplotlib.pyplot as plt
import numpy as npdef plot_loss():#定义x范围x = np.array(np.linspace(start=-2, stop=3, num=1000, dtype=np.float))#定义三种函数y_hinge = 1.0 - xy_hinge[y_hinge < 0] = 0y_logistic = np.log2(1 + np.exp(-x)) y_exponential = np.exp(-x)#标识plt.plot(x, y_logistic, 'r-', label='Logistic Loss', linewidth=1)plt.plot(x, y_hinge, 'y-', label='Hinge Loss', linewidth=1)plt.plot(x, y_exponential, 'b--', label='Exponential Loss', linewidth=1)#图例+网格plt.grid()plt.legend()plt.show()
plot_loss()

可以看到,几个函数大同小异,他们都在x大于1的时候非常的小,目的就是希望我们的样本都能够大于1满足分类需求,而样本不满足,则会线性或指数形增大,从而被min函数限制,这也是损失函数的特性。

若采用Hinge损失,则优化目标变为:

引入松弛变量

这就是常用的软间隔支持行向量机.

对于每个样本都有一个对应的松弛变量,要来表示样本不满足约束的程度,这仍是一个二次规划,下面我们引入朗格朗日乘子,求导代换求出软间隔支持向量机的对偶问题:

 

αi≥0,ui≥0是拉格朗日乘子,先求参数偏导:

带入原式进行化简:

从而导出对偶问题

这里αi≤C是因为且两项都大于等于0.

类似的,通过多约束KKT条件,我们引出软间隔支持向量机的KKT条件:

   

    

基于KKT条件讨论

1)当αi=0时,则样本分类正确,对f(x)没有影响

2)当0<αi<C时,则ui≠0,=0,yif(xi)-1+=0,所以此时的样本是支持向量

3)当αi=C时,ui=0,则≤1时,样本落在间隔带内,>1时,则样本分错类

可以看到,软间隔支持向量机与支持向量有关,而当α不满足KKT条件时,我们便对α进行更新.

拿《机器学习实战》中支持向量机的更新规则看一下是如何对不满足KKT条件定义的:

    if ((oS.labelMat[i]*Ei < -oS.tol) and (oS.alphas[i] < oS.C)) or ((oS.labelMat[i]*Ei > oS.tol) and (oS.alphas[i] > 0)):

上面是书中代码判断不满足KKT条件的if判断语句

先看第一句:

对应的情况应该是αi=C,但这里and(且)的条件是αi<C,所以不满足KKT条件,所以要对αi更新。

再看第二句:

对应的情况应该是αi=0,但这里and(且)的条件是αi>C,所以不满足KKT条件,所以要对αi更新。

总结:

这里我们可以把0-1损失函数替换为别的替代损失函数,从而得到其他学习模型,但他们的共性是相同的.这里的共性是指:第一项描述间隔大小,第二项描述误差:

第一项叫结构风险,用来描述模型结构的某些性质,称为正则化项,第二项叫经验风险,用来描述数据的契合度,C叫做正则化常数,用于对两者折中,类似于这样的评价函数模型的得分函数,我们在BP神经网路,Logistic回归等模型构造中,也都会遇到。有问题欢迎大家交流~

SVM支持向量机-软间隔与松弛因子(3)相关推荐

  1. 机器学习:SVM、软间隔、随机梯度下降SVM线性算法

    文章目录 SVM目标函数 SVM目标函数推导 函数间隔: 几何间隔: 软间隔.松弛 HingeLoss和软间隔 随机梯度下降算法 线性SVM的算法描述: 线性SVM算法实现: SVM目标函数 SVM目 ...

  2. SVM支持向量机原理(二) 线性支持向量机的软间隔最大化模型

    在支持向量机原理(一) 线性支持向量机中,我们对线性可分SVM的模型和损失函数优化做了总结.最后我们提到了有时候不能线性可分的原因是线性数据集里面多了少量的异常点,由于这些异常点导致了数据集不能线性可 ...

  3. 机器学习-SVM硬间隔与软间隔:重要参数C

    SVM在软间隔数据上的推广 到这里,我们已经了解了线性SVC的基本原理,以及SVM如何被推广到非线性情况下,还了解了核函数的选择和应用.但实际上,我们依然没有完全了解SVM用于二分类的全貌.我们之前在 ...

  4. SVM支持向量机(上)

    参考https://baike.baidu.com/item/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA/9683835?fromtitle=SVM&a ...

  5. 支持向量机(SVM):超平面及最大间隔化、支持向量机的数学模型、软间隔与硬间隔、线性可分支持向量机、线性支持向量机、非线性支持向量机、核函数、核函数选择、SMO算法、SVM vs LR、优缺点

    支持向量机(SVM):超平面及最大间隔化.支持向量机的数学模型.软间隔与硬间隔.线性可分支持向量机.线性支持向量机.非线性支持向量机.核函数.核函数选择.SMO算法.SVM vs LR.优缺点 目录

  6. 支持向量机SVM(三)软间隔与松弛变量的替代损失函数

    前两篇关于SVM的讨论中,我们只讨论了样本在原始空间和特征空间中线性可分的情况,但是,现实不可能这么完美,就算真的被找到了,但是世上没有免费的午餐,最后的结果很可能过拟合了. 所以要来讨论一下,怎么付 ...

  7. SVM支持向量机——核函数、软间隔

    支持向量机的目的是寻找一个能讲两类样本正确分类的超平面,很多时候这些样本并不是线性分布的. 由此,可以将原始特征空间映射到更高维的特征空间,使其线性可分.而且,如果原始空间是有限维,即属性数量有限, ...

  8. 机器学习入门学习笔记:(4.2)SVM的核函数和软间隔

    前言 之前讲了有关基本的SVM的数学模型(机器学习入门学习笔记:(4.1)SVM算法).这次主要介绍介绍svm的核函数.软间隔等概念,并进行详细的数学推导.这里仅将自己的笔记记录下来,以便以后复习查看 ...

  9. 【机器学习-西瓜书】六、支持向量机:核技巧;软间隔;惩罚因子C;松弛变量

    推荐阅读: 核技巧:惩罚因子C 关键词:核技巧:软间隔:惩罚因子C:松弛变量 6.3核函数 关键词:核函数:核技巧 上一节讲到,SVM寻找的是使得间隔最大的那一个超平面作为分类器,这还是一个线性分类器 ...

最新文章

  1. 【网络流】解题报告:luogu P2740 [USACO4.2]草地排水Drainage Ditches(Edmonds-Karp增广路,最大流模板)
  2. 读书笔记——数据压缩入门(柯尔特·麦克安利斯)下
  3. [转]35个高级Python知识点总结
  4. c语言代码大全表解释_正点原子Linux第十章C语言版LED灯实验
  5. 写给新入职的毕业生们(二)
  6. JQuery源码分析 --- 运动animate 基本原理
  7. Python自动化运维_批量执行py脚本
  8. python Process类
  9. kali wifi 破解 字典制作
  10. 1、Django下载与搭建、配置环境变量
  11. 个人号微信API接口
  12. ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得NUMBER
  13. HoG特征以及SVM的配合
  14. IDEA设置签名与导入主题
  15. 计算机专业外出交流方案,公开学院计算机系外出考察方案.doc
  16. html仿微信评论输入框,简单仿微信朋友圈评论功能
  17. 祝愿大家未来顺利平安
  18. 使用python生成文字视频
  19. C++异常之栈解旋(unwinding)
  20. linux使用新手手札

热门文章

  1. 蘑菇游戏_熊碰撞边界处理
  2. 计算机应用基础是计算机一级,计算机应用基础(计算机一级)试题.doc
  3. 在字符串中找出连续最长的英文字符串
  4. 为什么谷歌浏览器打印不了输出结果,求助,谢谢
  5. Allegro导出和导入PRM即GERBER设置相关教程
  6. 全球及中国能源管理软件行业商业模式分析及投资风险预测2022年版
  7. 江苏省计算机二级考试c语言合格条件,江苏省计算机二级考试(C语言)..ppt
  8. Cordova开发流程-H5 JS转Android 和Ios App
  9. 管理系统中计算机应用实践报告,管理系统中的计算机应用实践报告.docx
  10. 【扩频通信】第一章 扩频通信理论基础