SVM更像是机器学习方法领域的集大成者,相比而言,近来流行的神经网络其实是个古老的算法, 只是随着目前计算机性能的提升才又被提起。SVM不好理解,到现在能完整梳理推导出全流程着实费了不少时间和精力。网上的教程也是很多,但觉得讲解较好的还是李航的统计学习方法和这位大牛的博文。本文也是在结合这些资料的基础上,加上自己的一些理解和梳理。
1、感知机
先说下感知机,感知机是一个极简单的线性分类模型,只在数据集是线性可分的情况下适用,当数据线性不可分时就根本停不下来。感知机的分类函数是这样的
f(x)=sign(wx+b)
f
(
x
)
=
s
i
g
n
(
w
x
+
b
)
,其中,
w∈Rn
w
∈
R
n
是权值,
b∈R
b
∈
R
是偏置。
感知机的目标相比SVM来说,只是找到能将正负实例点完全正确分开的分离超平面,这样的分离超平面通常也是很多的。损失函数可以选择的是误分类点的个数,但是这样的损失函数不是参数
w,b
w
,
b
的连续可导函数,不易优化。定义输入空间
Rn
R
n
中任一点
x0
x
0
到超平面
S
S
的距离:
对于误分类的实例
(xi,yi)
(
x
i
,
y
i
)
来说,
−yi(w⋅xi+b)>0
−
y
i
(
w
⋅
x
i
+
b
)
>
0
成立。因此误分类点
xi
x
i
到超平面的距离为
−1||w||yi(w⋅xi+b)
−
1
|
|
w
|
|
y
i
(
w
⋅
x
i
+
b
)
。于是,所有误分类的点到超平面的总距离为
−1||w||∑xi∈Myi(w⋅xi+b)
−
1
|
|
w
|
|
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
,不考虑
1||w||
1
|
|
w
|
|
就得到感知机的损失函数为
L(w,b)=−∑xi∈Myi(w⋅xi+b)
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
,其中
M
M
是误分类点的集合。
损失函数的优化采用随机梯度下降(SGD),就是在优化的时候不是一次使所有的误分类点梯度下降,而是一次随机选取一个误分类点所有梯度下降(所有维度同时下降)。
损失函数
L(w,b)
L
(
w
,
b
)
的梯度如下:
▽w=−∑xi∈Myixi
▽
w
=
−
∑
x
i
∈
M
y
i
x
i
▽b=−∑xi∈Myi
▽
b
=
−
∑
x
i
∈
M
y
i
随机选出一个误分类点
(xi,yi)
(
x
i
,
y
i
)
,对
w,b
w
,
b
更新:
w←w+ηyixi
w
←
w
+
η
y
i
x
i
b←b+ηyi
b
←
b
+
η
y
i
上面
η(0<η≤1)
η
(
0
<
η
≤
1
)
是步长即学习率,
w,b
w
,
b
每次是在负梯度方向上改变。