支持向量机(SVM)

支持向量机(support vector machine,SVM)使用训练集中的一个子集来表示决策边界,边界用于样本分类,这个子集称作支持向量(support vector)。

1.1 最大边缘超平面

如下图所示显示了一个数据集,包含两个不同类的样本。观察样本分布可以看出数据集使线性可分的,即可以找到这样一个超平面,使得所有相同类别的样本位于超平面一侧。如图示,可能存在无穷多个超平面。虽然他们的训练误差都等于0,但不能保证这些超平面在测试集上运行得同样好。观察图fig2的超平面相对于图fig1具有较大边缘。

具有较大边缘的决策边界比那些具有较小边缘的决策边界具有更好的泛化误差。如果边缘比较小,决策分界面任何轻微的扰动都和能对分类产生显著影响。因此那些决策边界边缘较小的分类器对模型的过分拟合更加敏感,从而在未知的样本上的泛化能力很差。SVM分类器主要做两件事:1、尽可能保证分类的正确性,2、尽可能保证类别之间的差异性最大从而使它们更容易区分。

1.2 支持向量机(SVM) -线性可分情况

线性SVM分类器也被称为最大边缘分类器,它寻找具有最大边缘的决策分界面,如下图fig3所示,SVM分类器具有一个决策分界面和两个边缘分界面。假设训练集包含m个样本,每个样本具有n个输入特征,具有类别yi∈{-1,1}。

一个线性分类器的决策分界面B可以写成如下形式,一个超平面可以由参数(w,b)唯一确定,用系数w可以表示一个平面的法向量,b为平面位移量,所以用(w,b)即可表示为一个超平面。

两个平行的边缘分界面B1、B2可以表示如下,决策分界面和两条边缘分界面两两平行,且两条边缘分界面到决策分界面的位移量(函数间隔)均为1,即|b-b1|=|b-b2|=1。

1.2.1 支持向量机(SVM) -线性可分情况-边缘距离

决策分界面的边缘由这两个超平面之间的距离给定,其中一个平面内的点到另一个平面的距离就是两个平行平面之间的距离。设有一点在平面w1x2+w2x2+...+wnxn+b=1,则该点到另一平面w1x2+w2x2+...+wnxn+b=-1的距离公式如下所示:

对于任何位于决策分界面上方的样本x,wx+b>0,样本标记为+1; 位于决策分界面下方的样本x,wx+b<0,标记为-1。分类器SVM在保证分类正确的同时还要确保最大化两个类别的距离。

1.2.2 支持向量机(SVM) -线性可分情况-线性SVM 优化模型

分类器线性SVM训练阶段:从训练集中估计决策分界面的参数w和b,对于任意样本xi,满足如下要求:

决策分界面B满足如下条件:

进一步概括为如下公式:

如下图所示

分类器线性SVM优化问题可以描述为如下所示:1、属于两个类别的点(决策分界面最近的点)到决策面的距离最大,2、边缘分界面及边缘分界面外侧的点分别属于类别1、-1。

为了方便后续采用拉格朗日乘子这里取平方,注意取平方并不影响对参数(w,b)大小的估计,此外由于目标函数是二次的,且约束在(w,b)上是线性的,因此这个优化问题是一个凸优化问题,已知凸函数的解就是全局最优解,凸函数的驻点(一阶导数为零)即是是全局最优点。可以通过拉格朗日乘子方法求解。

1.2.3 拉格朗日乘子

已知如下的模型,目标函数J(w,b)在约束g(w,b)条件下的最小值。在分类问题中可以表示为对于特征向量在决策分界面上测的点分类为类别1,下侧的点分类为类别-1,同时位于样本边界点(支持向量)的两条分界面的间隔最大。

拉格朗日乘子法是一种寻找多元函数在一组约束条件下的极值的方法。通过引入拉格朗日乘子λ,可将有d个变量(w,b),k个约束条件的最优化问题转换为具有d+k个变量的无约束优化问题求解。

1.2.3.1 拉格朗日乘子-无约束条件下的目标函数最优解->最优解:J(x,y)梯度为0的点

假设目标函数如下所示,J(x,y)的几何图像是一个抛物面,其在xoy面的投影是以原点为中心的同心圆环,由于目标函数J(x,y)为凸函数,凸函数的驻点(各偏导数为0的点)就是全局最优点,所以计算目标函数最小值只需求出J(x,y)关于变量的偏导数等于0的点,即目标函数J(x,y)梯度为0的点就是最优解。

                  

