1. SVM 的优化目标
前面讲了逻辑回归,SVM 和逻辑回归是很像的,我们试着从逻辑回归过渡到 SVM。
如 (图1) 所示,在逻辑回归中,输入样本特征为 x \boldsymbol{x} x,模型参数为 θ \bm{\theta} θ。
当样本标签为
y
=
1
y=1
y=1 时,我们希望假设函数输出
h
θ
(
x
)
≈
1
h_{\bm{\theta}}(\boldsymbol{x})\approx1
hθ(x)≈1,也就是说希望
θ
T
x
\bm{\theta}^T\boldsymbol{x}
θTx 远大于
0
0
0。(
θ
T
x
≫
0
\bm{\theta}^T\boldsymbol{x}\gg 0
θTx≫0)
当样本标签为
y
=
0
y=0
y=0 时,我们希望假设函数输出
h
θ
(
x
)
≈
0
h_{\bm{\theta}}(\boldsymbol{x})\approx0
hθ(x)≈0,也就是说希望
θ
T
x
\bm{\theta}^T\boldsymbol{x}
θTx 远小于
0
0
0。(
θ
T
x
≪
0
\bm{\theta}^T\boldsymbol{x}\ll 0
θTx≪0)
进一步观察逻辑回归的代价函数,对于单个样本: Cost ( h θ ( x ) , y ) = − ( y ⋅ log ( h θ ( x ) ) + ( 1 − y ) ⋅ log ( 1 − h θ ( x ) ) ) \text{Cost}(h_{\bm{\theta}}\left(\boldsymbol{x}\right),y ) = - \left( \; \textcolor{red}{ y \cdot \log(h_{\bm{\theta}}(\boldsymbol{x})) } + \color{blue}{(1-y) \cdot \log(1-h_{\bm{\theta}}(\boldsymbol{x})) } \;\right) Cost(hθ(x),y)=−(y⋅log(hθ(x))+(1−y)⋅log(1−hθ(x)))代入 h θ ( x ) h_{\bm{\theta}}(\boldsymbol{x}) hθ(x) : Cost ( h θ ( x ) , y ) = − y log ( 1 1 + e − θ T x ) − ( 1 − y ) ⋅ log ( 1 − 1 1 + e − θ T x ) (1) \text{Cost}(h_{\bm{\theta}}\left(\boldsymbol{x}\right),y ) = \textcolor{red}{ -y \log (\dfrac{1}{1+e^{-\bm{\theta}^T\boldsymbol{x}}} ) } - \color{blue}{(1-y) \cdot \log(1- \dfrac{1}{1+e^{-\bm{\theta}^T\boldsymbol{x}}}) } \tag{1} Cost(hθ(x),y)=−ylog(1+e−θTx1)−(1−y)⋅log(1−1+e−θTx1)(1)
当 y = 1 y=1 y=1 时,式子(1)蓝色部分没有了。
此时代价函数 Cost = − log ( 1 1 + e − θ T x ) \text{Cost}=\textcolor{red}{ -\log (\dfrac{1}{1+e^{-\bm{\theta}^T\boldsymbol{x}}} ) } Cost=−log(1+e−θTx1),函数曲线如下:
这里用
z
z
z 代替
θ
T
x
\bm{\theta}^T\boldsymbol{x}
θTx。为了让代价函数更小,
z
z
z 会尽量往右边靠。
一般在 SVM 中,我们会换一种代价函数,如下图右边的曲线:
它和原来的形状很像,由两条直线线段组成。它的计算更方便,更适合 SVM 的优化。
当 y = 0 y=0 y=0 时,式子(1)红色部分没有了。
此时代价函数 Cost = − log ( 1 − 1 1 + e − θ T x ) \text{Cost}=\color{blue}{- \log(1- \dfrac{1}{1+e^{-\bm{\theta}^T\boldsymbol{x}}}) } Cost=−log(1−1+e−θTx1),函数曲线如下:
z z z 会尽量往左边靠。同样地,对于 SVM,我们给它换一个代价函数:
现在我们再来写出完整的代价函数。
逻辑回归的代价函数:
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^{m}_{i=1} y^{(i)} \textcolor{red}{ \left( -\log\left(h_{\bm{\theta}}(\boldsymbol{x}^{(i)}) \right) \right) } + (1-y^{(i)}) \color{blue}{ \left( - \log \left(1-h_{\bm{\theta}}(\boldsymbol{x}^{(i)}) \right) \right) } \right] + \frac{\lambda}{2m} \sum^{n}_{j=1} \theta_j^2
θminm1[i=1∑my(i)(−log(hθ(x(i))))+(1−y(i))(−log(1−hθ(x(i))))]+2mλj=1∑nθj2
然后把红色和蓝色的部分换成前面讲的:
min
θ
1
m
[
∑
i
=
1
m
y
(
i
)
cost
1
(
θ
T
x
(
i
)
)
+
(
1
−
y
(
i
)
)
cost
0
(
θ
T
x
(
i
)
)
]
+
λ
2
m
∑
j
=
1
n
θ
j
2
\min_{\theta} \frac{1}{m} \left[ \sum^{m}_{i=1} y^{(i)} \textcolor{red}{ \text{cost}_1(\bm{\theta}^T\boldsymbol{x}^{(i)}) } + (1-y^{(i)}) \textcolor{blue}{\text{cost}_0(\bm{\theta}^T\boldsymbol{x}^{(i)}) } \right] + \frac{\lambda}{2m} \sum^{n}_{j=1} \theta_j^2
θminm1[i=1∑my(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+2mλj=1∑nθj2
然后,常数项并不影响代价函数的优化,所以可以去掉
1
m
\dfrac{1}{m}
m1。同时把正则化权重
λ
\lambda
λ 换到左边的式子,用
C
C
C 表示:
min
θ
C
[
∑
i
=
1
m
y
(
i
)
cost
1
(
θ
T
x
(
i
)
)
+
(
1
−
y
(
i
)
)
cost
0
(
θ
T
x
(
i
)
)
]
+
∑
j
=
1
n
θ
j
2
(2)
\min_{\theta} C\left[ \sum^{m}_{i=1} y^{(i)} \text{cost}_1(\bm{\theta}^T\boldsymbol{x}^{(i)}) + (1-y^{(i)}) \text{cost}_0(\bm{\theta}^T\boldsymbol{x}^{(i)}) \right] + \sum^{n}_{j=1} \theta_j^2 \tag{2}
θminC[i=1∑my(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+j=1∑nθj2(2)
你也可以当做是 C = 1 λ C=\dfrac{1}{\lambda} C=λ1, C C C 同样是正则化权重,决定我们更关心左边式子的优化还是右边式子的优化。
所以 式子(2) 就是支持向量机(SVM)的整个优化目标函数。 当你最小化这个函数,就得到了 SVM 的参数。
得到参数 θ \bm{\theta} θ 后,当 θ T x ⩾ 0 \bm{\theta}^T\boldsymbol{x} \geqslant 0 θTx⩾0 时,SVM 的假设函数 h θ ( x ) h_{\bm{\theta}}(\boldsymbol{x}) hθ(x) 直接输出 1 1 1;否则直接输出 0 0 0。
2. 大间距的理解
人们有时将支持向量机看作是大间距分类器(Large Margin Classifier),我们来看看这是怎么回事。
在逻辑回归中,对于
y
=
1
y=1
y=1 和
y
=
0
y=0
y=0 的输出,只需要
θ
T
x
⩾
0
\bm{\theta}^T\boldsymbol{x} \geqslant 0
θTx⩾0 和
θ
T
x
⩽
0
\bm{\theta}^T\boldsymbol{x} \leqslant 0
θTx⩽0:
{
y
=
1
θ
T
x
⩾
0
y
=
0
θ
T
x
⩽
0
\left\{ \begin{array}{cc} y=1 \qquad \bm{\theta}^T\boldsymbol{x} \geqslant 0 \\ y=0 \qquad \bm{\theta}^T\boldsymbol{x} \leqslant 0 \end{array} \right.
{y=1θTx⩾0y=0θTx⩽0
而在 SVM 中,我们需要
θ
T
x
⩾
1
\color{red}\bm{\theta}^T\boldsymbol{x} \geqslant 1
θTx⩾1 和
θ
T
x
⩽
−
1
\color{red}\bm{\theta}^T\boldsymbol{x} \leqslant -1
θTx⩽−1:
{
y
=
1
θ
T
x
⩾
1
y
=
0
θ
T
x
⩽
−
1
(3)
\left\{ \begin{array}{cc} y=1 \qquad \bm{\theta}^T\boldsymbol{x} \geqslant 1 \\ \; \; \,y=0 \qquad \bm{\theta}^T\boldsymbol{x} \leqslant -1 \end{array} \right. \tag{3}
{y=1θTx⩾1y=0θTx⩽−1(3)
从这里可以看出,SVM 的要求会更严格一点。
当
C
C
C 设得很大时,SVM 会得到一个比较大的分类间距:
普通的分类器只是简单地把两个类分开,勉强分开就行了。
而 SVM 会努力用一个最大的间距来分离样本,所以有时 SVM 被大间距分类器。
如果这个时候出现了一个异常样本,继续用大的
C
C
C 值,就会像下面这样:
异常样本的出现,使它变得和普通分类器一样,不再具有大间隔。
虽然也能分开样本,但是没有完全分开,体现不出 SVM 的优势。
这个时候把
C
C
C 调小一点就好了。
当
C
C
C 不是非常非常大的时候,它可以忽略掉一些异常点的影响,得到更好的决策界。
回顾
C
=
1
λ
C=\dfrac{1}{\lambda}
C=λ1,可以得知:
C
C
C 较大时,相当于
λ
\lambda
λ 较小,可能会导致过拟合,高方差。
C
C
C 较小时,相当于
λ
\lambda
λ 较大,可能会导致低拟合,高偏差。
3. 大间距分类器的数学理解
先介绍一下向量内积:
设有两个向量
u
\boldsymbol{u}
u 和
v
\boldsymbol{v}
v:
u
=
[
u
1
u
2
]
v
=
[
v
1
v
2
]
\boldsymbol{u} = \begin{bmatrix} u_1 \\ u_2 \end{bmatrix} \quad \boldsymbol{v} = \begin{bmatrix} v_1 \\ v_2 \end{bmatrix} \quad
u=[u1u2]v=[v1v2] 则向量的内积为
u
⋅
v
=
u
T
v
=
[
u
1
u
2
]
[
v
1
v
2
]
=
u
1
v
1
+
u
2
v
2
\boldsymbol{u} \cdot \boldsymbol{v} = \boldsymbol{u}^T\boldsymbol{v} = \begin{bmatrix} u_1 \; u_2 \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \end{bmatrix} = u_1 v_1 + u_2 v_2
u⋅v=uTv=[u1u2][v1v2]=u1v1+u2v2
也可以表示为 u ⋅ v = ∥ u ∥ ∥ v ∥ cos θ \boldsymbol{u} \cdot \boldsymbol{v} = \|\boldsymbol{u}\| \|\boldsymbol{v}\| \cos\theta u⋅v=∥u∥∥v∥cosθ
其中 ∥ v ∥ \|\boldsymbol{v}\| ∥v∥ 表示向量 v \boldsymbol{v} v 的范数,或者说向量的模长: ∥ v ∥ = v 1 2 + v 2 2 \|\boldsymbol{v}\| = \sqrt{v_1^2 + v_2^2} ∥v∥=v12+v22
从几何上看, p p p 为 v \boldsymbol{v} v 在 u \boldsymbol{u} u 上的投影,是一个长度: p = ∥ v ∥ cos θ p =\|\boldsymbol{v}\| \cos\theta p=∥v∥cosθ
所以又可以写成: u T v = p ⋅ ∥ u ∥ \boldsymbol{u}^T\boldsymbol{v} = p \cdot \|\boldsymbol{u}\| uTv=p⋅∥u∥
p p p 可能是负数,例如这样的情况:
夹角 θ \theta θ 大于 90 90 90 度, cos θ \cos\theta cosθ 为负数,因此 p p p 为负数。
现在用一个特定的例子来分析大间距产生的原理。
假设我们的模型参数是 2 个( θ 1 , θ 2 \theta_1,\theta_2 θ1,θ2),输入也是 2 个( x 1 , x 2 x_1,x_2 x1,x2), θ T x = θ 1 x 1 + θ 2 x 2 \bm{\theta}^T\boldsymbol{x} = \theta_1 x_1 + \theta_2 x_2 θTx=θ1x1+θ2x2 。
把参数
θ
\bm{\theta}
θ 和输入
x
\boldsymbol{x}
x 都看做向量,根据上面介绍的内积知识,有:
θ
T
x
=
p
⋅
∥
θ
∥
\bm{\theta}^T\boldsymbol{x} = p \cdot \| \bm{\theta} \|
θTx=p⋅∥θ∥ 其中
p
p
p 是向量
x
\boldsymbol{x}
x 在向量
θ
\bm{\theta}
θ 上的投影长度:
根据某些数学原理,向量
θ
\bm{\theta}
θ 一定是垂直于决策边界的。
再看回我们的代价函数:
min
θ
C
[
∑
i
=
1
m
y
i
cost
1
(
θ
T
x
i
)
+
(
1
−
y
i
)
cost
0
(
θ
T
x
i
)
]
+
∑
j
=
1
n
θ
j
2
(4)
\min_{\theta} C\left[ \sum^{m}_{i=1} y^i \text{cost}_1(\bm{\theta}^T\boldsymbol{x}^i) + (1-y^i) \text{cost}_0(\bm{\theta}^T\boldsymbol{x}^i) \right] + \sum^{n}_{j=1} \theta_j^2 \tag{4}
θminC[i=1∑myicost1(θTxi)+(1−yi)cost0(θTxi)]+j=1∑nθj2(4)
由于 θ \bm{\theta} θ 是一个向量,当忽略 θ 0 \theta_0 θ0 时,式子(4)右边的 ∑ j = 1 n θ j 2 \sum\limits^{n}_{j=1} \theta_j^2 j=1∑nθj2 可以看做是 θ \bm{\theta} θ 的模长: ∥ θ ∥ 2 \| \bm{\theta} \|^2 ∥θ∥2。
在最小化代价函数时,当样本标签为 y = 1 y=1 y=1 时:
∙
\bullet
∙ 根据式子(3),我们希望
θ
T
x
\bm{\theta}^T\boldsymbol{x}
θTx 远大于
1
1
1,即
p
⋅
∥
θ
∥
p \cdot \| \bm{\theta} \|
p⋅∥θ∥ 尽量大。
∙
\bullet
∙ 根据式子(4),我们希望
∑
j
=
1
n
θ
j
2
\sum\limits^{n}_{j=1} \theta_j^2
j=1∑nθj2 尽量小,即
∥
θ
∥
2
\| \bm{\theta} \|^2
∥θ∥2 尽量小。
要满足上述约束,只能使 p p p 尽量大。所以最小化代价函数的过程会使 p p p 变大。
p
p
p 是
x
\boldsymbol{x}
x 在
θ
\bm{\theta}
θ 上投影的长度,样本
x
\boldsymbol{x}
x 已经确定,所以
θ
\bm{\theta}
θ 决定了
p
p
p 的大小。
上面的图展示了 2 种情况,形象地说, θ \bm{\theta} θ 指向样本聚集点时, p p p 最大,分类间距最大。
结合上述所讲,优化结束时使得 p p p 值较大,对应参数 θ \bm{\theta} θ,也得到最大决策边界。
4. 核函数 (kernels)
如上图所示,这种复杂的决策边界,没办法用线性模型来表示。
像之前用的 θ T x = θ 1 x 1 + θ 2 x 2 \bm{\theta}^T\boldsymbol{x} = \theta_1 x_1 + \theta_2 x_2 θTx=θ1x1+θ2x2 是无法做到的。
可能需要用到高级数的多项式模型,如: θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 x 2 + θ 4 x 1 2 + θ 5 x 2 2 + ⋯ \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_1 x_2 + \theta_4 x_1^2 + \theta_5 x_2^2 + \cdots θ0+θ1x1+θ2x2+θ3x1x2+θ4x12+θ5x22+⋯
x 1 x_1 x1 和 x 2 x_2 x2 可以有很多组合方式,每种组合方式表示一种特征。我们用 f f f 来表示特征:
例如 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_1 x_2,f_4 = x_1^2,f_5 = x_2^2 f1=x1,f2=x2,f3=x1x2,f4=x12,f5=x22
则 h θ ( x ) = θ 1 f 1 + θ 2 f 2 + ⋯ + θ n f n h_{\bm{\theta}}(\boldsymbol{x}) = \theta_1 f_1 + \theta_2 f_2 + \cdots + \theta_n f_n hθ(x)=θ1f1+θ2f2+⋯+θnfn
上面这样的特征组合形式太多了,有没有更好的办法来定义特征呢?我们可以用 核函数(kernels) 来计算。
举一个例子,现在有一组训练样本
x
\boldsymbol{x}
x,我们先选出一组 地标(landmarks):
l
(
1
)
\boldsymbol{l}^{(1)}
l(1),
l
(
2
)
\boldsymbol{l}^{(2)}
l(2),
l
(
3
)
\boldsymbol{l}^{(3)}
l(3)。
根据
x
\boldsymbol{x}
x 与地标之间的近似程度来选取特征
f
1
f_1
f1,
f
2
f_2
f2,
f
3
f_3
f3。
例如:
f
1
=
similarity
(
x
,
l
(
1
)
)
=
exp
(
−
∥
x
−
l
(
1
)
∥
2
2
σ
2
)
f_1 = \text{similarity}(\boldsymbol{x},\boldsymbol{l}^{(1)}) = \exp\left(-\dfrac{\|\boldsymbol{x}-\boldsymbol{l}^{(1)}\|^2}{2\sigma^2} \right)
f1=similarity(x,l(1))=exp(−2σ2∥x−l(1)∥2)
其中 ∥ x − l ( 1 ) ∥ 2 \|\boldsymbol{x}-\boldsymbol{l}^{(1)}\|^2 ∥x−l(1)∥2 表示向量 x \boldsymbol{x} x 与向量 l ( 1 ) \boldsymbol{l}^{(1)} l(1) 之间的欧氏距离。
同理 f 2 = similarity ( x , l ( 2 ) ) = exp ( − ∥ x − l ( 2 ) ∥ 2 2 σ 2 ) f 3 = similarity ( x , l ( 3 ) ) = exp ( − ∥ x − l ( 3 ) ∥ 2 2 σ 2 ) f_2 = \text{similarity}(\boldsymbol{x},\boldsymbol{l}^{(2)}) = \exp\left(-\dfrac{\|\boldsymbol{x}-\boldsymbol{l}^{(2)}\|^2}{2\sigma^2}\right) \\[1em] f_3 = \text{similarity}(\boldsymbol{x},\boldsymbol{l}^{(3)}) = \exp\left(-\dfrac{\|\boldsymbol{x}-\boldsymbol{l}^{(3)}\|^2}{2\sigma^2}\right) f2=similarity(x,l(2))=exp(−2σ2∥x−l(2)∥2)f3=similarity(x,l(3))=exp(−2σ2∥x−l(3)∥2)
这个
similarity
\text{similarity}
similarity 就叫做核函数(kernel function),而这里实际上就是个高斯核函数(Gaussian Kernel)。
除了这个高斯核函数,还有其它的相似度度量函数,也就是别的核函数,之后再介绍。
为了简单起见,也把
similarity
(
x
,
l
(
3
)
)
\text{similarity}(\boldsymbol{x},\boldsymbol{l}^{(3)})
similarity(x,l(3)) 写成
k
(
x
,
l
(
3
)
)
k(\boldsymbol{x},\boldsymbol{l}^{(3)})
k(x,l(3))。
下面来讲为什么核函数和地标有效。
把欧式距离展开:
f
1
=
similarity
(
x
,
l
(
1
)
)
=
exp
(
−
∥
x
−
l
(
1
)
∥
2
2
σ
2
)
=
exp
(
−
∑
j
=
1
n
(
x
j
−
l
j
(
1
)
)
2
2
σ
2
)
f_1 = \text{similarity}(\boldsymbol{x},\boldsymbol{l}^{(1)}) = \exp\left(-\dfrac{\|\boldsymbol{x}-\boldsymbol{l}^{(1)}\|^2}{2\sigma^2} \right) = \exp\left(-\dfrac{ \sum_{j=1}^{n} (x_j - l_j^{(1)})^2}{2\sigma^2}\right)
f1=similarity(x,l(1))=exp(−2σ2∥x−l(1)∥2)=exp(−2σ2∑j=1n(xj−lj(1))2)
假设有一个样本
x
\boldsymbol{x}
x 与地标
l
(
1
)
\boldsymbol{l}^{(1)}
l(1) 很近, 那么欧式距离很小:
f
1
≈
exp
(
−
0
2
σ
2
)
≈
1
f_1 \approx \exp\left(-\dfrac{0}{2\sigma^2} \right) \approx 1
f1≈exp(−2σ20)≈1
如果样本
x
\boldsymbol{x}
x 与地标
l
(
1
)
\boldsymbol{l}^{(1)}
l(1) 很远,那么欧式距离很大:
f
1
≈
exp
(
−
∞
2
σ
2
)
≈
0
f_1 \approx \exp\left(-\dfrac{\infty}{2\sigma^2} \right) \approx 0
f1≈exp(−2σ2∞)≈0
其实在这个例子里 f 1 f_1 f1 就是一个二维的高斯函数(Gaussian Function)。
假设我们的地标 l ( 1 ) = ( 3 , 5 ) \boldsymbol{l}^{(1)} = (3, \,5) l(1)=(3,5),则它的图像如下:
中心点 (那个山峰) 的 f 1 f_1 f1 值为 1 1 1 ,远离中心点时 f 1 f_1 f1 逐渐减小。
方差 σ 2 \sigma^2 σ2 决定了偏离中心点时函数值的下降速率。
现在我们选了 3 个标记点,由 3 个核函数决定预测结果。
假设我们已经训练得到参数:
θ
0
=
−
0.5
,
θ
1
=
1
,
θ
2
=
1
,
θ
3
=
0
\theta_0=-0.5 ,\quad \theta_1=1, \quad \theta_2=1, \quad \theta_3=0
θ0=−0.5,θ1=1,θ2=1,θ3=0
下面这张图的红色圈圈就是决策边界。
图中 紫色 的点靠近
l
(
1
)
\boldsymbol{l}^{(1)}
l(1),于是
f
1
≈
1
f_1 \approx 1
f1≈1,
f
2
f_2
f2 和
f
3
f_3
f3 接近
0
0
0。
因此
h
θ
(
x
)
=
θ
0
+
θ
1
f
1
+
θ
2
f
2
+
θ
3
f
3
=
−
0.5
+
1
×
1
+
1
×
0
+
0
×
0
=
0.5
>
0
h_{\bm{\theta}}(\boldsymbol{x}) = \theta_0 + \theta_1 f_1 + \theta_2 f_2 + \theta_3 f_3 = -0.5 + 1\times1+1\times0 + 0\times0 = 0.5> 0
hθ(x)=θ0+θ1f1+θ2f2+θ3f3=−0.5+1×1+1×0+0×0=0.5>0,预测
y
=
1
y=1
y=1。
同理 绿色 的点靠近 l ( 2 ) \boldsymbol{l}^{(2)} l(2),也预测 y = 1 y=1 y=1。
浅蓝色 的点距离 3 个地标都远,因此预测 y = 0 y=0 y=0。
通过定义 标记点 和 核函数,我们就能训练出复杂的非线性边界。(接近标记点的数据预测 1 1 1,远离标记点的预测 0 0 0)
以上就是关于核函数的部分概念,以及在支持向量机中的使用介绍。
剩下的问题是:如何选择标记点;是否还有其它的相似度方程。
标记点的选择
假设现在有 m m m 个样本: ( x ( 1 ) , y ( 1 ) ) (\boldsymbol{x}^{(1)},y^{(1)}) (x(1),y(1)), ( x ( 2 ) , y ( 2 ) ) (\boldsymbol{x}^{(2)},y^{(2)}) (x(2),y(2)), ⋯ \cdots ⋯, ( x ( m ) , y ( m ) ) (\boldsymbol{x}^{(m)},y^{(m)}) (x(m),y(m))。
那就直接在每个样本上建立标记点: l ( 1 ) = x ( 1 ) \boldsymbol{l}^{(1)} = \boldsymbol{x}^{(1)} l(1)=x(1), l ( 2 ) = x ( 2 ) \boldsymbol{l}^{(2)} = \boldsymbol{x}^{(2)} l(2)=x(2), ⋯ \cdots ⋯, l ( m ) = x ( m ) \boldsymbol{l}^{(m)} = \boldsymbol{x}^{(m)} l(m)=x(m)。一共 m m m 个标记点。
对于输入样本
x
\boldsymbol{x}
x,我们算出它的特征向量
f
\boldsymbol{f}
f,即
x
\boldsymbol{x}
x 与每一个标记点之间的相似度:
f
1
=
similarity
(
x
,
l
(
1
)
)
f
2
=
similarity
(
x
,
l
(
2
)
)
⋮
f
m
=
similarity
(
x
,
l
(
m
)
)
f_1 = \text{similarity}(\boldsymbol{x},\boldsymbol{l}^{(1)}) \\ f_2 = \text{similarity}(\boldsymbol{x},\boldsymbol{l}^{(2)}) \\ \vdots \\ f_m = \text{similarity}(\boldsymbol{x},\boldsymbol{l}^{(m)})
f1=similarity(x,l(1))f2=similarity(x,l(2))⋮fm=similarity(x,l(m))
f = [ f 1 f 2 ⋮ f m ] \boldsymbol{f} = \begin{bmatrix} f_1 \\ f_2 \\ \vdots \\ f_m \end{bmatrix} f=⎣⎢⎢⎢⎡f1f2⋮fm⎦⎥⎥⎥⎤
当 θ T f ≥ 1 \bm{\theta}^T\boldsymbol{f} \geq 1 θTf≥1 时,预测 y = 1 y=1 y=1。 反之预测 y = 0 y=0 y=0。
参数
θ
\bm{\theta}
θ 如何训练获得呢?修改之前的代价函数,把
θ
T
x
\bm{\theta}^T\boldsymbol{x}
θTx 换成
θ
T
f
\bm{\theta}^T\boldsymbol{f}
θTf 即可:
min
θ
C
[
∑
i
=
1
m
y
(
i
)
cost
1
(
θ
T
f
(
i
)
)
+
(
1
−
y
(
i
)
)
cost
0
(
θ
T
f
(
i
)
)
]
+
∑
j
=
1
m
θ
j
2
\min_{\theta} C\left[ \sum^{m}_{i=1} y^{(i)} \text{cost}_1(\bm{\theta}^T\boldsymbol{f}^{(i)}) + (1-y^{(i)}) \text{cost}_0(\bm{\theta}^T\boldsymbol{f}^{(i)}) \right] + \sum^{m}_{j=1} \theta_j^2
θminC[i=1∑my(i)cost1(θTf(i))+(1−y(i))cost0(θTf(i))]+j=1∑mθj2
这个代价函数使用了新的特征 f \boldsymbol{f} f,也就是我们的核函数,或者说是相似度函数。
最小化它,就能得到参数 θ \bm{\theta} θ。
在实际操作过程不需要自己实现代价函数,也不需要手写优化算法,直接使用现有的软件包\工具即可。
使用高斯核函数时有两个参数 C C C 和 σ \sigma σ。
C
C
C 较大时,可能会导致过拟合,高方差;
C
C
C 较小时,可能会导致低拟合,高偏差;
σ
\sigma
σ 较大时,可能会导致低方差,高偏差;
σ
\sigma
σ 较小时,可能会导致低偏差,高方差。
在高斯核函数之外我们还有其他一些选择,如:
- 多项式核函数(Polynomial Kernel)
- 字符串核函数(String kernel)
- 卡方核函数( chi-square kernel)
- 直方图交集核函数(histogram intersection kernel)
等等