一、问题引入

  支持向量机(SVM,Support Vector Machine)在2012年前还是很牛逼的,但是在12年之后神经网络更牛逼些,但是由于应用场景以及应用算法的不同,我们还是很有必要了解SVM的,而且在面试的过程中SVM一般都会问到。支持向量机是一个非常经典且高效的分类模型。我们的目标:基于下述问题对SVM进行推导。

  要解决的问题:如下图所示,3条黑色的线都可以将两边的数据进行分类,那哪条线作为决策边界才是最好的呢?如果特征数据本身就很难分,那又怎么办呢?计算复杂度怎么样?能实际应用吗?

   

二、距离求解

  假设有一个部队过雷区,左边是一堆雷区,右边是另一堆雷区,现在需要开辟出部队前进的方向。我们需要做的就是让这个方向完全分割开左边和右边的雷区,并且我们肯定希望这个方向的边界越大越好,这样踩雷的风险就越低。

  决策边界:选出来离雷区最远的(雷区就是边界上的点,要Large Margin(间隔)),毫无疑问第二个分类效果肯定比第一个好。那为什么需要这个边界距离越大越好呢?答案就是边界越大在测试集上的泛化能力就越好。

   

  我们如果说找到了离决策边界最近的点,那这样就找到了决策边界,如上面圈出来的这些点。所以我们现在需要计算出到底哪个点距离决策边界最近吧,在这之前,首先需要引入这个距离是怎么计算的。

  首先,我们假设决策边界是一个阴影平面,那这个距离就是求点到平面的距离,然后将这个距离转换成求点到点的距离,然后再求出这个点到点的距离在垂直于这个平面上的投影,那么这个投影就是点到平面的距离了。

  那接下来,我们可以假设这个平面方程为wTx+b=0。初学的我好像并不明白这个方程怎么来的,后来查阅一些资料得知。

  因为二维空间里面,一条直线的方程可以表示为:Ax+By+C=0。三维空间里面,平面的方程可以表示为:Ax+By+Cz+D=0。依次推广,n维空间的超平面方程可以表示为:Ax1+Bx2+Cx3+Dx4+Ex5+Fx6+....+K=0

  因为n维空间对应的是n维坐标系,仅仅用x、y、z几个字母较难表示,所以此处用x1、x2、x3、...、xn来表示n维坐标系,各个维度的系数此处也可以用w1、w2、w3、...、wn来表示,所以n维空间里面的超平面方程可以写成如下形式:w1x1+w2x2+w3x3+w4x4+...+wnxn+b=0。wx相乘可以看作是内积的相乘:

   

  可以将x看作w,y看作x则上面超平面方程就变成了:[w,x]+b = 0 ,即wTx+b=0。所以,样本空间中,任何一个超平面都可以用方程如下方程表示:WTX+b=0。其中,W=(w1,w2,w3,...,wn)为法向量,b为位移项可以认为是截距,该超平面可以唯一的由此方程决定。

   

三、目标函数

  上面已经得出了距离的计算公式,那现在就要依据这个距离公式来找出最优的决策边界了。首先假设平面上有三个数据点(X1,Y1)(X2,Y2)… (Xn,Yn),注意这里X和Y不是代表横纵坐标,X代表数据的样本,Y为样本的类别也就是样本标签。现在使用支持向量机做一个二分类问题,也就是说如果当X为正例时那么Y = +1,当X为负例时 Y = -1。

  现在决策边界方程为:y(x) = wTΦ(x)+b(其中Φ(x)是对数据做了核变换,后面继续说)。根据上面所述可以得到如下图所示的表达式。

   

  我们最终需要得到的决策边界,通俗解释就是,找到一个条线(w和b),使得离该线最近的点(雷区)离这条线的距离能够最远,那这条线就是我们的决策边界了。这句话很重要,建议读者认真多读几遍。

  上面最终得出距离公式为:

   

  这里的wTx+b就是我们的决策方程y(xi),这里我们需要去掉外面的这个绝对值符号,而根据上面这个表达式yi * y(xi) > 0,经过化简可以得出以下的一个距离的表达式 (由于yi * y(xi)>0所以将绝对值展开原式依旧成立):

   

  现在得到了这个问题中的距离公式,而现在我们的目标就是找出使这个函数的值最小但是两个参数(w,b)值却最大。如下式所示,min就是找到离决策边界最近的那个样本点,max就是找出w和b使最近的样本点到决策边界那条线的距离最远。

   

  上面的式子似乎太长了些,我们可以通过放缩变换来简化一下这个式子。对于决策方程(w,b)我们总可以通过一种放缩手段(比如同时乘以或者除以一个值)来使得其结果值|Y| >= 1,于是可以推导出  yi * (wTΦ(xi)+b) >= 1(之前我们认为恒大于0,现在严格了些)。由于 yi * (wTΦ(xi)+b) >= 1,也就是说 yi * (wTΦ(xi)+b) 的最小值就是1,那现在只需考虑下面这个式子就足够了。

   

  那这个函数就是最终的一个目标函数,也就是说需要求解出什么样的一个w来使得最终结果值越大越好。对于当前目标,我们需要求出一个极大值,注意当前约束条件yi * (wTΦ(xi)+b) >= 1

   

  常规套路就是将求解极大值问题转换为极小值问题=>minw,b(1/2 * w2),求1/w的最大值,相当于求w的最小值,也相当于求w2(消除掉绝对值的影响)的最小值,那为啥需要引入一个常数1/2呢,这是为了后面方便进行求导。如何求解,应用拉格朗日乘子法求解,拉格朗日主要解决的带约束的优化问题

   

  这个式子有点复杂,大概意思就是说在直接求带约束的优化问题的时候不太好求,那就需要转换一下,将我们需要求的变量转换为求一个中间变量的解,然后再找出这个中间变量的解与我们需要求解的变量之间的关系,这样就可以通过这个中间变量求出我们需要求解的变量。

  依照上式再将我们的需要求解的式子转换为 :(约束条件不要忘yi * (wTΦ(xi)+b) >= 1)这里多了一个参数α

   