1.2.3.2 拉格朗日乘子-有约束条件下的目标函数最优解->最优解:g(x,y)=0

约束条件为等式约束,即g(x,y)=0,λ≠0,如下图所示,此时目标函数J(x,y)的最小值在等高线(J(x,y)在XoY面上的投影)与约束线的相切点(相切点的梯度等于0)上。

                 

其中的λ就的拉格朗日乘子,目标函数改写为拉格朗日函数如下所示,由于目标函数J(x,y)是二次的且约束在为线性的,所以拉格朗日函数仍为凸函数。

所以约束条件为等式约束时的最优解为目标函数L(x,y,λ)梯度等于0的点,如下所示,同时表明目标函数和约束函数在切点处的梯度方向共线、方向相反,即使目标函数的梯度等于0。g(x,y)=0,λ≠0

约束条件为不等式约束,g(x,y)≥0g(x,y)≤0,如下图所示,约束条件为含等于0的不等式约束,可行域在灰色阴影处,所以极值点只可能在约束线上,此时的不等式约束等价等式约束,即g(x,y)≥0-->g(x,y)=0,λ≠0

           

所以约束条件为不等式约束时的最优解为目标函数L(x,y,λ)梯度等于0的点,如下所示

约束条件为不等式约束,g(x,y)≤0或g(x,y)≥0,如下图所示,可行域在灰色阴影处,此时极值点不在约束线上,在目标函数J(x,y)的梯度等于0的点上,此时不等式约束等价于无约束或者即拉格朗日乘子λ=0

                  

所以此时最优解为目标函数J(x,y)梯度等于0的点,如下所示

拉格朗日乘子法小结:有约束的凸优化问题改造为无约束的拉格朗日优化问题时,要考虑极值点的可行域在哪里,即约束条件g(x,y)的可行域与目标函数J(x,y)的交集情况。

  1. 极值点在约束线(目标函数与约束函数的切点)上:输入特征向量在分界面上
    最优解:——>(λ≠0,g(x,y)=0),λ≠0:对应的约束条件是紧致的(起作用)
  2. 极值点在原始目标函数的可行域内与约束条件无关:
    最优解:——>(λ=0,g(x,y)≤0/g(x,y)≥0),λ=0:对应的约束条件是松弛的(不起作用)

可概括为:λg(x,y)=0(KKT性质)

如下图所示,约束条件不同,极值点分布情况也有所不同

        

        

关于拉格朗日乘子λ的取值范围,应该是λ≥0还是λ≤0,很多文献都习惯λ≥0,其实这个并没有强制性要求,λ的取值视构造拉格朗日函数方式而定,可以灵活取值,如下所示,

原问题是包含不等式约束的求最小值问题在这里可以等价为minmax(极小极大问题)。

1.2.4 拉格朗日对偶性

  • 任何线性规划问题都有其对偶问题
  • 性质:
  1. 无论原问题是否为凸,对偶问题一定为凸
  2. 对偶问题可以被理解为寻找原问题目标函数上界或下界的问题
  3. 对于原问题(minmax)得到的最优解求解的目标函数值≥对偶问题的到的最优解求解的目标函数值:minmax≥maxmin,

对于原问题(minmax),其对偶问题是在寻找原问题目标函数下界。

  1. 满足一定条件(凸+slater条件 )时,对偶问题与原问题的解等价(强对偶):minmax=maxmin,
  • 如何根据原问题求对偶问题:
  1. 原问题时求极小,对偶问题就是求极大,反之同理
  2. 一个问题中的约束条件个数等于另一个问题中的变量数(即拉格朗日乘子类别个数:λ,β,μ...)

综上所述,原始问题可以转换为其对偶问题,求最优解x,y转换为求最优解拉格朗日乘子。相比原问题,引入的拉格朗日乘子才是要优化的变量,其他变量均可以用拉格朗日乘子表示。此外使用拉格朗日对偶并没有改变最优解,而是改变(减小)了算法计算复杂程度。如下公式推导

1.2.5 支持向量机(SVM)-拉格朗日乘子

回到SVM分类器,原问题转换为拉格朗日对偶问题,如下所示

拉格朗日函数L(w,b,λ):

计算L(w,b,λ)梯度=0时的w和b:

注意:

带入L(w,b,λ)中得到只含λ变量的L(λ)如下所示

此时原问题优化模型转换为如下所示

kkt条件如下所示

原问题转换为对偶问题后,只含λ变量。λ>0表示对应的输入特征是x极值点(支持向量),恰好位于边缘分界面上, 该点在约束条件与目标函数的切点上即

