基于支持向量机的分类预测
1.如何看待支持向量机
支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。
2.线性SVM
SVM学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。如下图所示,
w
T
x
+
b
=
0
w^Tx+b=0
wTx+b=0 即为分离超平面,对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机),但是几何间隔最大的分离超平面却是唯一的。
图1
任意超平面可以用下面这个线性方程来描述:
w
T
x
+
b
=
0
w^Tx+b=0
wTx+b=0 。而n维点
x
=
(
x
1
,
x
2
,
x
3
,
.
.
.
x
n
)
x=(\mathtt{x}_1,{x}_2,{x}_3,...{x}_n)
x=(x1,x2,x3,...xn)到直线
A
x
+
B
y
+
C
=
0
Ax+By+C=0
Ax+By+C=0的距离公式为:
∣
w
T
x
+
b
∣
∣
∣
w
∣
∣
\frac{|w^Tx+b|}{||w||}
∣∣w∣∣∣wTx+b∣
其中:
∣
∣
w
∣
∣
=
w
1
2
+
.
.
.
w
n
2
||w||=\sqrt{{w^2_1}+...{w^2_n}}
∣∣w∣∣=w12+...wn2。根据支持向量的定义,支持向量到超平面的距离为d,其他点到超平面的距离大于d。于是有:
{
∣
w
T
x
+
b
∣
∣
∣
w
∣
∣
≥
1
,
y
=
1
;
∣
w
T
x
+
b
∣
∣
∣
w
∣
∣
≤
1
,
y
=
−
1
}
\lbrace{\frac{|w^Tx+b|}{||w||}\geq1,y=1};{\frac{|w^Tx+b|}{||w||}\leq1,y=-1}\rbrace
{∣∣w∣∣∣wTx+b∣≥1,y=1;∣∣w∣∣∣wTx+b∣≤1,y=−1}
最大化支持向量到超平面的距离为:
m
a
x
2
∗
y
(
w
T
x
+
b
)
∣
∣
w
∣
∣
max2*\frac{y(w^Tx+b)}{||w||}
max2∗∣∣w∣∣y(wTx+b)
带入一个支持向量,可以得到:
m
a
x
∗
2
∣
∣
w
∣
∣
max*\frac{2}{||w||}
max∗∣∣w∣∣2
所以得到的最优化问题是:
m
i
n
1
2
∣
∣
w
∣
∣
2
s
.
t
.
y
i
(
w
T
x
i
+
b
)
≥
1
min\frac{1}{2}{||w||^2}s.t. \; \;\;\;y_i(w^Tx_i+b)\geq1
min21∣∣w∣∣2s.t.yi(wTxi+b)≥1
有时,对于某些点
(
x
(
i
)
,
y
(
i
)
)
(x(i),y(i))
(x(i),y(i)),分类器可能会做出错误操作。尽管在开发实际使用的SVM模型时,会设计冗余,避免过拟合,但仍然需要想办法将误差控制在一个较小的范围。可以通过在模型中增加惩罚机制(用
c
c
c表示)解决这个问题。
m
i
n
w
,
b
(
1
2
)
w
T
w
+
c
∑
i
=
1
m
E
i
min_{w,b}(\frac{1}{2})w^Tw+c\sum_{i=1}^m E_i
minw,b(21)wTw+ci=1∑mEi
y
i
(
w
T
x
(
i
)
+
b
)
≥
1
−
E
i
y^i(w^Tx^{(i)}+b)\geq1-E_i
yi(wTx(i)+b)≥1−Ei
设SVM输出结果为E,则上图中出现的E=0则没有惩罚。
若果c非常大,则模型分类更加精准,但支持向量到超平面距离小,容易出现过拟合。
若c=1,则支持向量到超平面距离最大化,尽管会出现一些分类误差,但这是一种较好的方案。
3.约束凸优化问题
构造一个约束独立性方程:
E
i
≥
1
−
t
i
;
t
i
≤
1
E_i\geq1-t_i;t_i\leq1
Ei≥1−ti;ti≤1
E
i
≤
0
;
t
i
≥
1
E_i\leq0;t_i\geq1
Ei≤0;ti≥1
当
1
=
w
T
x
(
i
)
+
b
当1=w^Tx^{(i)}+b
当1=wTx(i)+b
上式表示,如果点远离直线,则误差将为零,否则误差将为
1
−
t
(
i
)
1-t(i)
1−t(i)。
我们需要最小化的是:
l
o
s
s
=
m
i
n
w
,
b
(
1
2
)
w
T
w
+
c
∑
i
=
1
m
m
a
x
(
0
,
1
−
t
i
)
loss=min_{w,b}(\frac{1}{2})w^Tw+c\sum_{i=1}^m max(0,1-t_i)
loss=minw,b(21)wTw+ci=1∑mmax(0,1−ti)
w
h
e
r
e
t
i
=
y
i
(
w
T
x
(
i
)
+
b
)
where t_i=y^i(w^Tx^{(i)}+b)
whereti=yi(wTx(i)+b)
减少损失的方法,即在SVM上应用随机梯度下降法SGD:
gw,gb=0,0
for j in range(batch_start, batch_start+batch_size):
if j<samples:
i=ids[j]
ti=y[i]*(np.dot(w,x[i].T)+bias)
if ti>1:
gw+=0
gb+=0
else:
gw+=c*y[i]*x[i]
gb+=c*y[i]
w=w-n*(w+gw)
bias=bias+n*gw
4.非线性分类
使用SVM对非线性数据进行分类,需要将数据投影到更高的维度,即通过增加低维数据的特征向量将其转换为高维数据。增加数据特征向量需要消耗巨大的计算资源,这里采用核函数。而这种思路最难的点,是为你自己的模型选择一个合适的核函数。这里推荐一种自动调参方法GridSearch。将多种核函数(线性、RBF、多项式、sigmoid等)等标号,依次调用,找到一个最合适自己模型的。