上一篇讲了线性可分的SVM推导,现在讲一讲基本线性可分的情形,后面还会介绍多分类的使用以及核函数的使用。

outlier 的处理

给定数据集  ,当样本数据大部分为线性可分的,存在少量异常值使得数据线性不可分,或者导致分离超平面被挤压,可以通过一些方法仍然按照线性可分的方式处理,异常值的情况如下图所示:

以上情况意味着某些样本点的函数间隔并不满足大于 1 的要求。为了解决这个问题,为每个样本引入一个松弛变量, 使得函数间隔可以小于 1 ,即满足  ,这里显然  不能任意大,因为那会导致任意样本点都满足要求,所以要把优化目标改成如下的形式:

上面将不等式约束都已经化成了的形式了,为方便使用拉格朗日乘子法与KKT条件。

这里  叫做惩罚参数,上述的不等式约束记做  的形式,同样通过对偶的形式求解,首先构造拉格朗日函数:

拉格朗日函数中的乘子 , 且   ,很明显的有:

因此原始问题转化为:

对于上述问题应用对偶可得:

接下来求解对偶问题,对于极小部分的参数  求导:

将以上结果带入对偶问题,极小部分便得到一个关于  的函数:

注意这里根据  与  消去了 

使原始问题满足KKT条件,则原问题与对偶问题具备强对偶性。(其实在这里可以通过Slater条件成立推出强对偶性,再从强对偶性推出原问题满足KKT条件,Slater条件为两个,1是原问题为凸优化问题,这个显而易见。2是原问题存在严格满足不等式约束的解,这个也是显而易见的,对于所有不是支持向量的点,都是严格满足这个条件的。故Slater条件是成立的。)

联立KKT条件与对偶问题约束最后可求解得出

首先由  KKT 条件 (1) 可得:

根据 KKT 条件(3) (4) (6) (9)可知若 ,则  ,且存在  ,使得:

因此便可求得  :

至此,可以总结出带有异常值的线性可分 SVM 的算法1.3:

Algorithm 1.3

下图中实线为分离超平面,虚线为间隔边界,且有间隔边界与分离超平面的函数距离为1,几何距离为 。在线性不可分的情况下,求解得到  的分量  对应的样本实例  中的  称为支持向量,这时的支持向量要比线性可分复杂一些,如下图的点,以下支持向量点到间隔边界的几何距离均已标注出为 。这个几何距离是这样计算的,点  到分离超平面的函数距离为 , 而分离超平面与间隔边界的函数距离为 1 ,所以点  到间隔边界的距离为  ,几何距离只需除以  即可得到结果。

可见这时候的支持向量或者分布在间隔边界上,或者在间隔边界与超平面之间,或者在分离超平面误分的一侧。 根据 KKT 条件可以得出一些很有意思的结论,当  时,根据 KKT 条件 (3) 可得 ,即  ,又由于  可得  ,根据 KKT 条件 (4) 可得  ,所以当  时,可得 ,这时样本便为支持向量,且落在间隔边界上;当  时且  ,这时便为分类正确的且落在间隔边界之后的点,至于  的情况,根据  的不同取值,可分为不同的情况,总结起来便有:

至此,带有异常值的非线性可分的情况也解决了,但是还需要注意的是数据集是完全非线性可分的。这时便需要引入核方法了。核方法并不是 SVM 的专利,其可以解决一系列机器学习问题。


多分类

至于 K 分类问题 (K>2) ,最简单的方式便是 one-vs-all 的方法,如下图所示,该方法共训练 K 个分类器,对于待分类样本点,分别使用这 K 个分类器进行分类,对于样本  分类的计算如下: ,若只有一个 +1 出现,则其为样本对应类别 k ;但实际情况下构造的决策函数总是有误差的,此时输出不只一个 +1 (不只一类声称它属于自己),或者没有一个输出为 +1 (即没有一个类声称它属于自己),这时比较则比较  输出值,最大者对应类别为样本  的类别 k 。

或者采用 LIBSVM 中 one-vs-one 的方法,其做法是在任意两类样本之间设计一个SVM,因此 k 个类别的样本就需要设计  个SVM。当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。比如说 A,B,C 三类。在训练的时候针对 (A,B) (A,C) (B,C) 所对应的样本作为训练集,然后得到三个模型,在测试的时候,对应的分别对三个模型进行测试,然后采取投票形式得到最后的结果,如下图所示:

再就是直接使用 Hinge Loss 进行多分类了,这个接下来也会详细介绍。

参考文章:

致谢ooon大神,从他的博文中学到了很多东西!

支持向量机SVM