λ=0表示对应的输入特征x不是极值点(非支持向量),位于边缘分界面外侧即

具备性质:λi>0时,对应的输入特征为支持向量(极值点)在分界面(约束线)上,λi=0时,对应输入特征不是支持向量即输入特征在分界面(约束线)外侧,数学表达式如下所示

如下图所示:方框框选的点是支持向量,对应的λ>0,其余的样本对应的λ=0。

决策分界面:计算拉格朗日乘子λ,求解超平面参数(w,b),得到决策分界面如下:

由于非支持向量对应的拉格朗日乘子λ都等于0,决策分界面进一步可以写作如下所示(只有支持向量起作用,减少计算复杂度):

z:预测样本输入特征。预测函数可以写作如下所示:

1.3 支持向量机(SVM) -线性不可分情况

如下图所示数据集,显示了两种决策分界面B1和B2,尽管决策分界面B1误分类了部分样本,而B2正确分类了全部样本,但是这并不表示B2是一个比B1好的决策边界,B1比B2性能更好,因为它具有较宽的边缘,从而对过拟合不太敏感,具备更强的泛化能力。上一节给出的SVM公式只能构造没有错误的决策边界,不允许误差。本节引入非负松弛变量ξ和惩罚因子C(常量)来修正优化模型,我们允许对于一些样本的错误分类来保证大局上的正确性。

上一节提到的约束线/边缘分界面条件如下所示,采用此约束条件得到的是B2这样的"硬边缘",鲁棒性差,为此我们需要引入正值的松弛变量ξ修正约束条件,"硬边缘"->"软边缘",选择更外侧偏移的支持向量样本点,如图所示,修正约束条件,使得部分样本点在边缘分界面内侧,从而扩大了间隔,提高了泛化能力,如下图所示

   ​        

回顾上一节,对于"硬边缘"SVM,

对于"软边缘"SVM,通过添加正值的松弛变量ξ修正约束条件,允许部分样本点边缘分界面内测,如下所示

如下图所示,

 ​ ​

松弛变量ξ的大小决定了样本相对于决策分界面的位置(函数距离),即ξ提供了决策分界面在训练样本上的误差估计。如下图所示,样本点P到边缘边界面的距离为:

  ​   

引入松弛变量ξ可允许部分样本在边缘分界内测从而使边缘分界面间隔距离增大,但也可能会导致部分样本错误分类,为了避免错分样本的数量太多,需修改目标函数。约束条件中引入松弛变量ξ使边缘分界面间隔距离增大,那么就在目标函数中就引入"惩罚"因子C来平衡松弛变量ξ的影响,来平衡那些松弛变量很大点,修改后的优化模型如下所示:

拉格朗日对偶:L(w,b,λ,μ,ξ):

优化模型

计算L(w,b,λ,μ,ξ)梯度=0时的w、b和μ

  ​

代入L(w,b,λ,μ,ξ)中得:

此时原问题优化模型转换为如下所示

kkt条件如下所示

原问题转换为对偶问题后,只含λ变量。

0<λi<C表示对应的输入特征是x极值点(支持向量),恰好位于边缘分界面上, 该点在约束条件与目标函数的切点上即

-->μ>0-->ξ=0-->:

​,

λi=0表示对应的输入特征x不是极值点(非支持向量),位于边缘分界面外侧即

-->μ=C>0-->ξ=0-->:

​,

λi=C时: 表示对应的输入特征是x极值点(支持向量),位于边缘分界面内测。

-->μ=0-->ξ>0-->:

具备性质:λi>0时,对应的输入特征为支持向量(极值点)在分界面(约束线)上,λi=0时,对应输入特征不是支持向量即输入特征在分界面(约束线)外侧,数学表达式如下所示

如下图所示:方框框选的点是支持向量,会影响决策分界面,对应的λ>0;边缘分界面内测的点也是支持向量,会影响决策分界面,对应λ=C;其余的样本为非支持向量,对决策边界面没有影响,对应的λ=0。

决策分界面:计算拉格朗日乘子λ,求解超平面参数(w,b),得到决策分界面如下:

由于非支持向量对应的拉格朗日乘子λ都等于0,决策分界面进一步可以写作如下所示(只有支持向量起作用,减少计算复杂度):

z:预测样本输入特征。预测函数可以写作如下所示:

注意:"软边缘"SVM和"硬边缘"SVM 优化模型区别是约束条件多了一个惩罚因子C的影响。当C->+∞时,"软边缘"SVM等价于"硬边缘"SVM

