1. 什么是支持向量机?
支持向量机(support vector machine)是一种二分类模型。它的基本模型是定义在特征空间上间隔最大的线性分类器,间隔最大使它有别于感知机;支持向量机还包括核技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。支持向量机的学习算法是求解凸二次规划的最优化算法。
支持向量机学习方法按照从简单到复杂可分为:线性可分支持向量机(linear support vector machine in linearly separable case)、线性支持向量机(linear support vector machine)以及非线性支持向量机(non-linear support vector machine)。这三种模型的复杂度有浅到深,其中线性可分支持向量机又称为硬间隔支持向量机(hard margin maximization),针对的线性可分训练数据;当训练数据接近线性可分时,通过软间隔最大化(soft margin maximization),也学习一个线性的分类器,即线性支持向量机,又称为软间隔支持向量机;当训练数据线性不可分时,通过使用核技巧(kernel trick) 及软间隔最大化,学习非线性支持向量机。
当输入空间为欧式空间或离散集合、特征空间为希尔伯特空间时,核函数(kenel function)表示将输入从输入空间映射到特征空间得到特征向量之间的內积。通过使用核函数可以学习非线性支持向量机,等价于隐式地在高维的特征空间中学习线性支持向量机。这样的方法称为核技巧。核方法(kenel method)是比支持向量机更为一般的机器学习方法。
参考:统计学习-李航
凸二次规划
2. 支持向量机的数学原理
2.1 支持向量机的代价函数
了解支持向量机的数学原理,我们要先回顾下逻辑斯蒂回归的内容:
逻辑斯蒂回归模型的假设函数为:
h θ ( x ) = 1 exp − θ T x (1) h_\theta(x) = \frac{1} {\exp^{-\theta^{T} x}}\tag1 hθ(x)=exp−θTx1(1)
图像曲线为:
图
1
图1
图1
逻辑斯蒂回归的代价函数公式(单个样例):
J = − y l o g h θ ( x ) + ( 1 − y ) l o g ( 1 − h θ ( x ) (2) J = -ylogh_{\theta}(x) + (1-y)log(1-h_{\theta}(x)\tag2 J=−yloghθ(x)+(1−y)log(1−hθ(x)(2)
将假设函数带入2后
J
=
−
y
l
o
g
1
1
+
exp
−
θ
T
x
−
(
1
−
y
)
l
o
g
(
1
−
1
1
+
exp
−
θ
T
x
)
(3)
J = -ylog\frac{1}{1+\exp^{-\theta^{T} x}} - (1-y)log(1 - \frac{1}{1+\exp^{-\theta^{T} x}})\tag3
J=−ylog1+exp−θTx1−(1−y)log(1−1+exp−θTx1)(3)
当y=1 时,代价函数如下图中蓝色曲线所示:
图
2
图2
图2
当y=0时,代价函数曲线如下图蓝色曲线所示:
图
3
图3
图3
图2 图3的函数曲线我们分别用紫色的函数曲线作近似代替,并且图2中曲线我们命名为
c
o
s
t
1
(
θ
T
x
)
cost_1(\theta^{T}x)
cost1(θTx),图3中的曲线我们命名为
c
o
s
t
0
(
θ
T
x
)
cost_0(\theta^{T}x)
cost0(θTx)。因此支持向量机的代价函数我们可以这样表示:
m
i
n
θ
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
∑
i
=
1
n
θ
j
2
(4)
\underset{\theta}{min}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_{i=1}^{n}\theta_j^2\tag4
θminCi=1∑m[y(i)cost1(θTx(i)+(1−yi)cost0(θTx(i))]+21i=1∑nθj2(4)
因为支持向量机的代价函数最小值跟系数没有关系,所以我们可以去掉m和lambda,另 C = 1 λ C=\frac{1}{\lambda} C=λ1
支持向量机的假设函数如下图所示,当
θ
T
x
≥
0
\theta^{T}x\geq0
θTx≥0,
h
θ
(
x
)
=
1
h_\theta(x)=1
hθ(x)=1,其它情况下为0
2.2 如何理解支持向量机代价函数的最小化
在2.1中我们掌握了支持向量机代价函数的表达式后,这一节我们主要要掌握代价函数最小化的推理过程,从上节公式4中我们随着我们训练的进行,A部分是要趋近于0的,B中的部分主要是参数
θ
\theta
θ,所以支持向量机代价函数最小化的过程,也可以看成是最小化B的过程,但B受限于A,因此:
m
i
n
θ
1
2
∑
j
=
1
n
θ
j
2
(5)
\underset{\theta}{min}\frac{1}2\sum_{j=1}^{n}\theta_{j}^{2} \tag 5
θmin21j=1∑nθj2(5)
s
.
t
.
θ
T
x
(
i
)
≥
1
i
f
y
(
i
)
=
1
s.t. \theta^{T}x^{(i)}\geq 1 if y^{(i)} =1
s.t.θTx(i)≥1 if y(i)=1
θ
T
x
(
i
)
≤
−
1
i
f
y
(
i
)
=
0
\theta^{T}x^{(i)}\leq -1 if y^{(i)} =0
θTx(i)≤−1 if y(i)=0
而
θ
T
x
(
i
)
\theta^{T}x^{(i)}
θTx(i)其实是向量的內积
p
(
i
)
⋅
∣
∣
θ
∣
∣
p^{(i)}\cdot||\theta||
p(i)⋅∣∣θ∣∣,
p
(
i
)
是
向
量
x
(
i
)
在
θ
上
的
投
影
p^{(i)}是向量x^{(i)}在\theta上的投影
p(i)是向量x(i)在θ上的投影,而公式5就可以看作向量的模
1
2
∣
∣
θ
∣
∣
\frac{1}2||\theta||
21∣∣θ∣∣,所以SVM的代价函数最小化的过程也可以表示为:
m
i
n
θ
1
2
∣
∣
θ
∣
∣
(6)
\underset{\theta}{min}\frac{1}2 ||\theta||\tag 6
θmin21∣∣θ∣∣(6)
s
.
t
.
{
p
(
i
)
⋅
∣
∣
θ
∣
∣
≥
1
,
y
(
i
)
=
1
p
(
i
)
⋅
∣
∣
θ
∣
∣
≤
−
1
,
y
(
i
)
=
0
s.t. \left\{ \begin{aligned} p^{(i)}\cdot||\theta||\geq{1} , y^{(i)} =1\\ p^{(i)}\cdot||\theta||\leq{-1} , y^{(i)} =0 \end{aligned} \right.
s.t.{p(i)⋅∣∣θ∣∣≥1 ,y(i)=1p(i)⋅∣∣θ∣∣≤−1 ,y(i)=0
2.3 核函数(kernels)
前面两节主要针对线性可分数据,如果是线性不可分数据,我们就要用到核函数技巧。
大致的技巧就是我们用 特 征 [ f 1 , f 2 , f 3 , f 4 , f 5 ] 取 代 特 征 [ x 1 , x 2 , x 1 x 2 , x 1 2 , x 2 2 ] 特征[f_1, f_2, f_3, f_4, f_5]取代特征[x_1, x_2, x_1x_2, x_1^2, x_2^2] 特征[f1,f2,f3,f4,f5]取代特征[x1,x2,x1x2,x12,x22]。这样就相当于将高幂特征转换为低幂特征。下面就是要了解如何求解 特 征 [ f 1 , f 2 , f 3 , f 4 , f 5 ] 特征[f_1, f_2, f_3, f_4, f_5] 特征[f1,f2,f3,f4,f5]。
对于给定样本(x,y)的空间上我们手动设置标记点 l 1 , l 2 , l 3 . . . . . l_1, l_2, l_3..... l1,l2,l3.....,记为landmark向量,通过计算原始向量与landmark向量之间的相似度来表示特征 f 1 , f 2 , f 3 . . . . f_1, f_2, f_3.... f1,f2,f3....,如下图所示
因此,我们能够发现:
当
x
≈
l
(
1
)
时
,
f
1
≈
1
x \approx l^{(1)}时,f_1 \approx 1
x≈l(1)时,f1≈1
当
x
距
离
l
(
1
)
很
远
时
,
f
1
≈
0
x距离l^{(1)}很远时,f_1 \approx 0
x距离l(1)很远时,f1≈0,
假设当
θ
0
+
θ
1
f
1
+
θ
2
f
2
+
θ
3
f
3
≥
0
\theta_0 + \theta_1f_1 + \theta_2f_2 + \theta_3f_3\geq0
θ0+θ1f1+θ2f2+θ3f3≥0时,我们预测样本为“1”(根据前面的假设函数定义得出),假设
θ
0
=
−
0.5
,
θ
1
=
1
,
θ
2
=
1
,
θ
3
=
0
\theta_0 =-0.5, \theta_1=1,\theta_2=1, \theta_3=0
θ0=−0.5,θ1=1,θ2=1,θ3=0。那么对于下图中给定的样本x,我们可以计算出
f
1
≈
1
,
f
2
≈
0
,
f
3
≈
0
f_1\approx1, f_2\approx0, f_3\approx 0
f1≈1,f2≈0,f3≈0,带入上式可得知
θ
0
+
θ
1
⋅
1
+
θ
2
⋅
0
+
θ
3
⋅
0
=
0.5
>
0
;
\theta_0 + \theta_1\cdot1 + \theta_2 \cdot 0 + \theta_3 \cdot 0 = 0.5 >0;
θ0+θ1⋅1+θ2⋅0+θ3⋅0=0.5>0;,所以预测样本X的类别为“1”。而对于大量的样本,就能得到一个非线性的决策边界,如下图中所示:
最后,如何设置
l
(
1
)
,
l
(
2
)
,
l
(
3
)
…
l^{(1)}, l^{(2)},l^{(3)}\dots
l(1),l(2),l(3)…了?其实很简单,在刚开始训练时,我们只需把训练集中的样本一一对应成
l
(
1
)
,
l
(
2
)
,
l
(
3
)
…
l^{(1)}, l^{(2)},l^{(3)}\dots
l(1),l(2),l(3)…即可,即给定
{
(
x
(
1
)
,
y
(
1
)
)
,
(
x
(
2
)
,
y
(
2
)
)
,
.
.
.
.
.
,
(
x
(
m
)
,
y
(
m
)
)
}
\{(x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}),....., (x^{(m)}, y^{(m)})\}
{(x(1),y(1)),(x(2),y(2)),.....,(x(m),y(m))},令
l
(
1
)
=
x
(
1
)
,
l
(
2
)
=
x
(
2
)
,
l
(
3
)
=
x
(
3
)
…
l
(
m
)
=
x
(
m
)
l^{(1)}=x^{(1)}, l^{(2)}=x^{(2)},l^{(3)}=x^{(3)}\dots l^{(m)}=x^{(m)}
l(1)=x(1),l(2)=x(2),l(3)=x(3)…l(m)=x(m)如下图所示:
所以,对于样本x,我们可以得到如下特征
f
=
[
f
1
,
f
2
,
.
.
.
.
f
m
]
T
f=[f_1, f_2, ....f_m]^{T}
f=[f1,f2,....fm]T:
f
1
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
1
)
)
f
2
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
2
)
)
f
3
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
3
)
)
…
\left. \begin{aligned} f_1 = similarity(x,l^{(1)}) \\ f_2 = similarity(x,l^{(2)} )\\ f_3 = similarity(x,l^{(3)} )\\ \dots \end{aligned} \right.
f1=similarity(x,l(1))f2=similarity(x,l(2))f3=similarity(x,l(3))…
其中,
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
i
)
)
=
e
x
p
(
−
∣
∣
∣
x
−
l
(
i
)
∣
∣
2
2
δ
2
)
similarity(x, l^{(i)}) = exp(-\frac{|||x-l^{(i)}||^{2}}{2\delta^2})
similarity(x,l(i))=exp(−2δ2∣∣∣x−l(i)∣∣2),而带核函数的SVM代价函数就变为:
m
i
n
θ
C
∑
i
=
1
m
[
y
(
i
)
c
o
s
t
1
(
θ
T
f
(
i
)
+
(
1
−
y
i
)
c
o
s
t
0
(
θ
T
f
(
i
)
)
]
+
1
2
∑
i
=
1
n
θ
j
2
\underset{\theta}{min}C\sum_{i=1}^{m}[y^{(i)}cost_1(\theta^{T}f^{(i)} + (1-y^{i})cost_0(\theta^{T}f^{(i)})] + \frac{1}2\sum_{i=1}^{n}\theta_j^2
θminCi=1∑m[y(i)cost1(θTf(i)+(1−yi)cost0(θTf(i))]+21i=1∑nθj2
3. 支持向量机的使用建议
SVM算法模型面世已经几十年,相关算法软件包已经非常成熟,我们没必要自己从头开始做一个实现代码,只需要针对特定的场景选择合适的算法模型,设置合理的参数即可
SVM模型中参数
C
,
δ
2
C ,\delta^2
C,δ2对模型的影响总结如下:
对于逻辑回归和SVM,吴恩达老师就总结出了几个非常好的规则供我们参考: