支持向量机(support vector machine)是一个非常强大并且有多种功能的机器学习模型,能够处理线性或非线性分类问题、回归问题,同时还可以做异常值的检测。SVM特别适合应用于复杂但中小规模数据集的分类问题。
支持向量机按照是否线性可分,可分为线性支持向量机,非线性支持向量机。本篇我们将对线性支持向量机原理进行总结。
1)线性分类器到线性支持向量机
对于线性可分的数据集
D={(xi,yi)}i=1n,
xi∈Rd,
yi∈{−1,1},对于任意一个
xi,满足
{wTxi+b≥0时yi^=1wTxi+b<0时yi^=−1
我们可以看出,其决策边界为
wTx+b=0,对于这样的线性可分的数据,我们总可以找到无数条线将其分开,但是哪一条决策边界既能将所有的数据准确的分开,同时在新的数据上也能表现不错呢?
下图是鸢尾花的部分数据,这两个种类能够被非常清晰,非常容易的用一条直线分开(即线性可分)。左图显示了三种可能的线性分类器的判定边界,其中虚线表示的线性模型判定边界很差,甚至不能正确的划分类别,另外两个线性模型在这个数据集表现很好,但是它们的判定边界离样本点很近,在新的数据上可能不会表现很好。相反,右边的SVM判定边界实线既能够很开两个类,而且还能够尽可能的远离了最近的样本点。你可以认为SVM分类器让两个类之间保持尽可能宽的”街道“(图中的两个平行的虚线),尽可能宽的”街道“就叫做最大间隔距离。
当我们增加远离虚线外的样本,这并不会影响决策边界,因为决策边界是由“街道”(平行的虚线)边缘的样本决定的,这些决定决策边界的样本称为支持向量(support vector),如上图中的虚线上的两个被圆圈圈出来的点。
2)硬间隔分类的目标函数
对于线性可分数据集
D={(xi,yi)}i=1n,
xi∈Rd,
yi∈{−1,1},决策边界为
wTX+b=0,支持向量为
{wTxi+b=1wTxi+b=−1
下面我们来推导SVM的目标函数。我们先在决策边界上取两个点
x1,x2,
x1,x2满足:
wTx1+b=0
wTx2+b=0
将两式相减,得:
wT(x1−x2)=0,因此
wT垂直
x1−x2。
同样我们对决策边界做垂线,垂线相交于支持向量的点为
x+,x−,
x+−x−垂直决策边界。转成数学语言为:
w ∣∣ x+−x−,因此支持向量间隔距离可以表示为:
x+−x−=λw。
已知,
wTx++b=1,将
x+=λw+−x−带入得,
wT(λw+−x−)+b=1
wTλw+wTx−+b=1,其中
wTx−+b=−1
wTλw−1=1
wTλw=2
λ=wTw2
将
λ=wTw2带入间隔距离公式
x+−x−=λw,得:
x+−x−=∣∣w∣∣12
因此对于线性可分支持向量的目标函数为:
maximize∣∣w∣∣12
s.t.
{wTxi+b≥1 if y^=1wTxi+b<−1 if y^=−1
将约束条件合并,目标函数为:
maximize∣∣w∣∣12
s.t.
(wTxi+b)yi≥1
由于我们习惯求取最小值,且一范式在0处不可导,因此对目标函数取导数转化成求取最小值问题,并取
w的二范式,目标函数变为:
minimize2∣∣w∣∣22
s.t.
(wTxi+b)yi≥1
2)软间隔分类的目标函数
硬间隔分类有两个问题:首先,数据必须线性可分,其次,对异常值非常敏感。下图展示了带有一个异常值的鸢尾花数据(左图),是不可能找到一个硬间隔分类,右边的图中存在异常值,使的间隔距离比上图中的间隔距离窄了很多,判定边界和没有异常点的判定边界也非常不一样,这样的判定边界很难一般化。
为了避免这些问题,我们更加愿意使用更加软性的模型。假如我们能够在尽可能宽的间隔距离和间隔违规(比如样本在分割间隔中间,甚至有样本被分类错误)找到一个很好的平衡,那我们既可以保证了间隔最大,也保证了模型的一般化,这就叫做软间隔分类,又叫线性支持向量机。
为了获得软间隔(线性支持向量机)的目标函数,我们需要对每一个样本应用一个松弛变量
ε(i)(ε(i)≥0),使得函数间隔加上松弛变量大于等于1,
ε(i)表示第
i个样本允许违规间隔约束的程度。我们现在有两个不一致的目标:一个是使松弛变量尽可能的小,从而减小间隔违规,另一个是使
2∣∣w∣∣22尽量小,从而增大间隔。这时可以增加一个超参数
λ,让它在两个目标之间找到权衡。
因此,软间隔分类的目标函数为:
minimize2∣∣w∣∣22+λ∑i=1nεi
s.t.
(wTxi+b)yi≥1−εi
(i=1,2,...n)
εi≥0 (i=1,2,...n)
3)软间隔分类的损失函数
软间隔分类的目标函数为:
minimize2∣∣w∣∣22+λ∑i=1nεi
s.t.
(wTxi+b)yi≥1−εi
(i=1,2,...n)
εi≥0 (i=1,2,...n)
对约束条件
(wTxi+b)yi≥1−εi进行变形,
εi≥1−(wTxi+b)yi。当我们求取目标函数的最小值时,可以进行一下等价替换。
{εi≥1−(wTxi+b)yiεi≥0⇔max(0,1−(wTxi+b)yi)
因此,我们的目标函数变为:
minimize2∣∣w∣∣22+λ∑i=1nmax(0,1−(wTxi+b)yi)
本质上
ε是损失项,
2∣∣w∣∣22为
L2正则。当
εi≤0时,没有损失产生;当
εi>0时,产生损失,
εi=1−(wTxi+b)yi)。
以上函数即为软间隔分类的损失函数:Hinge损失,函数图像如下。
4)随机梯度下降算法优化Hinge损失函数
由上节可知线性支持向量机的损失函数为:
minimize2∣∣w∣∣22+λ∑i=1nmax(0,1−(wTxi+b)yi)
当
1−(wTxi+b)yi≤0时,损失函数为
minimize2∣∣w∣∣22;
当
1−(wTxi+b)yi>0,损失函数为
minimize2∣∣w∣∣22+λ∑i=1n1−(wTxi+b)yi;
下面利用SGD对目标函数进行优化,伪代码如下:
初始化
w0,b0
for iter=1,2,....iters:
shuffle({x1,y1}i=1n)
for i=1,2...n:
if 1−(wTxi+b)yi≤0:
w∗=w−η2w
else:
w∗=w−η▽wL(w,b)
b∗=b−η▽bL(w,b)
5)线性支持向量机小结
线性支持向量机优点:
线性支持向量机缺点:
我们下篇就来讨论线性不可分支持向量机和核函数的原理。
(欢迎转载,转载请注明出处。)