SVM 支持向量机
SupportVectorMachine
1. 概念
SVM是个二分类的分类模型。也就是说,给定一个包含正例和反例(正样本点和负样本点)的样本集合,支持向量机的目的是寻找一个超平面来对样本进行分割,把样本中的正例和反例用超平面分开,但是不是简单地分看,其原则是使正例和反例之间的间隔最大。学习的目标是在特征空间中找到一个分类超平面wx+b=0,分类面由法向量w和截距b决定。分类超平面将特征空间划分两部分,一部分是正类,一部分是负类。法向量指向的一侧是正类,另一侧为负类。
在二维空间,分类的就是线,如果是三维的,分类的就是面了,对于更高维,一般将任何维的分类边界都统称为超平面。

需要确定一个分类线使他最公平,正如黑色线一样。
2.线性可分SVM与硬间隔最大化
SVM试图寻找一个超平面来对样本进行分割,把样本中的正例和反例用超平面分开,尽最大的努力使正例和反例之间的间隔margin最大。关心求得的超平面能够让所有点中离它最近的点具有最大间距。

假设我们有N个训练样本{(x1, y1),(x2, y2), …, (xN, yN)},x是d维向量,而yi∊{+1, -1}是样本的标签,分别代表两个不同的类。
线性分类器(超平面)即为f(x)=sgn(wTx+b)
g(x)=wTx+b=0就是我们要寻找的分类超平面
上图中找到两个和这个超平面平行和距离相等的超平面:
H1:y=wTx+b=1 和 H2:y=wTx+b=−1
对任何的H1和H2,我们都可以归一化系数向量w,这样就可以得到H1和H2表达式的右边分别是+1和-1了
两个平面需要满足两个条件:(1)没有任何样本在这两个平面之间;(2)这两个平面的距离需要最大。
对于条件2,最大化这个距离,所以就存在一些样本处于这两条线上,他们叫支持向量。
对于两平行直线ax+by=c1与ax+by=c2
根据平行直线距离公式d=|c1−c2|a2+b2√
H1:w1x1+w2x2=1和H2:w1x1+w2x2=−1
H1与H2的距离即是|1+1|w21+w22√=2||w||
目标即最大化margin=2||w||
问题转换成求
min12||w⃗ ||2
约束条件对于任意(xi→,yi):
yi(wi→xi→+b)≥1,
3.Dual优化(带约束条件的最优化问题)
利用拉格朗日对偶性将原始问题转换为对偶问题(后面的x均代表向量)
假设优化问题为求f(x)min,限制条件为hi(x)=0,i=1,2...,n
引入拉格朗日因子,得到拉格朗日函数:
L(x,α)=f(x)+α1h1(x)+α2h2(x)+...+αnhn(x)
对x求极值,也就是对x求导,导数为0,得到α关于x的函数
再代入拉格朗日函数就变成(只有一个变量(向量)α):
W(α)=L(x(α),α)
同样是求导另其等于0,解出α即可。需要注意的是,我们把原始的问题叫做primal problem,转换后的形式叫做dual problem。需要注意的是,原始问题是最小化,转化为对偶问题后就变成了求最大值了。
对于本题中的不等式约束问题同样也是这样操作
4.SVM优化的对偶问题
Primalproblem:
min12||w||2
s.t.yi(wxi+b)≥1
同样的方法引入拉格朗日乘子,我们就可以得到以下拉格朗日函数:
L(w,b,α)=12wTw−∑i=1Nαiyi(wxi−b)
然后对L(w,b,α)分别求w和b的极值
∂L∂w=0,∂L∂b=0,a≥0
求解导数为0的式子可得
w=∑i=1Nαiyixi
∑i=1Nαiyi=0
带入拉格朗日函数可得
W(α)=∑i=1nαi−12∑i=1,j=1nαiαjyiyjxTixj
(αi≥0,∑i=1nαiyi=0)
这就是Dual problem,(如果我们知道α,我们就知道了w。反过来,如果我们知道w,也可以知道α)。这时候我们就变成了求对α的极大,即是关于对偶变量α的优化问题(没有了变量w,b,只有α)。当求解得到最优的α后,就可以同样代入到上面的公式,导出w和b*了,最终得出分离超平面和分类决策函数。也就是训练好了SVM。
对于新样本x⃗ ,就可以这样分类了
f(x⃗ )=sgn(w⃗ Tx⃗ +b)=sgn(∑i=1Nαiyi(x⃗ ix⃗ )+b)
其实很多的αi都是0,也就是说w只是一些少量样本的线性加权值。这种“稀疏”的表示实际上看成是KNN的数据压缩的版本。也就是说,以后新来的要分类的样本首先根据w和b做一次线性运算,然后看求的结果是大于0还是小于0来判断正例还是负例。现在有了αi,我们不需要求出w,只需将新来的样本和训练数据中的所有样本做内积和即可。