【机器学习】SVM基本线性可分与多分类相关推荐

  1. 【火炉炼AI】机器学习008-简单线性分类器解决二分类问题

    [火炉炼AI]机器学习008-简单线性分类器解决二分类问题 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplot ...

  2. 线性SVM,线性可分SVM与核函数

    SVM即支持向量机(support vector machine),是一种分类算法.SVM 适合中小型数据样本.非线性.高维的分类问题.它将实例的特征向量映射为空间中的一些点.如: 而SVM要做的事情 ...

  3. 机器学习之Fisher线性分类器实现样本分类

    本次实验是本科阶段人工智能实验课的一个实验,当时划水没有仔细做,现在回来再实践一下. 1.Fisher分类器的基本原理 若把样本的多维特征空间的点投影到一条直线上,就能把特征空间压缩成一维.那么关 键 ...

  4. 特征空间、(数据集)线性可分:线性(二分类)模型

    文章目录 二分类问题 特征空间 线性可分 线性分类模型 在学习 SVM 时发现自己没能很好地理解在线性模型中充当决策函数角色的 符号函数Sign(),说明对线性模型的理解还不够到位,下面主要梳理一下对 ...

  5. 线性可分支持向量机记录

    这里是引用 前言 小那近日因为工作需要,详细看了支持向量机的学习算法是如何玩转分类功能的.在程序员女朋友的无数次推荐下,青睐于手写笔记的小那开启了博客记录之行.这篇内容主要讲述了支持向量机的3种类别种 ...

  6. 机器学习入门(十三):SVM——线性可分 SVM 原理

    之前我们讲过的几个模型:线性回归.朴素贝叶斯.逻辑回归和决策树,其背后数学原理的难度属于初级.而接下来要讲的 SVM 和 SVR 则上升到了中级. 在下面的几 篇中,我们将不会再看到可爱.搞笑的图片和 ...

  7. 【机器学习】SVM线性可分

    Introduction 支持向量机(Support Vector Machine,SVM)是定义在特征空间中的最大间隔线性分类器,对于非线性可分的数据,SVM引入核方法(kernel trick)使 ...

  8. 百面机器学习 #3 经典算法:01-2 不完全线性可分(软间隔)支撑向量机SVM

    文章目录 ①从原问题到对偶问题 ②对偶问题的解的形式化简 ③从对偶问题的解到原问题的解 ④从原问题的解到分离超平面.决策函数.支撑向量 假设训练数据集不是线性可分的.通常情况是,训练数据中有一些特异点 ...

  9. 【统计学习方法】线性可分支持向量机对鸢尾花(iris)数据集进行二分类

    本文摘要 · 理论来源:[统计学习方法]第七章 SVM · 技术支持:pandas(读csv).numpy.sklearn.svm.svm思想.matplotlib.pyplot(绘图) · 代码目的 ...

最新文章

  1. python关键字匹配_关于python:在遇到某个关键字后匹配值的正则表达式
  2. shell 文本后几行_shell_wc(统计数目)、head(查看前几行)、tail(查看末尾几行)...
  3. 抓取从源地址为10.0.0.111主机访问目标主机10.0.0.222的80/tcp端口的流量?
  4. 实例化Spring Bean:Bean实例化的姿势有多少种?
  5. jQuery-个人学习记录(2)
  6. mysql如何让表建立连接吗_MySQL 表与表之间建立关系
  7. Catalan数应用
  8. 查看Redis集群所有节点内存工具
  9. 打通语言理论和统计 NLP 两个世界,Transformers/GNNs 架构能做到吗?
  10. 函数对象function object 以及boost::bind的一点了解
  11. Glide的图像centerCrop处理-长短边适配
  12. 微信小程序获取数据并展示
  13. 不定式和分词作状语的区别
  14. 【美赛】全面助力2023年美国大学生数学建模竞赛,祝大家取得好成绩
  15. 在QT界面中使用ico/png等图片文件,生成exe后不依赖外部文件
  16. 计算机cccc比赛,2019第四届中国高校计算机大赛—团体程序设计天梯赛 CCCC 总结...
  17. 下单后,订单拆单能怎拆?
  18. GKCTF2020 逆向部分题的复现
  19. 中国石油大学 现代远程教育入学指南
  20. html之设置页面ico图标ie浏览器,如何修改网页小图标,浏览器页面上的图标(favicon.ico)...

热门文章

  1. 代码审计——命令执行
  2. 通电后第一次开机黑屏_电脑无法开机怎么办,8 种情况的修复方法
  3. Linux上搭建verdaccio私服
  4. 随机产生单词java_关于java:如何创建随机单词选择器方法
  5. MaskRCNN路标:TensorFlow版本用于抠图
  6. 图像局部显著性—点特征(SiftGPU)
  7. 安卓JNI使用OpenCV
  8. SciPy和Numpy处理能力
  9. 容器间通信的三种方式 - 每天5分钟玩转 Docker 容器技术(35)
  10. iOS,Objective-C Runtime