1.4 非线性支持向量机(SVM) 

在本节前面的讨论中,我们假设的训练样本是线性可分的,即存在一个划分超平面能将训练样本正确分类,然而在现实任务中,原始样本空间可能并不存在一个能正确划分两类样本的超平面,如下图所示

对这样的问题,需要一个非线性变换 Φ,将数据从原先的特征空间映射到一个新的空间中,决策边界在这个新空间下成为线性的,样本在这个新特征空间内线性可分。令Φ(x)表示将x映射后的特征向量,于是,在映射后的特征空间中,决策分界面可表示为如下

于是原问题优化模型可以表示为如下所示:

拉格朗日对偶优化模型:

1.4.1 非线性支持向量机(SVM) -核函数:用"未知但不完全未知"去估计未知,效果还不错

假设有这样的核函数K(u,v)=Φ(u)·Φ(v),

拉格朗日对偶优化模型:

常用核函数

决策分界面:计算拉格朗日乘子λ,求解超平面参数(w,b),得到决策分界面如下:

由于非支持向量对应的拉格朗日乘子λ都等于0,决策分界面进一步可以写作如下所示(只有支持向量起作用,减少计算复杂度):

1.5 支持向量机(SVM) -SMO算法流程

已知原问题转换为只包含一种变量的拉格朗日对偶目标函数,如下所示

拉格朗日乘子λ是m维的,有m个解,如何求解?用穷举法一点一点逐渐逼近最优解。如何一点一点逼近?SMO算法采用了一种启发式方法。它每次迭代中只优化两个变量,将其他变量视为常数。由于​,假如将​固定,​为本次优化的变量,这样可以得到

如何计算​?求梯度=0的λ1

如上述公式先迭代出优化变量λ1后,还得判断一下λ1是否符合约束条件已知λ1,λ2均需满足0≤λ1≤C,0≤λ2≤C,其中λ2 = sy2-λ1y1y2,即0≤sy2-λ1y1y2≤C-->:得到λ1取值范围[L,H],对迭代优化后的λ1做进一步裁剪,使其在[L,H]内,满足约束条件,得到最终的​。

       

获得(迭代优化后+裁剪后的)后,如何计算?-->已知

-->

计算λ2取值范围[L,H]:

问题来了,要不要对λ2也做裁剪?裁剪之后虽然符合取值范围[L,H],但裁剪后,这个约束条件还能保证符合吗?裁了就不满足约束条件了,不裁的化可能会出现λ2<0这种情况。所以......

分别根据λ1,λ2计算B,然后筛选B

最终得到决策分界面方程

z:预测样本输入特征。预测函数可以写作如下所示:

1.6 支持向量机(SVM) 参数调整

调整SVM参数,主要用来控制模型拟合度(欠拟合、过拟合、合适拟合)以及程序收敛速度。

惩罚项参数C

注:该图片来自吴恩达机器学习

核函数参数

注:该图片来自吴恩达机器学习

1.7 支持向量机(SVM) -可视化(不调用sklearn库)

思路+伪代码:

1、构建采样点网络

# 要画决策边界,必须要有网格
axis = np.linspace(min(X[:,0]),max(X[:,0]),30)
ayis = np.linspace(min(X[:, 1]),max(X[:, 1]),30)
# 将特征向量转换为特征矩阵的函数
# 核心是将两个特征向量广播,以便获取x.shape*y.shape这么多点的横坐标和纵坐标
# 获取x.shape*y.shape这么多个坐标点
X,Y = np.meshgrid(axis,ayis)
# xy就是形成的网络,遍及在画布上密集的点
XY = np.vstack([X.ravel(),Y.ravel()]).T# ravel()降维函数,把每一行都放在第一行,vstack能够将多个结构一致的一维数组按行堆叠起来

2、计算采样点到决策分界面的距离集合

采样点集合:XY

决策分界面:

点到平面距离(含负数):

得到采样点到决策分界面的距离集合D

3、使用contourf函数绘制等高线

# 输入每个新样本到决策样本边界的距离
d = distance(XY)# D:各个点到决策边界距离
D = d.reshape(X.shape)
# 画决策边界到平行决策边界的超平面
plt.contourf(X, Y, D, levels=[-1, 0, 1], alpha=0.5)
plt.show()

1.7.1 支持向量机(SVM) -可视化(不调用sklearn库)效果图

核函数:liner(C=+∞)

核函数:poly (C=+∞)

核函数:rbf (C=+∞)

核函数:liner(C=0.2)

