支持向量机SVM

部署运行你感兴趣的模型镜像

支持向量机

一.简介

  支持向量机(support vector machines)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题来求解。由简至繁的模型包括:
当训练样本线性可分时,通过硬间隔最大化,学习一个线性可分支持向量机;
当训练样本近似线性可分时,通过软间隔最大化,学习一个线性支持向量机;
当训练样本线性不可分时,通过核技巧和软间隔最大化,学习一个非线性支持向量机;

二、线性可分支持向量机

   给定训练样本集D=(x1,y1),(x2,y2),⋯,(xm,ym)D=(x_1,y_1),(x_2,y_2),⋯,(x_m,y_m)D=(x1,y1)(x2,y2),(xm,ym),其中yi∈{−1,+1}yi∈\{−1,+1\}yi{1,+1},分类学习最基本的想法就是基于训练集DDD在样本空间中找到一个划分超平面,将不同类别的样本分开。

   直观看上去,能将训练样本分开的划分超平面有很多,但应该去找位于两类训练样本“正中间”的划分超平面,即图中红色的那条,因为该划分超平面对训练样本局部扰动的“容忍”性最好,例如,由于训练集的局限性或者噪声的因素,训练集外的样本可能比图中的训练样本更接近两个类的分隔界,这将使许多划分超平面出现错误。而红色超平面的影响最小,简言之,这个划分超平面所产生的结果是鲁棒性的。

2.1. 那什么是线性可分呢?

​    如果一个线性函数能够将样本分开,称这些数据样本是线性可分的。那么什么是线性函数呢?其实很简单,在二维空间中就是一条直线,在三维空间中就是一个平面,以此类推,如果不考虑空间维数,这样的线性函数统称为超平面。我们看一个简单的二维空间的例子,OOO代表正类,XXX代表负类,样本是线性可分的,但是很显然不只有这一条直线可以将样本分开,而是有无数条,我们所说的线性可分支持向量机就对应着能将数据正确划分并且间隔最大的直线。

   那么我们考虑第一个问题,为什么要间隔最大呢?一般来说,一个点距离分离超平面的远近可以表示分类预测的确信度,如图中的A B两个样本点,B点被预测为正类的确信度要大于A点,所以SVM的目标是寻找一个超平面,使得离超平面较近的异类点之间能有更大的间隔,即不必考虑所有样本点,只需让求得的超平面使得离它近的点间隔最大。
   接下来考虑第二个问题,怎么计算间隔?只有计算出了间隔,才能使得间隔最大化。