5.软间隔最大化
偏离正常位置很远的数据点,我们称之为outlier,它有可能是采集训练样本的时候的噪声,也有可能是标数据标错了,把正样本标成负样本了。为了处理这种情况,我们允许数据点在一定程度上偏离超平面。也就是允许一些点跑到H1和H2之间,也就是他们到分类面的间隔会小于1。

原来的约束条件变为:

我们在目标函数里面增加一个惩罚项,新的模型就变成:

其中ξi表示松弛变量,我们要求的是尽可能小的目标函数值。这里的C是离群点的权重,C越大表明离群点对目标函数影响越大,也就是越不希望看到离群点。这时候,间隔也会很小。
推导后,偶优化问题变成如下

没有参数ξi,b的计算方式也发生了改变
6.核函数


对于真正的线性不可分问题需要将原始样本点通过一个变换,变换到另一个空间,在这个特征空间上是线性可分的。也就是说,对于不可分的数据,现在我们要做两个工作:
1)首先使用一个非线性映射Φ(x)将全部原始数据x变换到另一个特征空间,在这个空间中,样本变得线性可分了;
2)然后在特征空间中使用SVM进行学习。

cover定理:将复杂的模式分类问题非线性地投射到高维空间将比投射到低维空间更可能是线性可分的。
利用非线性映射转化到高维空间的小例子:

但是对于这样的大数据维度,映射函数很难找。
但是通过观察,我们发现SVM优化问题,与分类决策函数,都是计算两个样本的内积,训练SVM和使用SVM都用到了样本间的内积,而且只用到内积。那如果我们可以找到一种方法来计算两个样本映射到高维空间后的内积的值就可以了。核函数就是这样的:
K(xi,xj)=ϕ(xi)Tϕ(xj)
常用的一般是径向基函数
K(x,y)=exp(−||x−y||22σ2)
决策函数变成

注意的是,因为大部分样本的拉格朗日因子αi都是0,所以其实我们只需要计算少量的训练样本和新来的样本的核函数,然后求和取符号即可完成对新来样本x的分类了。从计算的角度,不管Φ(x)变换的空间维度有多高,甚至是无限维(函数就是无限维的),这个空间的线性支持向量机的求解都可以在原空间通过核函数进行,这样就可以避免了高维空间里的计算,而计算核函数的复杂度和计算原始样本内积的复杂度没有实质性的增加。
7.SVM多类分类
“One Against All”方法:比如我们5个类别,第一次就把类别1的样本定为正样本,其余2,3,4,5的样本合起来定为负样本,这样得到一个两类分类器,它能够指出一个样本是还是不是第1类的;第二次我们把类别2 的样本定为正样本,把1,3,4,5的样本合起来定为负样本,得到一个分类器,如此下去,我们可以得到5个这样的两类分类器(总是和类别的数目一致)。
但有时也会出现两种很尴尬的情况,例如拿这个样本问了一圈,每一个分类器都说它是属于它那一类的,或者每一个分类器都说它不是它那一类的,前者叫分类重叠现象,后者叫不可分类现象。

对于争议地区,实际上是通过衡量这个点到三个决策边界的距离,因为到分类面的距离越大,分类越可信。
分类标准:
k∗=argmax(wTkϕ(x)+b)
五角星被分为蓝色类原因是因为距离蓝色分界线更近

8.KKT条件:
化简如下

第一个式子表明如果αi=0,那么该样本落在两条间隔线外。第二个式子表明如果αi=C,那么该样本有可能落在两条间隔线内部,也有可能落在两条间隔线上面,主要看对应的松弛变量的取值是等于0还是大于0,第三个式子表明如果0<αi<C,那么该样本一定落在分隔线上。
