Support Vector Machine (SVM)
本节内容:
支持向量机(SVM)是一种监督式分类学习算法,它非常适合于线性可分数据的分类。本节介绍SVM目标函数的形式和SVM的特点。
相关机器学习概念:
支持向量机(Support Vector Machine, SVM)
大间隔分类器(Large Margin Classifiers)
线性可分数据(Linear Separable)
1. Optimization Objective
回顾logistic回归,我们有以下规定:
预测
y
=
1
y=1
y=1时,有
h
θ
(
x
)
≈
1
h_\theta(x)≈1
hθ(x)≈1,
θ
T
x
≥
0
\theta^T x≥0
θTx≥0
预测
y
=
0
y=0
y=0时,有
h
θ
(
x
)
≈
0
h_\theta(x)≈0
hθ(x)≈0,
θ
T
x
≤
0
\theta^T x≤0
θTx≤0
logistic回归的损失函数(unregularized):
J
(
θ
)
=
1
m
∑
i
=
1
m
[
−
y
(
i
)
l
o
g
(
1
1
+
e
−
θ
T
x
(
i
)
)
−
(
1
−
y
(
i
)
)
l
o
g
(
1
−
1
1
+
e
−
θ
T
x
(
i
)
)
]
J(\theta)=\frac{1}{m}\sum_{i=1}^{m}[-y^{(i)}log(\frac{1}{1+e^{-\theta^T x^{(i)}}})-(1-y^{(i)})log(1-\frac{1}{1+e^{-\theta^T x^{(i)}}})]
J(θ)=m1i=1∑m[−y(i)log(1+e−θTx(i)1)−(1−y(i))log(1−1+e−θTx(i)1)]
为了构造SVM,我们修改
−
l
o
g
(
1
1
+
e
−
θ
T
x
)
-log(\frac{1}{1+e^{-\theta^T x}})
−log(1+e−θTx1)项,使得当
z
=
θ
T
x
≥
1
z=\theta^T x≥1
z=θTx≥1时输出0,
z
≤
1
z≤1
z≤1时,我们用一条单调递减的直线替代原有的sigmoid函数。同样地,修改
−
l
o
g
(
1
−
1
1
+
e
−
θ
T
x
)
-log(1-\frac{1}{1+e^{-\theta^T x}})
−log(1−1+e−θTx1)项,使得当
z
≤
−
1
z≤-1
z≤−1时,输出0,
z
≥
−
1
z≥-1
z≥−1时,则用一条单调递增的直线替代原有的sigmoid函数:
将修改的两项分别记作
c
o
s
t
1
(
z
)
cost_1(z)
cost1(z)和
c
o
s
t
0
(
z
)
cost_0(z)
cost0(z),
c
o
s
t
1
(
z
)
cost_1(z)
cost1(z)是y=1时的分类损失,
c
o
s
t
0
(
z
)
cost_0(z)
cost0(z)是y=0时的损失:
z
=
θ
T
x
z=\theta^T x
z=θTx
c
o
s
t
1
(
z
)
=
m
a
x
{
0
,
k
(
1
−
z
)
}
cost_1(z)=max\{0,k(1-z)\}
cost1(z)=max{0,k(1−z)}
c
o
s
t
0
(
z
)
=
m
a
x
{
0
,
k
(
1
+
z
)
}
cost_0(z)=max\{0,k(1+z)\}
cost0(z)=max{0,k(1+z)}
将以上表达式替换进logistic回归的损失函数表达式,可以得到SVM的损失函数(regularized):
J
(
θ
)
=
1
m
∑
i
=
1
m
[
y
(
i
)
c
o
s
t
1
(
θ
T
x
(
i
)
)
+
(
1
−
y
(
i
)
)
c
o
s
t
0
(
θ
T
x
(
i
)
)
]
+
λ
2
m
∑
j
=
1
n
θ
j
2
J(\theta)=\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}cost_1(\theta^T x^{(i)})+(1-y^{(i)})cost_0(\theta^T x^{(i)})]+\frac{\lambda}{2m}\sum_{j=1}^n\theta_j^2
J(θ)=m1i=1∑m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+2mλj=1∑nθj2
我们可以通过乘以一个常数m来优化该表达式,这不会影响参数的优化结果:
J
(
θ
)
=
∑
i
=
1
m
[
y
(
i
)
c
o
s
t
1
(
θ
T
x
(
i
)
)
+
(
1
−
y
(
i
)
)
c
o
s
t
0
(
θ
T
x
(
i
)
)
]
+
λ
2
∑
j
=
1
n
θ
j
2
J(\theta)=\sum_{i=1}^{m}[y^{(i)}cost_1(\theta^T x^{(i)})+(1-y^{(i)})cost_0(\theta^T x^{(i)})]+\frac{\lambda}{2}\sum_{j=1}^n\theta_j^2
J(θ)=i=1∑m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+2λj=1∑nθj2
更进一步,根据惯例,我们用C,而不是
λ
\lambda
λ作为正则化参数:
J
(
θ
)
=
C
∑
i
=
1
m
[
y
(
i
)
c
o
s
t
1
(
θ
T
x
(
i
)
)
+
(
1
−
y
(
i
)
)
c
o
s
t
0
(
θ
T
x
(
i
)
)
]
+
1
2
∑
j
=
1
n
θ
j
2
J(\theta)=C\sum_{i=1}^{m}[y^{(i)}cost_1(\theta^T x^{(i)})+(1-y^{(i)})cost_0(\theta^T x^{(i)})]+\frac{1}{2}\sum_{j=1}^n\theta_j^2
J(θ)=Ci=1∑m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+21j=1∑nθj2
上式就是SVM的损失函数的最终表达形式。不难看出 C = 1 λ C=\frac{1}{\lambda} C=λ1. 之所以这样处理,是因为在SVM中我们希望控制的是目标函数的前一项。过拟合时,我们减小C,欠拟合时,增大C。
需要注意的是,不同于logistic回归的假设函数,SVM的假设函数输出的不是y=0或1的概率,它的输出非1即0:
2. Large Margin Intuition
SVM是一类大间隔分类器(Large Margin Classifiers),所谓间隔,指的是决策边界到最近的样本的距离。SVM的决策边界总是尽可能地远离正样本和负样本,将正样本和负样本以一个大的间隔区分开来。
如果我们有以下线性可分(Linear Separable)的样本,SVM会选择下图中黑线决定的决策边界,而非绿线或者粉线。
(线性可分是指可用一条直线将正负样本区分开来)
为什么SVM会得到这样一个决策边界呢?
可以看到,对于SVM,为了最小化
c
o
s
t
1
(
z
)
cost_1(z)
cost1(z)和
c
o
s
t
0
(
z
)
cost_0(z)
cost0(z)的值:
如果
y
=
1
y=1
y=1,我们希望
θ
T
x
≥
1
\theta^T x≥1
θTx≥1,而不仅仅是
θ
T
x
≥
0
\theta^T x≥0
θTx≥0
如果
y
=
0
y=0
y=0,我们希望
θ
T
x
≤
−
1
\theta^T x≤-1
θTx≤−1,而不仅仅是
θ
T
x
≤
0
\theta^T x≤0
θTx≤0
这一更高的要求相当于在SVM中嵌入了一个安全的距离因子。
这一距离因子只有当常数C的值很大时才会发挥作用。如果我们设置的常数C非常大(如C=100,000),为了最小化目标函数,参数优化会让C所控制的
∑
i
=
1
m
[
y
(
i
)
c
o
s
t
1
(
θ
T
x
(
i
)
)
+
(
1
−
y
(
i
)
)
c
o
s
t
0
(
θ
T
x
(
i
)
)
]
\sum_{i=1}^{m}[y^{(i)}cost_1(\theta^T x^{(i)})+(1-y^{(i)})cost_0(\theta^T x^{(i)})]
∑i=1m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]项尽可能地等于零。目标函数简化为:
J
(
θ
)
=
C
⋅
0
+
1
2
∑
j
=
1
n
θ
j
2
=
1
2
∑
j
=
1
n
θ
j
2
J(\theta)=C·0+\frac{1}{2}\sum_{j=1}^n\theta_j^2=\frac{1}{2}\sum_{j=1}^n\theta_j^2
J(θ)=C⋅0+21j=1∑nθj2=21j=1∑nθj2
需要注意的是,为了让SVM这类大间距分类器发挥其优势,我们通常将C的值设置的很大,但这会导致SVM容易受到异常点(outlier)的影响,因此不适用于数据线性不可分的情况。
对于下图的样本数据,用黑线划分显然比粉线看起来更加自然。但如果C设置的很大,那么一个异常点就会把决策边界从原来的黑线变为粉线。为了避免异常点的影响,需要将C的值调小一些,以得到更好的分类结果。