四、SVM求解

  分别对w和b求偏导,分别得到两个条件(由于拉格朗日中的对偶性质KKT)

   

  大概意思就是说在拉格朗日乘子法中先求解最大值然后求解最小值这个过程可以转换成先求解成最小值再求解成最大值。在这儿我们先求解这个函数的极小值, 首先在L(w,b,α)函数中对w,b分别求偏导,由于需要求解极值点,令其偏导等于0。

   

  可以看出w与α这个变量有了关系,就是说求出α也就求出了w。  然后继续接下来的求解,将上面求出的两个式子带回原式。

   

  然后接下来求解α的极大值

   

  未完待续。。。

转载于:https://www.cnblogs.com/xiaoyh/p/11483923.html

机器学习之支持向量机算法(一)相关推荐

  1. 机器学习之支持向量机算法(二)

    五.SVM求解实例 上面其实已经得出最终的表达式了,下面我们会根据一些具体的点来求解α的值.数据:3个点,其中正例 X1(3,3) ,X2(4,3) ,负例X3(1,1) 如下图所示 我们需要求解下式 ...

  2. 机器学习之支持向量机算法

    支持向量机算法 概述 原理 SVC, NuSVC 和 LinearSVC 能在数据集中实现多元分类. 非均衡问题 案例:对数据进行分类. 优势 缺点 svc NuSVC LinearSVC examp ...

  3. 支持向量机python代码_Python机器学习SVM支持向量机算法理论 | kTWO-个人博客

    PS:这篇文章讲的是SVM的算法的基础理论知识,因为博主也是刚学习没多久,对SVM的数学思想了解的不是很深,所以这篇文章就简单介绍一下什么是SVM以及SVM是怎么工作的. 1.什么是支持向量机(SVM ...

  4. 机器学习中的算法-支持向量机(SVM)基础

    机器学习中的算法-支持向量机(SVM)基础 版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处 ...

  5. 古老的spc也可以用机器学习(三)-支持向量机算法

    大家都很清楚SPC的中文叫统计过程控制,它的作用是发现过程数据中的异常行为,SPC有8种以上的判异规则,每一中判异规则对应可能的异常原因,非常实用. 现在大数据.机器学习应用越来越广泛,而机器学习算法 ...

  6. 机器学习笔记——支持向量机SMO算法完整版代码分析

    机器学习笔记--支持向量机SMO算法完整版代码分析 代码大体分析 外循环 参数类 内循环 KKT条件判断 eCache参数 完整SMO代码 添加核函数代码 代码参考书籍:<机器学习实战> ...

  7. 机器学习九大算法---支持向量机

    机器学习九大算法---支持向量机 出处:结构之法算法之道blog. 前言 动笔写这个支持向量机(support vector machine)是费了不少劲和困难的,原因很简单,一者这个东西本身就并不好 ...

  8. SVM 支持向量机算法(Support Vector Machine )【Python机器学习系列(十四)】

    SVM 支持向量机算法(Support Vector Machine )[Python机器学习系列(十四)] 文章目录 1.SVM简介 2. SVM 逻辑推导 2.1 Part1 化简限制条件 2.2 ...

  9. Python机器学习算法之支持向量机算法

    支持向量机算法 1.算法起源 2.算法概述 3.算法分类 4.算法思想 5.算法步骤 6.算法相关概念 7.算法实现 7.算法优点 8.算法优化 1.算法起源 1963年,前苏联学者Vladimir ...

最新文章

  1. C# 语法练习(2): 字符转义
  2. R语言观察日志(part17)--.Primitive
  3. c语言中结构体类型只有,C语言中main()函数不要返回结构体类型(求助)
  4. eclipse的优化操作
  5. 【matlab】将几幅图片放到一个画布中
  6. python彩票预测与分析_130期柳无尘双色球预测奖号:红球和值分析
  7. 前端素材库网站集合——网站集合
  8. 程序设计作业——系统管理
  9. linux硬盘损坏无法启动,CentOS 硬盘损坏导致无法启动
  10. 安卓应用 - 公开市场上传投放
  11. 计算机硬件介绍之CPU与多线程
  12. .Net微服务架构:API网关
  13. vue.js 的学习
  14. 错误1053: 服务没有及时地响应启动或控制请求
  15. Java编程工具哪种好?
  16. 微信公众平台消息体加解密实现
  17. [乐意黎转载]细数 javascript 容易被忽略的语法陷阱
  18. 微商助理 防伪防窜货溯源代理授权查询系统源码
  19. 【洛谷 P3348】【ZJOI2016】—大森林(LCT)
  20. win10下MySQL5.7基本操作指南

热门文章

  1. DE26 Continuation: Repeated Real Eigenvalues
  2. pytorch图像预处理
  3. JAVA的四则运算规则_java四则运算规则
  4. 深度学习自动调参工具,NNI使用
  5. 快手活跃用户预测_哈工大团队解决方案
  6. java记事本打开功能_Java简易实现记事本的打开与保存
  7. plsql 存储过程 批量提交_新一代的键值存储 KVell SOSP 2019
  8. logo qt添加_Qt官方示例-窗口标志
  9. android获取签名信息
  10. OpenGl文章 Android OpenGL ES 简明开发教程