核函数:poly (C=0.00001)

核函数:rbf (C=1)

支持向量机SVM原理解析相关推荐

  1. 机器学习实战 支持向量机SVM 代码解析

    机器学习实战 支持向量机SVM 代码解析 <机器学习实战>用代码实现了算法,理解源代码更有助于我们掌握算法,但是比较适合有一定基础的小伙伴.svm这章代码看起来风轻云淡,实则对于新手来说有 ...

  2. 统计学习方法|支持向量机(SVM)原理剖析及实现

    欢迎直接到我的博客查看最近文章:www.pkudodo.com.更新会比较快,评论回复我也能比较快看见,排版也会更好一点. 原始blog链接: http://www.pkudodo.com/2018/ ...

  3. 机器学习:支持向量机SVM原理与理解

    引言 --"举牌子:Support Vector Machines " 一直在犹豫要不要写SVM,因为网上已经有很多详细的SVM原理的解释甚至详细推导,而这东西又庞大复杂,想了解的 ...

  4. 支持向量机SVM原理及代码推导

    导包并创建数据 #导包 import numpy as np import matplotlib.pyplot as plt from sklearn.svm import SVC from mpl_ ...

  5. 支持向量机SVM原理(一)

    1 简介 支持向量机基本上是最好的有监督学习算法了.最开始接触SVM是去年暑假的时候,老师要求交<统计学习理论>的报告,那时去网上下了一份入门教程,里面讲的很通俗,当时只是大致了解了一些相 ...

  6. 支持向量机SVM原理

    1 简介 支持向量机基本上是最好的有监督学习算法了.最开始接触SVM是去年暑假的时候,老师要求交<统计学习理论>的报告,那时去网上下了一份入门教程,里面讲的很通俗,当时只是大致了解了一些相 ...

  7. 机器学习-分类之支持向量机(SVM)原理及实战

    支持向量机(SVM) 简介 支持向量机(Support Vector Machine,SVM),是常见的一种判别方法.在机器学习领域,是一个监督学习模型,通常用来进行模式识别.分类及回归分析.与其他算 ...

  8. 支持向量机——SVM原理

    SVM--Support Vector Machine 5.11 update:拉格朗日对偶问题的推导 5.15 update:SMO算法推导 5.17 update:sklearn实现 文章目录 S ...

  9. 支持向量机(SVM)原理及实现

    一.原理: 以一个二分类为例(y = -1,1):希望支持向量间的距离尽可能远. 我们可以看到上面三个方法的效果: 分类 效果 H1 无法完成分类 H2 robost性较差(在新的数据集上健壮性较差) ...

最新文章

  1. Caused by: org.gradle.api.InvalidUserDataException: NDK not configured
  2. BERT拿下最佳长论文奖!NAACL 2019最佳论文奖公布
  3. 精通Zookeeper系列开篇:进大厂不得不学的分布式协同利器!
  4. List集合存入int类型值1,remove(1)方法按下标还是按对象删除信息
  5. redis实现session共享,哨兵
  6. 如何阅读《深入理解计算机系统》?(文末送书)
  7. android 一个字符串分两行显示_重新梳理Android权限管理
  8. 在linux桌面上显示图标
  9. 字符串过滤html代码
  10. fragstats移动窗口
  11. Navicat 中文破解版
  12. at android.widget.Toast$TN.handleShow(Toast.java:501)自定义布局异常
  13. 点击电脑桌面图标就点计算机图标老是出现是否删除快捷方式,电脑桌面上的快捷方式图标总是有小箭头怎么删掉...
  14. Word 2003 视频教程(转)
  15. 新手入门刷题(专题二)排序 (第一部分)
  16. 正常卸载Microsoft Office后无法重新安装?
  17. 隧道保活超时或协商超时_丰巢快递柜超时收费的法律分析
  18. 《运营力——微信公众号 设计 策划 客服 管理 一册通》一一1.2 团队岗位介绍...
  19. MIME类型,Content-Type
  20. Pygame-飞机大战

热门文章

  1. 【DIV 盒子模型】
  2. java期末课程设计----模拟银行业务(带界面)
  3. html弧形列表效果,jQuery效果 弧形弹出菜单
  4. 宝宝语录——太阳烫天狗嘴巴了
  5. AUTOCAD——圆心标注
  6. Navicat for MySQL 数据库应用 (三)
  7. pyecharts 饼图绘制
  8. OpenCV-Python (Sobel算子)
  9. spring boot guide 翻译
  10. enclosing的意思_enclosing class是什么意思