任意点x⃗\vec{x}x到超平面wT+b=0w^T+b=0wT+b=0的距离:r=w⃗Tx⃗∣∣w∣∣r=\frac{\vec{w}^T\vec{x}}{||w||}r=wwTx
对任意∀\forall正样本(xi⃗,yi)∈D(\vec{x_i},y_i) \in D(xi,yi)D,有
w⃗Txi>c\vec{w}^Tx_i>cwTxi>c时,yi=1y_i=1yi=1
w⃗Txi>c<=>w⃗Txi+b>0<=>w⃗Txi+b>1\vec{w}^Tx_i>c <=>\vec{w}^Tx_i+b>0<=>\vec{w}^Tx_i+b>1wTxi>c<=>wTxi+b>0<=>wTxi+b>1(因为bbb是常数,为了计算方便写成1)
同理对任意∀\forall负样本(xi⃗,yi)∈D(\vec{x_i},y_i) \in D(xi,yi)D,有w⃗Txi+b<−1\vec{w}^Tx_i+b<-1wTxi+b<1时,yi=−1y_i=-1yi=1
f(x)={w⃗Txi+b≥1yi=+1w⃗Txi+b≤−1yi=−1f(x)= \begin{cases} \vec{w}^Tx_i+b\geq1& {y_i=+1}\\ \vec{w}^Tx_i+b \leq-1& {y_i=-1} \end{cases}f(x)={wTxi+b1wTxi+b1yi=+1yi=1
即:yi(w⃗Txi+b)≥1y_i(\vec{w}^Tx_i+b)\geq1yi(wTxi+b)1
其中w⃗\vec{w}w为法向量,决定了超平面的方向,bbb为位移量,决定了超平面与原点的距离。​ 该公式被称为最大间隔假设,yi=+1y_i=+1yi=+1 表示样本为正样本,yi=−1y_i=−1yi=1 表示样本为负样本。
距离超平面w⃗Txi+b=0\vec{w}^Tx_i+b=0wTxi+b=0最近的几个点使上式等号成立,他们被称为”支持向量“。虚线称为边界,两条虚线间的距离称为间隔(margin)。

两条平行线间的距离公式:1−b−(−1−b)∣∣w∣∣=2∣∣w∣∣\frac{1-b-(-1-b)}{||w||} = \frac{2}{||w||}w1b(1b)=w2
两类样本距离最大的因素仅仅和最佳超平面的法向量有关。
至此,我们求得了间隔,SVM的思想是使得间隔最大化,即:
{max⁡    2∣∣w∣∣st.     yi(w⃗Txi+b)≥1,i=1,2,...,n(2.1) \begin{cases} \max\text{ }\text{ }\text{ }\text{ } \frac{2}{||w||}\\ st. \text{ }\text{ }\text{ }\text{ }\text{ } y_i(\vec{w}^Tx_i+b) \geq1,i=1,2,...,n \end{cases}(2.1){max    w2st.     yi(wTxi+b)1,i=1,2,...,n2.1

显然,最大化 2∣∣w∣∣\frac{2}{||w||}w2相当于最小化 ∣∣w∣∣||w||w,为了计算方便,将公式转化成如下公式:
{min⁡   12∣∣w∣∣2st.     yi(w⃗Txi+b)≥1,i=1,2,...,n(2.2) \begin{cases} \min \text{ } \text{ }\text{ } \frac{1}{2}{||w||^2}\\ st. \text{ }\text{ }\text{ }\text{ }\text{ } y_i(\vec{w}^Tx_i+b) \geq1,i=1,2,...,n \end{cases}(2.2){min   21w2st.     yi(wTxi+b)1,i=1,2,...,n2.2
等价于:
{min⁡   12∣∣w∣∣2st.     1−yi(w⃗Txi+b)≤0,i=1,2,...,n(2.3) \begin{cases} \min \text{ } \text{ }\text{ } \frac{1}{2}{||w||^2}\\ st. \text{ }\text{ }\text{ }\text{ }\text{ } 1-y_i(\vec{w}^Tx_i+b) \leq0,i=1,2,...,n \end{cases}(2.3){min   21w2st.     1yi(wTxi+b)0,i=1,2,...,n2.3
该基本型是一个凸二次规划问题,可以采用拉格朗日乘子法对其对偶问题求解,拉格朗日函数:
L(w⃗,b,α⃗)=12∣∣w∣∣2−∑i=1nαi(yi(w⃗Txi+b)−1),其中α>0(2.4)L(\vec{w},b,\vec{\alpha})=\frac{1}{2}||w||^2-\sum_{i=1}^n\alpha_i(y_i(\vec{w}^Tx_i+b)-1),其中\alpha>0(2.4)L(w,b,α)=21w2i=1nαi(yi(wTxi+b)1),α>02.4
w,bw,bw,b求导后:
{w⃗=∑i=1nαiyixi⃗∑i=1nαiyi=0(2.5) \begin{cases} \vec{w}=\sum_{i=1}^n \alpha_iy_i\vec{x_i} \\ \sum_{i=1}^n\alpha_iy_i=0 \end{cases}(2.5){w=i=1nαiyixii=1nαiyi=02.5
将上式带入拉格朗日函数中得到:
{ L(w⃗,b,α⃗)=∑i=1nαi−12∑i=1n∑1=1nαiαjyiyjxi⃗xj⃗∑i=1nαiyi=0αi≥0,i=1,2,...,n(2.6) \begin{cases} \ L(\vec{w},b,\vec{\alpha})=\sum_{i=1}^n \alpha_i-\frac{1}{2} \sum_{i=1}^n\sum_{1=1}^n \alpha_i\alpha_jy_iy_j\vec{x_i}\vec{x_j} \\ \sum_{i=1}^n\alpha_iy_i=0\\ \alpha_i\geq0,i=1,2,...,n \end{cases}(2.6) L(w,b,α)=i=1nαi21i=1n1=1nαiαjyiyjxixji=1nαiyi=0αi0,i=1,2,...,n2.6
原问题就转换为如下关于α\alphaα 的问题:

{ max    ∑i=1nαi−12∑i=1n∑1=1nαiαjyiyjxi⃗xj⃗ st.        ∑i=1nαiyi=0              αi≥0,i=1,2,...,n(2.7) \begin{cases} \ max \text{ }\text{ }\text{ }\text{ }\sum_{i=1}^n \alpha_i-\frac{1}{2} \sum_{i=1}^n\sum_{1=1}^n \alpha_i\alpha_jy_iy_j\vec{x_i}\vec{x_j} \\ \text{ }st.\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\sum_{i=1}^n\alpha_iy_i=0\\ \text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\alpha_i\geq0,i=1,2,...,n \end{cases}(2.7) max    i=1nαi21i=1n1=1nαiαjyiyjxixj st.        i=1nαiyi=0              αi0,i=1,2,...,n2.7
由上可知,不关心单个样本如何,只关心样本件两两的成积。
求解出αi⃗\vec{\alpha_i}αi之后,再求解w⃗\vec{w}wbbb即可得到SVM模型。
f(x⃗)=w⃗x⃗+b=∑1=1αiyixi⃗Txi⃗+b(2.8)f(\vec{x}) =\vec{w}\vec{x}+b= \sum_{1=1} \alpha_iy_i\vec{x_i}^T\vec{x_i}+b(2.8)f(x)=wx+b=1=1αiyixiTxi+b2.8

2.2.SVM的KKT条件

{ min f(x)st.   hj(x)=0,j=1,2...,pgk(x)≤0,k=1,2,...,q(2.9) \begin{cases} \ min \text{ } f(x) \\ st. \text{ }\text{ }\text{ }h_j(x)=0,j=1,2...,p\\ g_k(x)\leq0,k=1,2,...,q \end{cases}(2.9) min f(x)st.   hj(x)=0,j=1,2...,pgk(x)0,k=1,2,...,q2.9

等价于:
{ L(w⃗,b,α⃗)对x求导为零h(x)=0ag(x)=0,a≥0(2.10) \begin{cases} \ L(\vec{w},b,\vec{\alpha})对x求导为零 \\ h(x)=0\\ ag(x)=0,a\geq0 \end{cases}(2.10) L(w,b,α)xh(x)=0ag(x)=0,a02.10
对应的SVM的KKT条件:
{ αi≥0yi(wiTx⃗+b)−1≥0,i=1,2,...,nαiyi(wiTx⃗+b−1)=0(2.11) \begin{cases} \ \alpha_i\geq0 \\ y_i(w_i^T\vec{x}+b)-1\geq0,i=1,2,...,n\\ \alpha_iy_i(w_i^T\vec{x}+b-1)=0 \end{cases}(2.11) αi0yi(wiTx+b)10,i=1,2,...,nαiyi(wiTx+b1=02.11
我们分析一下,对于任意的训练样本 (xi,yi)(x_i,y_i)(xi,yi)
αi=0α_i=0αi=0,则其不会在公式(2.8)中的求和项中出现,也就是说,它不影响模型的训练;
αi>0α_i>0αi>0,则yif(xi)−1=0y_if(x_i)−1=0yif(xi)1=0,也就是 yif(xi)=1y_if(x_i)=1yif(xi)=1,即该样本一定在边界上,是一个支持向量。
这里显示出了支持向量机的重要特征:当训练完成后,大部分样本都不需要保留,最终模型只与支持向量有关。

三、非线性支持向量机和核函数

对于非线性问题,线性可分支持向量机并不能有效解决,要使用非线性模型才能很好地分类。先看一个例子,如下图,很显然使用直线并不能将两类样本分开,但是可以使用一条椭圆曲线(非线性模型)将它们分开。非线性问题往往不好求解,所以希望能用解线性分类问题的方法求解,因此可以采用非线性变换,将非线性问题变换成线性问题。
在这里插入图片描述
对于这样的问题,可以将训练样本从原始空间映射到一个更高维的空间,使得样本在这个空间中线性可分,如果原始空间维数是有限的,即属性是有限的,那么一定存在一个高维特征空间是样本可分。令ϕ(x)表示将 x 映射后的特征向量,于是在特征空间中,划分超平面所对应的的模型可表示为:
f(x)=w⃗Tϕ(x)+b   (3.1)f(x)=\vec{w}^T \phi(x)+b \text{ } \text{ }\text{ } (3.1)f(x)=wTϕ(x)+b   (3.1)
于是有最小化函数:
{min⁡   12∣∣w∣∣2st.     1−yi(w⃗Tϕ(xi)+b)≤0,i=1,2,...,n(3.2) \begin{cases} \min \text{ } \text{ }\text{ } \frac{1}{2}{||w||^2}\\ st. \text{ }\text{ }\text{ }\text{ }\text{ } 1-y_i(\vec{w}^T \phi(x_i)+b) \leq0,i=1,2,...,n \end{cases}(3.2){min   21w2st.     1yi(wTϕ(xi)+b)0,i=1,2,...,n3.2
其对偶问题为:
{ max    ∑i=1nαi−12∑i=1n∑1=1αiαjyiyjϕ(xi)Tϕ(xj) st.        ∑i=1Nαiyi=0              αi≥0,i=1,2,...,n(3.3) \begin{cases} \ max \text{ }\text{ }\text{ }\text{ }\sum_{i=1}^n \alpha_i-\frac{1}{2} \sum_{i=1}^n\sum_{1=1} \alpha_i\alpha_jy_iy_j \phi(x_i)^T \phi(x_j) \\ \text{ }st.\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\sum_{i=1}^N\alpha_iy_i=0\\ \text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\alpha_i\geq0,i=1,2,...,n \end{cases}(3.3) max    i=1nαi21i=1n1=1αiαjyiyjϕ(xi)Tϕ(xj) st.        i=1Nαiyi=0              αi0,i=1,2,...,n3.3

若要对公式(3.3)求解,会涉及到计算 ϕ(xi)Tϕ(yi)\phi(x_i)^T \phi(y_i)ϕ(xi)Tϕ(yi),这是样本 xix_ixixjx_jxj 映射到特征空间之后的内积,由于特征空间的维数可能很高,甚至是无穷维,因此直接计算 ϕ(xi)Tϕ(yi)\phi(x_i)^T \phi(y_i)ϕ(xi)Tϕ(yi)通常是困难的,于是想到这样一个函数:

κ(xi,xj)=<ϕ(xi),ϕ(xj)>=ϕ(xi)Tϕ(xj)   (3.4)\kappa(x_i,x_j)=<\phi(x_i),\phi(x_j)>=\phi(x_i)^T \phi(x_j)\text{ }\text{ }\text{ }(3.4)κ(xi,xj)=<ϕ(xi),ϕ(xj)>=ϕ(xi)Tϕ(xj)   (3.4)
xix_ixixjx_jxj 在特征空间中的内积等于他们在原始样本空间中通过函数κ(xi,xj)\kappa(x_i,x_j)κ(xi,xj)计算的函数值,于是公式(3.3)写成如下:
{ max    ∑i=1nαi−12∑i=1nαiαjyiyjκ(xi,xj) st.        ∑i=1Nαiyi=0              αi≥0,i=1,2,...,n(3.3) \begin{cases} \ max \text{ }\text{ }\text{ }\text{ }\sum_{i=1}^n\alpha_i-\frac{1}{2} \sum_{i=1}^n \alpha_i\alpha_jy_iy_j \kappa(x_i,x_j) \\ \text{ }st.\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\sum_{i=1}^N\alpha_iy_i=0\\ \text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\alpha_i\geq0,i=1,2,...,n \end{cases}(3.3) max    i=1nαi21i=1nαiαjyiyjκ(xi,xj) st.        i=1Nαiyi=0              αi0,i=1,2,...,n3.3
求解后得到:
f(x)=wTϕ(x)+b=∑i=1nαiyiϕ(xi)Tϕ(xj)+b=∑i=1nαiyiκ(xi,xj)+b   (3.4) \begin{aligned} f(x)&={w}^T \phi(x)+b \\ & =\sum_{i=1}^n\alpha_iy_i\phi(x_i)^T \phi(x_j)+b \\ &=\sum_{i=1}^n\alpha_iy_i\kappa(x_i,x_j)+b\end{aligned} \text{ } \text{ }\text{ } (3.4)f(x)=wTϕ(x)+b=i=1nαiyiϕ(xi)Tϕ(xj)+b=i=1nαiyiκ(xi,xj)+b   (3.4)
这里的函数κ(xi,xj)\kappa(x_i,x_j)κ(xi,xj) 就是核函数,在实际应用中,通常人们会从一些常用的核函数里选择(根据样本数据的不同,选择不同的参数,实际上就得到了不同的核函数),下面给出常用的核函数:

  • 线性核:

κ(xi,xj)=xiTxj\kappa(x_i,x_j)=x_i^Tx_jκ(xi,xj)=xiTxj

  • 多项式核(d是多项式的次数,d=1是退化为线性核):
    κ(xi,xj)=(xiTxj)d\kappa(x_i,x_j)=(x_i^Tx_j)^dκ(xi,xj)=(xiTxj)d

  • 高斯核(σ>0\sigma>0σ>0):
    κ(xi,xj)=exp(∣∣xi−xj∣∣22σ2)\kappa(x_i,x_j)=exp(\frac{||x_i-x_j||^2}{2\sigma^2})κ(xi,xj)=exp(2σ2xixj2)

  • 拉普拉斯核(σ>0\sigma>0σ>0):
    κ(xi,xj)=exp(∣∣xi−xj∣∣σ)\kappa(x_i,x_j)=exp(\frac{||x_i-x_j||}{\sigma})κ(xi,xj)=exp(σxixj)

  • sigmiod核(β>0,θ<0\beta>0, \theta<0β>0,θ<0):
    κ(xi,xj)=tanh(βxiTxj+θ)\kappa(x_i,x_j)=tanh(\beta x_i^Tx_j+\theta)κ(xi,xj)=tanh(βxiTxj+θ)

此外,核函数也可以通过组合得到,在此不再赘述。
在这里插入图片描述

四、线性支持向量机(软间隔支持向量机)与松弛变量

4.1、线性支持向量机

  在前面的讨论中,我们假设训练样本在样本空间或者特征空间中是线性可分的,但在现实任务中往往很难确定合适的核函数使训练集在特征空间中线性可分,退一步说,即使瞧好找到了这样的核函数使得样本在特征空间中线性可分,也很难判断是不是由于过拟合造成。
  线性不可分意味着某些样本点 (xi,yi)(x_i,y_i)(xi,yi)不能满足间隔大于等于1的条件,样本点落在超平面与边界之间。为解决这一问题,可以对每个样本点引入一个松弛变量 ξi≥0\xi_i≥0ξi0,使得间隔加上松弛变量大于等于1,这样约束条件变为:
yi(wTxi+b)≥1−ξi   (4.1)y_i(w^Tx_i+b)\geq1-\xi_i \text{ }\text{ }\text{ }(4.1)yi(wTxi+b)1ξi   (4.1)

同时,对于每一个松弛变量 ξi≥0ξ_i≥0ξi0,支付一个代价 ξi≥0ξ_i≥0ξi0,目标函数变为

12∣∣w∣∣2+C∑i=1mξi   (4.2)\frac{1}{2}||w||^2+C\sum_{i=1}^m\xi_i\text{ }\text{ }\text{ }(4.2)21w2+Ci=1mξi   (4.2)

其中 C>0C>0C>0为惩罚参数,CCC值大时对误分类的惩罚增大, CCC值小时对误分类的惩罚减小,公式(4.2)包含两层含义:使 12∣∣w∣∣2\frac{1}{2}||w||^221w2尽量小即间隔尽量大,同时使误分类点的个数尽量小,CCC是调和两者的系数。
有了公式(4.2),可以和线性可分支持向量机一样考虑线性支持向量机的学习过程,此时,线性支持向量机的学习问题变成如下凸二次规划问题的求解(原始问题):
{min⁡   12∣∣w∣∣2+C∑i=1mξist.     yi(wTxi+b)≥1−ξi,i=1,2,...,n(4.3) \begin{cases} \min \text{ } \text{ }\text{ } \frac{1}{2}{||w||^2} + C \sum_{i=1}^m\xi_i\\ st. \text{ }\text{ }\text{ }\text{ }\text{ } y_i(w^Tx_i+b) \geq1-\xi_i,i=1,2,...,n \end{cases}(4.3){min   21w2+Ci=1mξist.     yi(wTxi+b)1ξi,i=1,2,...,n4.3
2、对偶问题
与线性可分支持向量机的对偶问题解法一致,公式(4.3)的拉格朗日函数为:
L(w,b,α,ξ,μ)=12∣∣w∣∣2+C∑i=1mξi+∑i=1nαi(1−ξi−yi(wTxi+b))−∑i=1nμiξi   (4.4)L(w,b,\alpha,\xi,\mu)= \frac{1}{2}{||w||^2} + C \sum_{i=1}^m\xi_i+\sum_{i=1}^n\alpha_i(1-\xi_i-y_i(w^Tx_i+b))-\sum_{i=1}^n\mu_i\xi_i\text{ }\text{ }\text{ }(4.4)L(w,b,α,ξ,μ)=21w2+Ci=1mξi+i=1nαi(1ξiyi(wTxi+b))i=1nμiξi   (4.4)
其中αi>0,μi≥0\alpha_i>0,\mu_i\geq0αi>0,μi0是拉格朗日乘子。
L(w,b,α,ξ,μ)L(w,b,\alpha,\xi,\mu)L(w,b,α,ξ,μ)w,b,ξw,b,\xiw,b,ξ的偏导数为0可得如下:
{w=∑i=1nαiyixi∑i=1nαiyi=0C=αi+μi(4.5) \begin{cases} w=\sum_{i=1}^n \alpha_iy_ix_i \\ \sum_{i=1}^n\alpha_iy_i=0 \\ C=\alpha_i+\mu_i \end{cases}(4.5)w=i=1nαiyixii=1nαiyi=0C=αi+μi4.5
将公式(4.5)代入公式(4.4)得对偶问题:
{ max    ∑i=1nαi−12∑i=1n∑1=1nαiαjyiyjxi⃗xj⃗ st.        ∑i=1nαiyi=0       αi≥0,μi≥0,C=αi+μi,i=1,2,...,n(4.6) \begin{cases} \ max \text{ }\text{ }\text{ }\text{ }\sum_{i=1}^n \alpha_i-\frac{1}{2} \sum_{i=1}^n\sum_{1=1}^n \alpha_i\alpha_jy_iy_j\vec{x_i}\vec{x_j} \\ \text{ }st.\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\sum_{i=1}^n\alpha_iy_i=0 \text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\alpha_i\geq0,\mu_i\geq0,C=\alpha_i+\mu_i,i=1,2,...,n \end{cases}(4.6){ max    i=1nαi21i=1n1=1nαiαjyiyjxixj st.        i=1nαiyi=0       αi0,μi0,C=αi+μi,i=1,2,...,n4.6

解出 α\alphaα 之后,根据公式(4.5)可以求得 www , 进而求得 bbb,可以得到模型:

f(x⃗)=wTx+b=∑1=1αiyixiTxi+b(4.7)f(\vec{x}) =w^Tx+b= \sum_{1=1} \alpha_iy_ix_i^Tx_i+b(4.7)f(x)=wTx+b=1=1αiyixiTxi+b4.7

上述过程的KKT条件为:
{ αi≥0yif(xi)≥1−ξiαi(yif(xi)−1+ξi)=0ξi>0,μiξi=0(4.8) \begin{cases} \ \alpha_i\geq0 \\ y_if(x_i)\geq1-\xi_i\\ \alpha_i(y_if(x_i)-1+\xi_i)=0 \\ \xi_i>0,\mu_i\xi_i=0 \end{cases}(4.8) αi0yif(xi)1ξiαi(yif(xi)1+ξi)=0ξi>0,μiξi=04.8
我们分析一下,对于任意的训练样本 (xi,yi)(x_i,y_i)(xi,yi),总有 αi=0α_i=0αi=0或者yif(xi)−1+ξi=0y_if(x_i)-1+\xi_i=0yif(xi)1+ξi=0,若 αi=0α_i=0αi=0,则其不会在公式(2.8)中的求和项中出现,也就是说,它不影响模型的训练;
αi>0α_i>0αi>0,必有yif(xi)−1+ξi=0y_if(x_i)-1+\xi_i=0yif(xi)1+ξi=0,也就是 yif(xi)=1−ξiy_if(x_i)=1-\xi_iyif(xi)=1ξi,此时该样本是一个支持向量,由于C=αi+μiC=\alpha_i+\mu_iC=αi+μi
αi<Cα_i<Cαi<C,则必有μi>0\mu_i>0μi>0,根据公式(4.8)知 ξi=0\xi_i=0ξi=0,即该样本恰好落在最大间隔的边界上;
αi=Cα_i=Cαi=C,则μi=0\mu_i=0μi=0,此时若 ξi≤1\xi_i\leq1ξi1,则该样本在最大间隔的内部;若ξi>1\xi_i>1ξi>1则样本分类错误。

五、总结

  至此,关于SVM的三类问题:线性可分支持向量机与硬间隔最大化,非线性支持向量机与核函数,线性支持向量机与软间隔最大化一一介绍完毕。
  我们所面对的所有的机器学算法,都是有适用范围的,或者说,我们所有的机器学习算法都是有约束的优化问题。而这些约束,就是我们在推导算法之前所做的假设。
  比如:Logistics Regression,在Logistics Regression中,假设后验概率为Logistics 分布;再比如:LDA假设fk(x)是均值不同,方差相同的高斯分布;这些都是我们在推导算法之前所做的假设,也就是算法对数据分布的要求。
  而对于SVM而言,它并没有对原始数据的分布做任何的假设,这就是SVM和LDA、Logistics Regression区别最大的地方。这表明SVM模型对数据分布的要求低,那么其适用性自然就会更广一些。如果我们事先对数据的分布没有任何的先验信息,即,不知道是什么分布,那么SVM无疑是比较好的选择。
  但是,如果我们已经知道数据满足或者近似满足高斯分布,那么选择LDA得到的结果就会更准确。如果我们已经知道数据满足或者近似满足Logistics 分布,那么选择Logistics Regression就会有更好的效果。

六、python代码实现

from sklearn import svm
import matplotlib.pyplot as plt
import numpy as np

x = [[1, 8], [3, 20], [1, 15], [3, 35], [5, 35], [4, 40], [7, 80], [6, 49]]
y = [1, 1, -1, -1, 1, -1, -1, 1]
# 线性核函数(linear),多项式核函数(poly),高斯核函数(rbf),拉普拉斯核函数(laplace)和Sigmoid核函数
"""
    核函数(这里简单介绍了sklearn中svm的四个核函数,还有precomputed及自定义的)
        
    LinearSVC:主要用于线性可分的情形。参数少,速度快,对于一般数据,分类效果已经很理想
    RBF:主要用于线性不可分的情形。参数多,分类结果非常依赖于参数
    polynomial:多项式函数,degree 表示多项式的程度-----支持非线性分类
    Sigmoid:在生物学中常见的S型的函数,也称为S型生长曲线

    说明2:根据设置的参数不同,得出的分类结果及显示结果也会不同
"""
clf = svm.SVC()  # 默认参数:kernel='rbf'
# clf = svm.LinearSVC() # 其不支持kernel参数,因为设计思想就是线性分类。如果确定数据, 可以进行线性划分,可以选择此函数
clf.fit(x, y)
# 预测
result = clf.predict([[2, 2]])  # 两个方括号表示传入的参数是矩阵而不是list
print("预测结果:", result)

print(np.array(x).reshape(1, -1))
# 根据训练出的模型绘制样本点
for i in x:
    # 我们不知道z的shape属性是多少,
    # #但是想让z变成只有一行,列数不知道多少,
    # #通过`z.reshape(1,-1)`,Numpy自动计算出有16行,
    # 新的数组shape属性为(16, 1),与原来的(2, 8)配套。
    print("====", np.array(i).reshape(1, -1))
    res = clf.predict(np.array(i).reshape(1, -1))
    if res > 0:
        plt.scatter(i[0], i[1], c='r', marker='*')
    else:
        plt.scatter(i[0], i[1], c='g', marker='*')
# 生成随机实验数据(15行2列)
rdm_arr = np.random.randint(1, 15, size=(15, 2))
# 回执实验数据点
for i in rdm_arr:
    res = clf.predict(np.array(i).reshape(1, -1))
    if res > 0:
        plt.scatter(i[0], i[1], c='r', marker='.')
    else:
        plt.scatter(i[0], i[1], c='g', marker='.')
# 显示绘图结果
plt.show()

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值