SVM 原理引入

支持向量机( SVM,Support Vector Machine )

背景

2012年前较为火热, 但是在12年后被神经网络逼宫, 由于应用场景以及应用算法的不同, SVM还是需要有所了解,而且在面试中SVM一般都会问到, 支持向量机是一个非常 经典且高效的分类模型

要解决的问题

如下图所示,3条黑色的线都可以将两边的数据进行分类,

那哪条线作为决策边界才是最好的呢?

如果特征数据本身就很难分,那又怎么办呢?

计算复杂度怎么样?能否实际应用?

决策边界定义

两边雷区, 要选择一条部队不触发地雷的行军路线, 而且要尽可能的宽一点

向左边的图就窄一些, 右边宽一些

而这个所谓的行军道路就是 决策边界 , 越胖越好

以下的公式推导也皆使用此实例

距离计算

计算目的

对决策边界理解之后, 决策边界的计算就是我们要解决的问题, 即这里的物理意义就是距离的计算

决策边界的宽度是根据距离最近的点的距离决定的, 这里需要首选引入距离如何计算

数学转换计算

假设决策边界是一个阴影平面,那这个距离 distance 就是求点到平面 hyperplane 的距离

既然垂直于这个平面, 那就自然垂直于这个平面的任意一条线

但是直接求这个距离还是不容易的,  需要一定的转换

这里取出来 hyperplane 上的两个点 x` .x`` , 这两个点形成一个向量

计算出 xx` 的距离, 然后计算出这个距离在垂直方向到平面的投影即可, 这也是 x 到平面的垂直距离了

公式中的 x` 需要消除掉, 利用 x` 在平面的特性, 因此 将其转换成 -b 即可从而得到最终的距离计算公式

数学补充

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为位移项可以认为是截距,该超平面可以唯一的由此方程决定

SVM 目标函数

数据标签定义

数据集

Y 为样本的类别 (标签), X 为每一个样本数据

这里依旧是个二分类的问题将 Y 进行了两个区间的判断

  X 为正例的时候 Y = +1

  X 为负例的时候 Y = -1

和回归的时候使用的 0 / 1 不同, 这里使用的是 +1 / -1

决策方程

在基于之前 y = wTx+b 的情况下多加了一个 Φ

这里的 Φ 是对 x 做了一个转换, 后面会解释

对于预测结果可以进行简化, 不论 Xi 正例还是负例, yi * y(Xi) > 0 恒成立

优化目标

通俗解释

找到一个线 ( w, b ) 使得距离该线的最近的点 (雷区) 能够最远

优化目标即是如何让这个距离尽可能靠近最远, 或者足够远

将点到直线的距离化简得

由于 yi * y(Xi) > 0 , 所以将绝对值展开依旧成立

本来 是恒大于 0 的,  这里使用放缩变换将其用某种手段让他恒大于 1

然后下面的优化目标中的正好对这里进行求最小值, 恒大于 1 的最小值那最小值自然就是 1 了约分掉了这块内容

由此将目标这样化简成 

目标函数

当前目标

   约束条件 - 任何 w 都需满足   

常规套路

  求解极大值转换成极小值问题

  - 求 1/w 的最大值就是求 w 的最小值

  -  当然 求 w2 的最小值也是一样的

  - ||w|| 看着碍眼, 总之是正数, 那就用 w2 代替

  - 为了方便后面的求导, 多加个常数项 1/2 方便消去

  - 最终的结果优化为 

如何求解 - 拉格朗日乘子法

直接将我们的式子和约束带进转换即可, 这里多加个一个 α 的对每个 xi 的系数

最终目标函数

SVM 目标函数求解

根据对偶性质 KKT 可以进行一下的推导

KKT   大概意思就是说在拉格朗日乘子法中

先求解最大值然后求解最小值这个过程可以转换成先求解成最小值再求解成最大值

在这儿我们先求解这个函数的极小值, 首先在L(w,b,α)函数中对w,b分别求偏导

由于需要求解极值点,令其偏导等于0

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

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

求解一直以来都是较难的事情, 这里先看一个简单的 SVM 的求解实例参考

简单示例

上面其实已经得出最终的表达式了,下面我们会根据一些具体的点来求解α的值

数据:3个点,其中正例 X1(3,3) ,X2(4,3) ,负例X3(1,1) 如下图所示

