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) f ( x ) = s g n ( w T x + b )
g(x)=wTx+b=0 g ( x ) = w T x + b = 0 就是我们要寻找的分类超平面
上图中找到两个和这个超平面平行和距离相等的超平面:
H1:y=wTx+b=1 H 1 : y = w T x + b = 1 和 H2:y=wTx+b=−1 H 2 : y = w T x + b = − 1
对任何的H1和H2,我们都可以归一化系数向量w,这样就可以得到H1和H2表达式的右边分别是+1和-1了
两个平面需要满足两个条件:(1)没有任何样本在这两个平面之间;(2)这两个平面的距离需要最大。
对于条件2,最大化这个距离,所以就存在一些样本处于这两条线上,他们叫支持向量。
对于两平行直线 ax+by=c1 a x + b y = c 1 与 ax+by=c2 a x + b y = c 2
根据平行直线距离公式 d=|c1−c2|a2+b2√ d = | c 1 − c 2 | a 2 + b 2
H1:w1x1+w2x2=1 H 1 : w 1 x 1 + w 2 x 2 = 1 和 H2:w1x1+w2x2=−1 H 2 : w 1 x 1 + w 2 x 2 = − 1
H1 H 1 与 H2 H 2 的距离即是 |1+1|w21+w22√=2||w|| | 1 + 1 | w 1 2 + w 2 2 = 2 | | w | |
目标即最大化 margin=2||w|| m a r g i n = 2 | | w | |
问题转换成求
min12||w⃗ ||2
m
i
n
1
2
|
|
w
→
|
|
2
约束条件对于任意
(xi→,yi)
(
x
i
→
,
y
i
)
:
yi(wi→xi→+b)≥1,
y
i
(
w
i
→
x
i
→
+
b
)
≥
1
,
3.Dual优化(带约束条件的最优化问题)
利用拉格朗日对偶性将原始问题转换为对偶问题(后面的
x
x
均代表向量)
假设优化问题为求,限制条件为
hi(x)=0,i=1,2...,n
h
i
(
x
)
=
0
,
i
=
1
,
2...
,
n
引入拉格朗日因子,得到拉格朗日函数:
L(x,α)=f(x)+α1h1(x)+α2h2(x)+...+αnhn(x)
L
(
x
,
α
)
=
f
(
x
)
+
α
1
h
1
(
x
)
+
α
2
h
2
(
x
)
+
.
.
.
+
α
n
h
n
(
x
)
对
x
x
求极值,也就是对求导,导数为0,得到
α
α
关于
x
x
的函数
再代入拉格朗日函数就变成(只有一个变量(向量)):
W(α)=L(x(α),α)
W
(
α
)
=
L
(
x
(
α
)
,
α
)
W(α)=L(x(α),α)
W
(
α
)
=
L
(
x
(
α
)
,
α
)
同样是求导另其等于0,解出α即可。需要注意的是,我们把原始的问题叫做primal problem,转换后的形式叫做dual problem。需要注意的是,原始问题是最小化,转化为对偶问题后就变成了求最大值了。
对于本题中的不等式约束问题同样也是这样操作
4.SVM优化的对偶问题
Primalproblem:
min12||w||2
m
i
n
1
2
|
|
w
|
|
2
s.t.yi(wxi+b)≥1
s
.
t
.
y
i
(
w
x
i
+
b
)
≥
1
同样的方法引入拉格朗日乘子,我们就可以得到以下拉格朗日函数:
L(w,b,α)=12wTw−∑i=1Nαiyi(wxi−b)
L
(
w
,
b
,
α
)
=
1
2
w
T
w
−
∑
i
=
1
N
α
i
y
i
(
w
x
i
−
b
)
然后对 L(w,b,α) L ( w , b , α ) 分别求 w w 和的极值
∂L∂w=0,∂L∂b=0,a≥0
∂
L
∂
w
=
0
,
∂
L
∂
b
=
0
,
a
≥
0
求解导数为0的式子可得
w=∑i=1Nαiyixi
w
=
∑
i
=
1
N
α
i
y
i
x
i
∑i=1Nαiyi=0
∑
i
=
1
N
α
i
y
i
=
0
带入拉格朗日函数可得
W(α)=∑i=1nαi−12∑i=1,j=1nαiαjyiyjxTixj
W
(
α
)
=
∑
i
=
1
n
α
i
−
1
2
∑
i
=
1
,
j
=
1
n
α
i
α
j
y
i
y
j
x
i
T
x
j
(αi≥0,∑i=1nαiyi=0)
(
α
i
≥
0
,
∑
i
=
1
n
α
i
y
i
=
0
)
这就是Dual problem,(如果我们知道α,我们就知道了w。反过来,如果我们知道w,也可以知道α)。这时候我们就变成了求对α的极大,即是关于对偶变量α的优化问题(没有了变量w,b,只有α)。当求解得到最优的α后,就可以同样代入到上面的公式,导出w和b*了,最终得出分离超平面和分类决策函数。也就是训练好了SVM。
对于新样本
x⃗
x
→
,就可以这样分类了
f(x⃗ )=sgn(w⃗ Tx⃗ +b)=sgn(∑i=1Nαiyi(x⃗ ix⃗ )+b)
f
(
x
→
)
=
s
g
n
(
w
→
T
x
→
+
b
)
=
s
g
n
(
∑
i
=
1
N
α
i
y
i
(
x
→
i
x
→
)
+
b
)
其实很多的αi都是0,也就是说w只是一些少量样本的线性加权值。这种“稀疏”的表示实际上看成是KNN的数据压缩的版本。也就是说,以后新来的要分类的样本首先根据w和b做一次线性运算,然后看求的结果是大于0还是小于0来判断正例还是负例。现在有了αi,我们不需要求出w,只需将新来的样本和训练数据中的所有样本做内积和即可。
5.软间隔最大化
偏离正常位置很远的数据点,我们称之为outlier,它有可能是采集训练样本的时候的噪声,也有可能是标数据标错了,把正样本标成负样本了。为了处理这种情况,我们允许数据点在一定程度上偏离超平面。也就是允许一些点跑到H1和H2之间,也就是他们到分类面的间隔会小于1。
原来的约束条件变为:
我们在目标函数里面增加一个惩罚项,新的模型就变成:
其中 ξi ξ i 表示松弛变量,我们要求的是尽可能小的目标函数值。这里的C是离群点的权重,C越大表明离群点对目标函数影响越大,也就是越不希望看到离群点。这时候,间隔也会很小。
推导后,偶优化问题变成如下
没有参数
ξi
ξ
i
,
b
b
的计算方式也发生了改变
6.核函数
对于真正的线性不可分问题需要将原始样本点通过一个变换,变换到另一个空间,在这个特征空间上是线性可分的。也就是说,对于不可分的数据,现在我们要做两个工作:
1)首先使用一个非线性映射Φ(x)将全部原始数据x变换到另一个特征空间,在这个空间中,样本变得线性可分了;
2)然后在特征空间中使用SVM进行学习。
cover定理:将复杂的模式分类问题非线性地投射到高维空间将比投射到低维空间更可能是线性可分的。
利用非线性映射转化到高维空间的小例子:
但是对于这样的大数据维度,映射函数很难找。
但是通过观察,我们发现SVM优化问题,与分类决策函数,都是计算两个样本的内积,训练SVM和使用SVM都用到了样本间的内积,而且只用到内积。那如果我们可以找到一种方法来计算两个样本映射到高维空间后的内积的值就可以了。核函数就是这样的:
常用的一般是径向基函数
K(x,y)=exp(−||x−y||22σ2)
K
(
x
,
y
)
=
e
x
p
(
−
|
|
x
−
y
|
|
2
2
σ
2
)
决策函数变成
K(x,y)=exp(−||x−y||22σ2)
K
(
x
,
y
)
=
e
x
p
(
−
|
|
x
−
y
|
|
2
2
σ
2
)