支持向量机(Support Vector Machine, SVM)是另外一种非常强大的监督学习算法,其相比于逻辑回归和神经网络在学习非线性函数时具有更清晰和强大的能力。
1. SVM 的优化目标
逻辑回归中,如果我们得到的假设函数为
h
θ
(
x
)
h_\theta(x)
hθ(x),对于一个样本
(
x
,
y
)
(x,y)
(x,y),该样本的损失(预测值与真实标签之间的差距)可以通过下式衡量:
−
[
y
log
h
θ
(
x
)
+
(
1
−
y
)
log
(
1
−
h
θ
(
x
)
)
]
=
−
y
log
1
1
+
e
−
θ
T
x
−
(
1
−
y
)
log
(
1
−
1
1
+
e
−
θ
T
x
)
\begin{aligned} &-\left[y\log h_\theta(x)+(1-y)\log (1-h_\theta(x))\right] \\ =&-y\log \frac{1}{1+e^{-\theta^Tx}}-(1-y)\log (1-\frac{1}{1+e^{-\theta^Tx}}) \end{aligned}
=−[yloghθ(x)+(1−y)log(1−hθ(x))]−ylog1+e−θTx1−(1−y)log(1−1+e−θTx1)
当 y = 1 y=1 y=1 时,上式的代价函数变为 − log 1 1 + e − θ T x -\log \frac{1}{1+e^{-\theta^Tx}} −log1+e−θTx1,令 z = θ T x z=\theta^Tx z=θTx,则代价函数可以写为 − log 1 1 + e z -\log \frac{1}{1+e^{z}} −log1+ez1,以 z z z 为坐标轴,我们可以得到如下的蓝色损失函数曲线。在逻辑回归中,根据 Sigmoid 函数的特点,当 z = θ T x ≫ 0 z=\theta^Tx \gg 0 z=θTx≫0 时,预测结果 h θ ( x ) = 1 h_\theta(x)=1 hθ(x)=1,根据下图的损失函数曲线也可以看出,当 z ≫ 0 z \gg 0 z≫0 时,损失逐渐趋近于 0 0 0,预测值 h θ ( x ) h_\theta(x) hθ(x) 与真实标签 y = 1 y=1 y=1 无限接近。
为了更加准确的描述代价,我们对该代价函数进行改进,构造如下红色的分段曲线 C o s t 1 ( z ) \boldsymbol{Cost_1(z)} Cost1(z) 代替 − log 1 1 + e − θ T x -\log \frac{1}{1+e^{-\theta^Tx}} −log1+e−θTx1 ,可以看出,对于 C o s t 1 ( z ) Cost_1(z) Cost1(z),在 z ≥ 1 z\geq1 z≥1 时,损失函数值已经是 0 0 0 了,并且 C o s t 1 ( z ) Cost_1(z) Cost1(z) 可以很好的对原损失函数曲线进行拟合。
同理,当 y = 0 y=0 y=0 时,总体的代价函数变为 − log ( 1 − 1 1 + e − z ) -\log(1-\frac{1}{1+e^{-z}}) −log(1−1+e−z1),同样可以得到如下的蓝色损失函数曲线,在这种情况下,根据 Sigmoid 函数,当 z ≪ 0 z\ll 0 z≪0时,预测结果 h θ ( x ) = 0 h_\theta(x)=0 hθ(x)=0。从下面的蓝色损失函数曲线也可以看出,当 z ≪ 0 z\ll 0 z≪0 时,损失函数趋向于 0 0 0,也就是预测值 h θ ( x ) h_\theta(x) hθ(x) 和真实标签 y = 0 y=0 y=0 无限接近。
同样,我们构建如下的损失函数曲线
C
o
s
t
0
(
z
)
\boldsymbol{Cost_0(z)}
Cost0(z),当
z
≤
−
1
z\leq -1
z≤−1 时,损失函数值为
0
0
0。
在逻辑回归中,对于训练集中的所有样本,我们可以将所有样本预测值与真实标签之间的代价累加,进而可以构建如下的代价函数,为了让假设函数能够最好的拟合数据点,我们优化的目标也是使下式的代价函数最小:
min
θ
1
m
[
∑
i
=
1
m
y
(
i
)
(
−
log
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
[
−
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
]
+
λ
2
m
∑
j
=
1
n
θ
j
2
\min_\theta \frac{1}{m} \left[ \sum_{i=1}^{m}y^{(i)}\left(-\log h_\theta(x^{(i)})\right) +(1-y^{(i)})\left[-\log(1-h_\theta(x^{(i)}))\right] \right] +\frac{\lambda}{2m}\sum_{j=1}^{n}\theta_j^2
θminm1[i=1∑my(i)(−loghθ(x(i)))+(1−y(i))[−log(1−hθ(x(i)))]]+2mλj=1∑nθj2
再根据以上的讨论,在支持向量机中,将其中的损失函数进行替换,即将
−
log
1
1
+
e
z
-\log \frac{1}{1+e^{z}}
−log1+ez1 换为
C
o
s
t
1
(
z
)
\boldsymbol{Cost_1(z)}
Cost1(z),将
−
log
(
1
−
1
1
+
e
−
z
)
-\log(1-\frac{1}{1+e^{-z}})
−log(1−1+e−z1) 换为
C
o
s
t
0
(
z
)
\boldsymbol{Cost_0(z)}
Cost0(z)。同时删除平均系数
1
m
\frac{1}{m}
m1(不影响参数的优化结果),得到如下的代价函数:
min
θ
∑
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
∑
i
=
1
n
θ
j
2
\min_\theta \sum_{i=1}^{m} \left[y^{(i)}Cost_1(\theta^Tx^{(i)})+(1-y^{(i)})Cost_0(\theta^Tx^{(i)})\right] +\frac{\boldsymbol{\lambda}}{2}\sum_{i=1}^n\theta_j^2
θmini=1∑m[y(i)Cost1(θTx(i))+(1−y(i))Cost0(θTx(i))]+2λi=1∑nθj2
为了符合 SVM 的惯例,我们不用 λ \lambda λ 控制正则化参数项,相反,在误差项之前添加参数 C C C 控制两者之间的平衡,最终得到如下的代价函数。在逻辑回归中,代价函数的形式为 A + λ B A+\lambda B A+λB, λ \lambda λ 越大,表示权重越偏向后面的正则项 B B B。在 SVM 中,形式变为 C A + B CA+B CA+B, C C C 越小,则 A A A 表示的误差项的权重越小,则后面的正则项的权重越大。所以参数 C C C 和 1 λ \frac{1}{\lambda} λ1 的效果是相同的。
min θ 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 \min_\theta \boldsymbol{C}\sum_{i=1}^{m} \left[y^{(i)}Cost_1(\theta^Tx^{(i)})+(1-y^{(i)})Cost_0(\theta^Tx^{(i)})\right] +\frac{\boldsymbol{1}}{2}\sum_{i=1}^n\theta_j^2 θminCi=1∑m[y(i)Cost1(θTx(i))+(1−y(i))Cost0(θTx(i))]+21i=1∑nθj2
支持向量机在通过对上面的代价函数进行优化,得到参数
θ
\theta
θ 后,就可以得到假设函数
h
θ
(
x
)
h_\theta(x)
hθ(x),但是其进行预测时,并不像逻辑回归一样得到某一类的概率,而是直接输出预测结果,所以 SVM 是 根据
θ
T
x
\theta^Tx
θTx 的结果进行分类 的,如下所示:
h
θ
(
x
)
=
{
1
,
i
f
θ
T
x
≥
0
0
,
o
t
h
e
r
w
i
s
e
h_\theta(x)= \begin{cases} 1,\quad&if\quad \theta^Tx\geq 0 \\ 0,\quad&otherwise \end{cases}
hθ(x)={1,0,ifθTx≥0otherwise
2. 大间距分类器
在逻辑回归中,假设函数表示为 h θ ( x ) = 1 1 + e − θ T x h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}} hθ(x)=1+e−θTx1,根据 Sigmoid 函数,这时为了得到正确的分类结果,当 y = 1 y=1 y=1 时,我们要使 θ T x ≥ 0 \theta^Tx\geq 0 θTx≥0;当 y = 0 y=0 y=0 时,要使 θ T x < 0 \theta^Tx \lt 0 θTx<0。
但是对于 SVM 来说,根据如下代价函数的图像,我们可以发现,为了使得到的结果与真实标签对应,我们会得到如下情况:
- 当 y = 1 y=1 y=1 时,要使 θ T x ≥ 1 \theta^Tx\geq 1 θTx≥1 时,预测结果 h θ ( x ) = y = 1 h_\theta(x)=y=1 hθ(x)=y=1
- 当 y = 0 y=0 y=0 时,要使 θ T x ≤ − 1 \theta^Tx\leq -1 θTx≤−1 时,预测结果 h θ ( x ) = y = 0 h_\theta(x)=y=0 hθ(x)=y=0
相比于逻辑回归,
θ
T
x
≥
1
\theta^Tx\geq 1
θTx≥1 和
θ
T
x
≤
−
1
\theta^Tx\leq -1
θTx≤−1 形成了一个分类的安全间距。如下图所示,当代价函数中的
C
C
C 设置的值非常大时,如
C
=
10000
C=10000
C=10000,在 SVM 的代价函数中,为了使整体尽可能小,那么会通过优化使得误差项趋于
0
0
0,最终得到代价函数为
min
θ
C
×
0
+
∑
j
=
1
n
θ
j
\min\limits_\theta C\times 0 +\sum\limits_{j=1}^{n}\theta_j
θminC×0+j=1∑nθj,根据
θ
T
x
\theta^Tx
θTx 可以对数据集构建如下的黑色直线表示的决策边界,该边界与两类数据集都有足够远的分类间距,分类间距越大,SVM就有更好的鲁棒性,SVM总会试图找到更大的分类间距,因此SVM又被称为 大间距分类器。
3. 数学原理
3.1 向量内积
对于两个向量
u
=
[
u
1
u
2
]
\boldsymbol{u}=\left[\begin{matrix}u_1 \\ u_2\end{matrix}\right]
u=[u1u2] 和
v
=
[
v
1
v
2
]
\boldsymbol{v}=\left[\begin{matrix}v_1 \\ v_2\end{matrix}\right]
v=[v1v2] ,其内积可以表示为
u
T
v
=
v
T
u
=
∥
u
∥
⋅
∥
v
∥
cos
θ
=
u
1
v
1
+
u
2
v
2
\boldsymbol{u}^T\boldsymbol{v}=\boldsymbol{v}^T\boldsymbol{u}=\|\boldsymbol{u}\| \cdot \|\boldsymbol{v}\|\cos \theta=u_1v_1+u_2v_2
uTv=vTu=∥u∥⋅∥v∥cosθ=u1v1+u2v2 1,我们在坐标系中可以表示如下,其中
p
=
∥
v
∥
cos
θ
p=\|\boldsymbol{v}\|\cos \theta
p=∥v∥cosθ 表示向量
v
\boldsymbol{v}
v 在向量
u
\boldsymbol{u}
u 上的投影长度,因此,两个向量的内积就可以写成如下形式:
u
T
v
=
v
T
u
=
p
⋅
∥
u
∥
=
u
1
v
1
+
u
2
v
2
\begin{aligned} \boldsymbol{u}^T\boldsymbol{v}=\boldsymbol{v}^T\boldsymbol{u}&= p\cdot \|\boldsymbol{u}\| \\ &=u_1v_1+u_2v_2 \end{aligned}
uTv=vTu=p⋅∥u∥=u1v1+u2v2
当两个向量的夹角
θ
\theta
θ 小于
9
0
°
90^\degree
90° 时,内积的结果为正。但是如下所示,当向量夹角大于
9
0
°
90^\degree
90° 时,内积结果
p
⋅
∥
u
∥
=
u
1
v
1
+
u
2
v
2
<
0
p\cdot \|\boldsymbol{u}\|=u_1v_1+u_2v_2\lt 0
p⋅∥u∥=u1v1+u2v2<0 。
3.2 SVM 中目标函数的优化
为了更好的对 SVM 的数学原理进行分析,我们假设
C
C
C 为一个很大的值,并令
θ
0
=
0
,
n
=
2
\theta_0=0,n=2
θ0=0,n=2。这时,代价函数变为:
min
θ
1
2
∑
j
=
1
2
θ
j
2
=
1
2
(
θ
1
2
+
θ
2
2
)
=
1
2
(
θ
1
2
+
θ
2
2
)
2
=
1
2
∥
θ
∥
2
\min_\theta\frac{1}{2}\sum_{j=1}^{2}\theta_j^2 =\frac{1}{2}(\theta_1^2+\theta_2^2) =\frac{1}{2}\left(\sqrt{\theta_1^2+\theta_2^2}\right)^2 =\frac{1}{2}\|\boldsymbol{\theta}\|^2
θmin21j=1∑2θj2=21(θ12+θ22)=21(θ12+θ22)2=21∥θ∥2
从上式可以看出,我们对代价函数的最小化其实就是使参数向量 θ = [ θ 0 θ 1 θ 2 ] \boldsymbol{\theta}=\left[\begin{matrix}\theta_0 \\ \theta_1 \\ \theta_2\end{matrix}\right] θ=⎣⎡θ0θ1θ2⎦⎤ 自己的内积达到最小。这时我们再加入对分类时假设函数的考虑:
- 若 y ( i ) = 1 y^{(i)}=1 y(i)=1 ,要使 θ T x ( i ) ≥ 1 \theta^Tx^{(i)} \geq 1 θTx(i)≥1
- 若 y ( i ) = 0 y^{(i)}=0 y(i)=0 ,要使 θ T x ( i ) ≤ − 1 \theta^Tx^{(i)} \leq -1 θTx(i)≤−1
可以看到,分类的结果是通过
θ
T
x
(
i
)
\theta^Tx^{(i)}
θTx(i) 内积的结果进行判断的,我们将两个向量在坐标中表示如下,则内积的计算可以看成下式,表示计算
x
(
i
)
x^{(i)}
x(i) 与
θ
\theta
θ 的内积,也是
x
(
i
)
x^{(i)}
x(i) 在
θ
\theta
θ 上的投影
p
(
i
)
p^{(i)}
p(i) 与
θ
\theta
θ 的模长的乘积。
θ
T
x
(
i
)
=
p
(
i
)
⋅
∥
θ
∥
=
θ
1
x
1
(
i
)
+
θ
2
x
2
(
i
)
\begin{aligned} \theta^Tx^{(i)} & = p^{(i)}\cdot \| \theta\| \\ & = \theta_1 x_1^{(i)}+ \theta_2x_2^{(i)} \end{aligned}
θTx(i)=p(i)⋅∥θ∥=θ1x1(i)+θ2x2(i)
综上所述,我们可以将分类的判断 θ T x \theta^Tx θTx 转换为 p ( i ) ⋅ ∥ θ ∥ p^{(i)}\cdot \|\theta\| p(i)⋅∥θ∥,即:
- 若 y ( i ) = 1 y^{(i)}=1 y(i)=1,要使 p ( i ) ⋅ ∥ θ ∥ ≥ 1 p^{(i)}\cdot \|\theta\|\geq 1 p(i)⋅∥θ∥≥1
- 若 y ( i ) = 0 y^{(i)}=0 y(i)=0,要使 p ( i ) ⋅ ∥ θ ∥ ≤ − 1 p^{(i)}\cdot \|\theta\|\leq -1 p(i)⋅∥θ∥≤−1
对于 θ T x = θ 1 x 1 + θ 2 x 2 = 1 \theta^Tx=\theta_1x_1+\theta_2x_2=1 θTx=θ1x1+θ2x2=1,我们可以将其看作一条由两个特征组成的平面上的直线,如下所示,则参数向量 θ \boldsymbol{\theta} θ 就可以看作垂直于直线的向量,数据在向量的投影就是 p ( 1 ) p^{(1)} p(1) 和 p ( 2 ) p^{(2)} p(2),如下紫色和黄色线段所示,这时对于数据点 x ( 1 ) x^{(1)} x(1) ,如果想要正确的分类,就需要使 p ( 1 ) ⋅ ∥ θ ∥ ≥ 1 p^{(1)}\cdot \|\theta\|\geq 1 p(1)⋅∥θ∥≥1,但是从图中可以看到 p ( 1 ) p^{(1)} p(1) 是一个较短的距离,如果还想使 p ( 1 ) ⋅ ∥ θ ∥ ≥ 1 p^{(1)}\cdot \|\theta\|\geq 1 p(1)⋅∥θ∥≥1,优化算法就会趋向于使 ∥ θ ∥ \|\theta\| ∥θ∥ 取一个较大的值,这和代价函数 min θ 1 2 ∥ θ ∥ 2 \min_\theta \frac{1}{2}\|\theta\|^2 minθ21∥θ∥2 相矛盾。对于 x ( 2 ) x^{(2)} x(2) 也是同理,我们想要 p ( 2 ) ⋅ ∥ θ ∥ ≤ − 1 p^{(2)}\cdot \|\theta\|\leq -1 p(2)⋅∥θ∥≤−1,由于 p ( 2 ) p^{(2)} p(2) 也是一个很小的负数,就会使 ∥ θ ∥ \|\theta\| ∥θ∥ 趋向于更小的值,和代价函数的优化产生矛盾。
这时如果我们选择另一条决策边界,如下图所示,这时得到的
p
(
1
)
p^{(1)}
p(1) 和
p
(
2
)
p^{(2)}
p(2) 都更大,这时
∥
θ
∥
\|\theta\|
∥θ∥ 就可以取得相对上面更小的值,代价函数也就会更小。这对应于 SVM 中让决策边界和两类数据的间距尽可能大,这些间距对应于每个样本
x
(
i
)
x^{(i)}
x(i) 在
θ
\theta
θ 上的投影
p
(
i
)
p^{(i)}
p(i),其值越大,代价函数对应的
∥
θ
∥
\|\theta\|
∥θ∥ 就会越小,那么预测结果与真实标签的代价就越小。
4. 核函数
对于如下的分类问题,为了构建非线性的决策边界,我们可以根据已有的两个特征,构建如下的多项式假设函数进行分类:
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
1
x
2
+
θ
4
x
1
2
+
θ
5
x
2
2
+
⋯
h_\theta(x)=\theta_0+ \theta_1x_1 + \theta_2x_2 + \theta_3x_1x_2 + \theta_4 x_1^2 + \theta_5 x_2^2 + \cdots
hθ(x)=θ0+θ1x1+θ2x2+θ3x1x2+θ4x12+θ5x22+⋯
其中的多项式是原有的特征
x
1
x_1
x1 和
x
2
x_2
x2 组合得到的,我们令
f
1
=
x
1
,
f
2
=
x
2
,
f
3
=
x
1
x
2
,
f
4
=
x
1
2
,
f
5
=
x
2
2
,
⋯
f_1 = x_1,f_2=x_2,f_3=x_1x_2,f_4=x_1^2,f_5=x_2^2,\cdots
f1=x1,f2=x2,f3=x1x2,f4=x12,f5=x22,⋯ ,那么假设函数就可以更改为:
h
θ
(
x
)
=
θ
0
+
θ
1
f
1
+
θ
2
f
2
+
θ
3
f
3
+
θ
4
f
4
+
θ
5
f
5
+
⋯
h_\theta(x)=\theta_0+ \theta_1f_1 + \theta_2f_2 + \theta_3f_3 + \theta_4 f_4 + \theta_5 f_5 + \cdots
hθ(x)=θ0+θ1f1+θ2f2+θ3f3+θ4f4+θ5f5+⋯
对于不同的问题,选择不同的特征组合得到的效果是不同的,那么对于这么多可能出现的特征组合,怎么才能选择最好的特征 f 1 , f 2 , f 3 , ⋯ f_1,f_2,f_3,\cdots f1,f2,f3,⋯ 呢?
这里使用核函数的方法构建特征,首先假设数据集有两个特征
x
1
,
x
2
x_1,x_2
x1,x2,如下图所示,选择三个标记(landmark)
l
(
1
)
,
l
(
2
)
,
l
(
3
)
l^{(1)},l^{(2)},l^{(3)}
l(1),l(2),l(3),对于给定的一个样本数据
x
x
x ,我们可以构建如下的特征函数,其中
s
i
m
i
l
a
r
i
t
y
(
x
,
l
)
similarity(x,l)
similarity(x,l) 表示数据点
x
x
x 和标记
l
l
l 之间的相似度,我们称为 核函数(kernel function)。后面的
e
−
∥
x
−
l
∥
2
2
σ
2
e^{-\frac{\|x-l\|^2}{2\sigma^2}}
e−2σ2∥x−l∥2 表示一种具体的核函数,称为高斯核函数(Gaussian kernels)。
f
1
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
1
)
)
=
e
−
∥
x
−
l
(
1
)
∥
2
2
σ
2
f
2
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
2
)
)
=
e
−
∥
x
−
l
(
2
)
∥
2
2
σ
2
f
3
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
3
)
)
=
e
−
∥
x
−
l
(
3
)
∥
2
2
σ
2
\begin{aligned} f_1 &= similarity(x,l^{(1)})=e^{-\frac{\|x-l^{(1)}\|^2}{2\sigma^2}} \\ f_2 &= similarity(x,l^{(2)})=e^{-\frac{\|x-l^{(2)}\|^2}{2\sigma^2}} \\ f_3 &= similarity(x,l^{(3)})=e^{-\frac{\|x-l^{(3)}\|^2}{2\sigma^2}} \end{aligned}
f1f2f3=similarity(x,l(1))=e−2σ2∥x−l(1)∥2=similarity(x,l(2))=e−2σ2∥x−l(2)∥2=similarity(x,l(3))=e−2σ2∥x−l(3)∥2
为什么要构建核函数作为特征呢?这里我们将核函数展开来看:
f
1
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
1
)
)
=
e
−
∥
x
−
l
(
1
)
∥
2
2
σ
2
=
e
−
∑
j
=
1
n
(
x
j
−
l
j
(
1
)
)
2
2
σ
2
f_1=similarity(x,l^{(1)})=e^{-\frac{\|x-l^{(1)}\|^2}{2\sigma^2}}=e^{-\frac{\sum\limits_{j=1}^{n}(x_j-l_j^{(1)})^2}{2\sigma^2}}
f1=similarity(x,l(1))=e−2σ2∥x−l(1)∥2=e−2σ2j=1∑n(xj−lj(1))2
- 当
x
≈
l
(
1
)
x\approx l^{(1)}
x≈l(1) 时,即
x
x
x 与
l
(
1
)
l^{(1)}
l(1) 比较接近时,这时
∥
x
−
l
(
1
)
∥
2
≈
0
\|x-l^{(1)}\|^2\approx 0
∥x−l(1)∥2≈0,即:
f 1 ≈ e − 0 2 2 σ 2 ≈ 1 f_1\approx e^{-\frac{0^2}{2\sigma^2}} \approx 1 f1≈e−2σ202≈1 - 当
x
≉
l
(
1
)
x\not\approx l^{(1)}
x≈l(1) 时,即
x
x
x 与
l
(
1
)
l^{(1)}
l(1) 距离很大时,这时
∥
x
−
l
(
1
)
∥
2
≈
l
a
r
g
e
n
u
m
b
e
r
\|x-l^{(1)}\|^2\approx large\ number
∥x−l(1)∥2≈large number,即:
f 1 ≈ e − ( l a r g e n u m b e r ) 2 2 σ 2 ≈ 0 f_1\approx e^{-\frac{(large\ number)^2}{2\sigma^2}} \approx 0 f1≈e−2σ2(large number)2≈0
下图展示了当
l
=
[
3
5
]
l=\left[\begin{matrix}3 \\ 5 \end{matrix}\right]
l=[35] 时,
f
∈
[
0
,
1
]
f\in[0,1]
f∈[0,1] 随
x
x
x 的变化,当
x
x
x 越接近
l
l
l 时,
f
f
f 的值越大。选择不同大小的
σ
\sigma
σ 时,对
f
f
f 的变化也有影响,当
σ
\sigma
σ 越大时,变化越平缓。
得到特征
f
1
,
f
2
,
f
3
f_1,f_2,f_3
f1,f2,f3 后,我们就可以得到假设函数如下:
h
θ
(
x
)
=
g
(
θ
0
+
θ
1
f
1
+
θ
2
f
2
+
θ
3
f
3
)
h_\theta(x)=g(\theta_0 + \theta_1f_1 + \theta_2 f_2 + \theta_3f_3)
hθ(x)=g(θ0+θ1f1+θ2f2+θ3f3)
- 当 θ 0 + θ 1 f 1 + θ 2 f 2 + θ 3 f 3 ≥ 0 \theta_0 + \theta_1f_1 + \theta_2 f_2 + \theta_3f_3\geq 0 θ0+θ1f1+θ2f2+θ3f3≥0 时,预测结果 h θ ( x ) = 1 h_\theta(x)=1 hθ(x)=1
- 当 θ 0 + θ 1 f 1 + θ 2 f 2 + θ 3 f 3 < 0 \theta_0 + \theta_1f_1 + \theta_2 f_2 + \theta_3f_3\lt 0 θ0+θ1f1+θ2f2+θ3f3<0 时,预测结果 h θ ( x ) = 0 h_\theta(x)=0 hθ(x)=0
假设我们已经获得参数 θ \theta θ 的值为 θ 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 ( 1 ) x^{(1)} x(1) ,其只距离 l ( 1 ) l^{(1)} l(1) 比较近,所以只有 f 1 = 1 f_1=1 f1=1,那么 θ 0 + θ 1 × 1 + θ 2 × 0 + θ 3 × 0 = 0.5 ≥ 0 \theta_0 + \theta_1\times 1 + \theta_2\times 0 + \theta_3 \times 0 =0.5 \geq 0 θ0+θ1×1+θ2×0+θ3×0=0.5≥0,预测结果 h θ ( x ) = 1 h_\theta(x)=1 hθ(x)=1
- 对于点 x ( 2 ) x^{(2)} x(2) ,其只距离 l ( 2 ) l^{(2)} l(2) 比较近,所以只有 f 2 = 1 f_2=1 f2=1,那么 θ 0 + θ 1 × 0 + θ 2 × 1 + θ 3 × 0 = 0.5 ≥ 0 \theta_0 + \theta_1\times 0 + \theta_2\times 1 + \theta_3 \times 0 =0.5 \geq 0 θ0+θ1×0+θ2×1+θ3×0=0.5≥0,预测结果 h θ ( x ) = 1 h_\theta(x)=1 hθ(x)=1
- 对于点 x ( 3 ) x^{(3)} x(3) ,距离所有标记点都较远,所以所有 f = 0 f=0 f=0,那么 θ 0 + θ 1 × 0 + θ 2 × 0 + θ 3 × 0 = − 0.5 < 0 \theta_0 + \theta_1\times 0 + \theta_2\times 0 + \theta_3 \times 0 =-0.5 \lt 0 θ0+θ1×0+θ2×0+θ3×0=−0.5<0,预测结果 h θ ( x ) = 0 h_\theta(x)=0 hθ(x)=0
根据以上
θ
\theta
θ 的值,当数据点离标记
l
(
1
)
l^{(1)}
l(1) 和
l
(
2
)
l^{(2)}
l(2) 比较近时,预测结果
h
θ
(
x
)
=
1
h_\theta(x)=1
hθ(x)=1 ,否则预测结果
h
θ
(
x
)
=
0
h_\theta(x)=0
hθ(x)=0,所以可以得到如上所示红色的分类边界。
上述的情况中,所有的标记点
l
l
l 都是我们选择的,对于真实数据集中, 标记
l
l
l 该怎么选择呢?对于给定的训练集数据集
{
(
x
(
1
)
,
y
(
1
)
)
,
(
x
(
2
)
,
y
(
2
)
)
,
⋯
,
(
x
(
m
)
,
y
(
m
)
)
}
\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),\cdots,(x^{(m)},y^{(m)})\}
{(x(1),y(1)),(x(2),y(2)),⋯,(x(m),y(m))},可以直接将每个
l
l
l 直接设置为
x
x
x,即
l
(
1
)
=
x
(
1
)
,
l
(
2
)
=
x
(
2
)
,
⋯
,
l
(
m
)
=
x
(
m
)
l^{(1)}=x^{(1)},l^{(2)}=x^{(2)},\cdots,l^{(m)}=x^{(m)}
l(1)=x(1),l(2)=x(2),⋯,l(m)=x(m),如下图所示:
对于任意一个样本
x
x
x,我们可以通过如下的方式计算
f
f
f 特征向量中的每个值:
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
m
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
m
)
)
→
f
=
[
f
0
f
1
f
2
⋮
f
m
]
,
f
0
=
1
\begin{matrix} \begin{aligned} f_1 &= similarity(x,l^{(1)}) \\ f_2 &= similarity(x,l^{(2)}) \\ \vdots \\ f_m &= similarity(x,l^{(m)}) \end{aligned} & \rightarrow & f=\left[\begin{matrix}f_0 \\ f_1 \\f_2 \\ \vdots \\ f_m \end{matrix}\right],f_0=1 \end{matrix}
f1f2⋮fm=similarity(x,l(1))=similarity(x,l(2))=similarity(x,l(m))→f=⎣⎢⎢⎢⎢⎢⎡f0f1f2⋮fm⎦⎥⎥⎥⎥⎥⎤,f0=1
当给定训练集时,我们就可以计算出每个样本
x
(
i
)
x^{(i)}
x(i) 对应的特征向量
f
(
i
)
f^{(i)}
f(i):
x
(
i
)
→
f
1
(
i
)
=
s
i
m
i
l
a
r
i
t
y
(
x
(
i
)
,
l
(
1
)
)
f
2
(
i
)
=
s
i
m
i
l
a
r
i
t
y
(
x
(
i
)
,
l
(
2
)
)
⋮
f
m
(
i
)
=
s
i
m
i
l
a
r
i
t
y
(
x
(
i
)
,
l
(
m
)
)
→
f
(
i
)
=
[
f
0
(
i
)
f
1
(
i
)
f
2
(
i
)
⋮
f
m
(
i
)
]
,
f
0
(
i
)
=
1
\begin{matrix} x^{(i)} & \rightarrow & \begin{aligned} f_1^{(i)} &= similarity(x^{(i)} ,l^{(1)}) \\ f_2^{(i)} &= similarity(x^{(i)} ,l^{(2)}) \\ \vdots \\ f_m^{(i)} &= similarity(x^{(i)} ,l^{(m)}) \end{aligned} & \rightarrow & f^{(i)}=\left[\begin{matrix}f^{(i)} _0 \\ f^{(i)} _1 \\f^{(i)} _2 \\ \vdots \\ f^{(i)} _m \end{matrix}\right],f^{(i)} _0=1 \end{matrix}
x(i)→f1(i)f2(i)⋮fm(i)=similarity(x(i),l(1))=similarity(x(i),l(2))=similarity(x(i),l(m))→f(i)=⎣⎢⎢⎢⎢⎢⎢⎡f0(i)f1(i)f2(i)⋮fm(i)⎦⎥⎥⎥⎥⎥⎥⎤,f0(i)=1
有了这些数据后,就可以通过对如下的 SVM 代价函数进行优化,得到其中的参数
θ
\theta
θ 参数向量,
θ
\theta
θ 向量中元素的个数等于
f
f
f 特征向量的个数,所以
j
=
1
,
2
,
⋯
,
m
j=1,2,\cdots,m
j=1,2,⋯,m。
min
θ
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
∑
j
=
1
m
θ
j
2
\min_\theta C\sum_{i=1}^{m} \left[y^{(i)}Cost_1(\theta^Tf^{(i)})+(1-y^{(i)})Cost_0(\theta^Tf^{(i)})\right] +\frac{1}{2}\sum_{j=1}^m\theta_j^2
θminCi=1∑m[y(i)Cost1(θTf(i))+(1−y(i))Cost0(θTf(i))]+21j=1∑mθj2
通过对上式的优化,可以得到 θ \theta θ 的值,之后我们就可以根据 θ T f \theta^Tf θTf 进行预测了:
- 若 θ T f = θ 0 f 0 + θ 1 f 1 + ⋯ + θ m f m ≥ 0 \theta^Tf=\theta_0f_0+\theta_1f_1+\cdots+\theta_mf_m \geq 0 θTf=θ0f0+θ1f1+⋯+θmfm≥0,预测结果 h θ ( x ) = 1 h_\theta(x)=1 hθ(x)=1
- 若 θ T f = θ 0 f 0 + θ 1 f 1 + ⋯ + θ m f m < 0 \theta^Tf=\theta_0f_0+\theta_1f_1+\cdots+\theta_mf_m \lt 0 θTf=θ0f0+θ1f1+⋯+θmfm<0,预测结果 h θ ( x ) = 0 h_\theta(x)=0 hθ(x)=0
可以注意到,在代价函数中还包含两个参数:
-
C
C
C 参数,前面我们介绍过,
C
C
C 作为参数可以实现和
1
λ
\frac{1}{\lambda}
λ1 相同的效果,所以
- 若 C C C 过大( λ \lambda λ 是一个较小的值),会导致模型出现高方差(过拟合),低偏差
- 若 C C C 过小( λ \lambda λ 是一个较大的值),会导致模型出现高偏差(欠拟合),低方差
-
σ
2
\sigma^2
σ2 参数是高斯核函数中的参数:
- 若 σ 2 \sigma^2 σ2 过大, f f f 的变化会相对更加平缓,会导致高偏差,低方差
- 若 σ 2 \sigma^2 σ2 过小, f f f 的变化会相对更加快速,会导致高方差,低偏差
5. SVM 的使用注意
-
对于有多个不同取值范围组成的特征,我们在利用它们进行核函数计算时,要首先对他们进行特征缩放,以保证它们处于相近的范围内。
-
SVM 中的核函数要满足默塞尔定理(Mercer’s Theorem),该定理使得核函数可以正确的应用在 SVM 的优化中。除了高斯核函数,还有如下的一些核函数:
- 多项式核函数(Polymomial kernel),如 k ( x , l ) = ( x T l ) 2 , k ( x , l ) = ( x T l ) 2 , k ( x , l ) = ( x T l + 1 ) 3 , ⋯ k(x,l)=(x^Tl)^2,k(x,l)=(x^Tl)^2,k(x,l)=(x^Tl+1)^3,\cdots k(x,l)=(xTl)2,k(x,l)=(xTl)2,k(x,l)=(xTl+1)3,⋯
- 字符串核函数(String kernel)、卡方核函数(chi-square kernel)等。
-
SVM 多分类
使用 SVM 进行多分类和使用逻辑回归进行多分类使用相同的方法,即一对多的创建多个分类假设函数,每个假设函数有一个参数向量 θ ( i ) \theta^{(i)} θ(i) ,对应于将第 i i i 类数据分离出来,最终选择值最大的 ( θ ( i ) ) T x (\theta^{(i)})^Tx (θ(i))Tx 作为最终的分类。 -
逻辑回归与 SVM 的选择
对于不同大小的数据集和特征个数,应该选择不同的模型,记 n n n 为 x ∈ R n + 1 x\in \mathcal{R}^{n+1} x∈Rn+1 中特征个数, m m m 为训练集中样本的个数,那么- 若特征个数 n n n 比样本个数 m m m 多很多,应该选择逻辑回归或没有核函数(linear kernel)的 SVM 方法,这是因为当数据量很少时,没有足够的数据用于特征的学习。
- 若 n n n 很少, m m m 的大小适中,选择使用高斯核函数的 SVM
- 若 n n n 很少, m m m 的值很大,应该手动创建更多的特征,使用逻辑回归或没有核函数的SVM方法,这是因为当数据很多时,SVM中核函数的计算会耗费大量的时间。
SVM 的优化问题是一个凸优化问题,在优化时不会陷入局部最优点,神经网络对任何情况下都可以有很好的效果,但是其运行速度会比较慢,因此如果存在很好的 SVM 算法,可以使用 SVM 大大减少运算速度。