分别对α1和α2求偏导,偏导等于0可得: α1=1.5,α2=-1(并不满足约束条件αi >= 0,i=1,2,3

所以这时求出来的α的值是无效的,那这个时候 α 的解应在边界上,也就是说要么 α1=0,要么 α2=0,再代入上式然后求偏导看下

(这儿经过我的计算发现α2似乎等于正的2/13,应该是教程有些小问题,猜测可能是上式由α123化简这儿出了点小问题,但是对于答案似乎影响不大) ,

所以经过计算最小值在 1 = 0.25,α2 = 0,α3 = 0.25) 处取得

上面的平面方程其实就是代表直线方程,也就是决策边界的方程。

支持向量机名词解释

以上就是我们对 SVM 的一次实际求解过程

注意公式中

可以看出只要 α 为 0 , 则结果一定为 0, 因此 为 0 的点就是无意义的点

在图中展示就是说 x2 所在的点, 也就是不在觉得边界的点, 这些点对我们画出方程是无价值的也就是非支持向量

而这也就是 支持向量机的说法由来, 决策边界的生成是由决策边界上的有价值的点支撑起来的也叫做支持向量

于此原理, 对于结果有影响的点是支持向量, 哪怕加入多少非支持向量, 对结果都不会有意义

软间隔  soft-margin

松弛因子

目标函数

C 趋近很大的时候, 为了满足式子最小, 那就只能要求 松弛因子 ε 越小, 即越严格, 反之越宽容

解法

引入新的参数后的解法

SVM 核变换

低纬不可分问题

假设在低纬度的时候发现很难分, 比如下图二维中是一条非线性的曲线来划分

这时候可以考虑转换到高纬来尝试, 比如转换为下图中三维的中的平面

核变换原理

低纬不可分问题映射到高纬后通过一种变换方式从而实现更直观更效率的划分

原理阐述的简单示例

我们为了一个简单直观的非线性的问题简化, 如果将维度上升到过分大的程度, 就会导致计算量暴增

因此上升到什么样的维度, 以及什么维度又是在可解范围内的程度才是最重要核心的问题

但是还有一个发现就是, 高纬度的内积和低纬度的内积是有一定关系的

先做内积在做映射和先做映射在做内积的结果是一致的

因此实际操作的时候并没有真的去高纬中进行复杂的内积计算

只需要在低纬中计算内积之后也映射到高纬的值即可

核函数

核函数就是在公式中的   的具体操作,  通常使用的是高斯核函数

公式 

体现效果如下图中所示

SVM 总结梳理

支持向量机被说为机器学习中最复杂的算法, 真正理解起来最好还是从物理意义上去着手

物理意义 - 解决的问题是什么 ?

找出最胖的决策边界, 越宽越好

怎么决定宽度?

距离计算, 从而引出距离计算公式

优化目标是什么?

找到一条线 (w, b) 使得离该线的点越远越好 (从而更宽)

进一步的化简得到 

转换成数学表达 - 目标函数 ?

利用放缩,   用 |Y| >= 1   带入到优化目标  中

约掉了右边的式子后就只需要考虑   从而得到了

目标函数

以及一个约束条件  

如何求解目标函数 ?

第一步 -   将极大值问题先转换成极小值问题,

第二步 -   然后应用 拉格朗日乘子法

  在拉格朗日乘子法中将 求 w,b 的问题转换成了 求 α 的问题

    求 α 的时候利用分别求偏导在求解, 利用到了拉格朗日乘子法中某些特质

    利用支持向量进行比对 (不在最边界的点就是无价值的点了) 从而求出 w, b

这里也点出了支持向量机的名字由来, 所谓支持向量是什么, 意义如何等

特殊问题处理 ?

过耦合问题

引入了松弛因子, 然后利用 C 的大小让计算更加严格或者宽松

再多一个约束条件的情况下, 再次求解也是类似的操作

低纬不可分问题

利用核函数变换为高纬度中去解决问题

需要注意并么有真的在高纬中进行复杂计算

机器学习 - 算法 - SVM 支持向量机的更多相关文章

  1. 机器学习 - 算法 - SVM 支持向量机 Py 实现 / 人脸识别案例

    SVM 代码实现展示 相关模块引入 %matplotlib inline import numpy as np import matplotlib.pyplot as plt from scipy i ...

  2. 跟我学算法-svm支持向量机算法推导

    Svm算法又称为支持向量机,是一种有监督的学习分类算法,目的是为了找到两个支持点,用来使得平面到达这两个支持点的距离最近. 通俗的说:找到一条直线,使得离该线最近的点与该线的距离最远. 我使用手写进行 ...

  3. 机器学习算法 --- SVM (Support Vector Machine)

    一.SVM的简介 SVM(Support Vector Machine,中文名:支持向量机),是一种非常常用的机器学习分类算法,也是在传统机器学习(在以神经网络为主的深度学习出现以前)中一种非常牛X的 ...

  4. 数学之路(3)-机器学习(3)-机器学习算法-SVM[7]

    SVM是新近出现的强大的数据挖掘工具,它在文本分类.手写文字识别.图像分类.生物序列分析等实际应用中表现出非常好的性能.SVM属于监督学习算法,样本以属性向量的形式提供,所以输入空间是Rn的子集. 图 ...

  5. 数学之路(3)-机器学习(3)-机器学习算法-SVM[5]

    svm小结 1.超平面 两种颜色的点分别代表两个类别,红颜色的线表示一个可行的超平面.在进行分类的时候,我们将数据点  x 代入  f(x)  中,如果得到的结果小于 0 ,则赋予其类别 -1 ,如果 ...

  6. 机器学习进阶-svm支持向量机

    支持向量机需要解决的问题:找出一条最好的决策边界将两种类型的点进行分开 这个时候我们需要考虑一个问题,在找到一条直线将两种点分开时,是否具有其他的约束条件,这里我们在满足找到一条决策边界时,同时使得距 ...

  7. 机器学习算法--svm实战

    1.不平衡数据分类问题 对于非平衡级分类超平面,使用不平衡SVC找出最优分类超平面,基本的思想是,我们先找到一个普通的分类超平面,自动进行校正,求出最优的分类超平面 测试代码如下: import nu ...

  8. 跟我学算法-SVM(支持向量机)

    支持向量机是一个点离决策边界越近,离决策面越远的问题 求解的过程主要是通过拉格朗日乘子法,来求解带约束的优化问题,在问题中涉及两个方面,一个是线性的,一个是非线性的,非线性的有 我们平时比较常见的高斯 ...

  9. 机器学习之SVM支持向量机

    前言            以下内容是个人学习之后的感悟,转载请注明出处~ 简介 支持向量机(support vector machine),简称SVM,通俗来讲,它是一种二类分类模型,其基本模型定义 ...

随机推荐

  1. 《Python编程:从入门到实践》第四章 操作列表 习题答案

    #4.1 pizzas = ['KFC','MDL','DKS'] ''' for pizza in pizzas: print(pizza); ''' for pizza in pizzas: pr ...

  2. WCF服务代理类-学习

    类:ServiceDescriptionImporter Class 公开一种为 XML Web services 生成客户端代理类的方法. 地址:https://docs.microsoft.com ...

  3. 分享一个自制的USB转HART模块

    HART协议是一种用于现场智能仪表和控制室设备之间的通讯协议.使用USB转HART模块可以很方便的对HART总线上的数据进行监控,并且可以远程控制.操作和校准HART设备.设计的模块主要采用的是USB ...

  4. 1122 django属性操作orm字段数据操作

    目录 1. 静态文件的配置 手动静态文件的访问资源 静态文件的动态绑定 2.request方法 2.1 请求方式 2.2 获取前端的请求方式 request.method 2.3 request方法 ...

  5. xcode 查看stastic

    点GPU 双击柱状图 从上面list里点performance

  6. C#获取资源文件

    System.Resources.ResourceManager rs = new System.Resources.ResourceManager("NetWebBrowser.Resou ...

  7. Centos 拒绝ssh远程暴力破解方法

    佳木斯SEO摘要 有一天突然收到一封邮件,邮件内容告知我的ECS服务器作为肉鸡在攻击别的机器,期初一想,一定是我机器的账号密码被泄露,或者是被人暴力破解,于是乎,我就查询了一下我机器的账号登录记录. ...

  8. CSP模拟赛 number (二分+数位DP)

    题面 给定整数m,km,km,k,求出最小和最大的正整数 nnn 使得 n+1,n+2,-,2nn+1,n+2,-,2nn+1,n+2,-,2n 中恰好有 mmm 个数 在二进制下恰好有 kkk 个 ...

  9. Spark机器学习MLlib系列1(for python)--数据类型,向量,分布式矩阵,API

    Spark机器学习MLlib系列1(for python)--数据类型,向量,分布式矩阵,API 关键词:Local vector,Labeled point,Local matrix,Distrib ...

  10. MySQL 语句整理 2019-5-3

    MySQL 语句整理 在整理完Oracle的一些常见用语句后,由于MySQL的语法跟Oracle略有不同,随跟PN的MySQL视频进行了间接整理. 查询薪水大于1800, 并且部门编号为20或30的员 ...