∗
∗
∗
点
击
查
看
:
吴
恩
达
机
器
学
习
—
—
整
套
笔
记
+
编
程
作
业
详
解
∗
∗
∗
\color{#f00}{***\ 点击查看\ :吴恩达机器学习 \ —— \ 整套笔记+编程作业详解\ ***}
∗ ∗ ∗ 点 击 查 看 : 吴 恩 达 机 器 学 习 — — 整 套 笔 记 + 编 程 作 业 详 解 ∗ ∗ ∗ 第一部分:支持向量机 1/3 —— 建立 SVM 基本型(超平面与间隔) 第二部分:支持向量机 2/3 —— 线性可分SVM
非线性问题
我们已经了解到,SVM如何处理线性可分的情况,而对于非线性的情况,SVM的处理方式就是通过一个非线性变换,将输入的低维特征映射到高维特征空间,将其变成在高维空间线性可分,并在这个高维空间中构造最优分类超平面,如下图:
根据上篇文章,线性可分的情况下,可知最终的超平面方程为:
f
(
x
)
=
w
T
x
+
b
=
∑
i
=
1
m
α
i
y
i
x
i
T
x
+
b
\begin{aligned} f(\boldsymbol{x}) &=w^{T} x+b \\ &=\sum_{i=1}^{m} \alpha_{i} y_{i} \boldsymbol{x}_{i}^{T} \boldsymbol{x}+b \end{aligned}
f ( x ) = w T x + b = i = 1 ∑ m α i y i x i T x + b 用内积表示:
f
(
x
)
=
∑
i
=
1
m
α
i
y
i
⟨
x
i
,
x
⟩
+
b
f(\boldsymbol{x})=\sum_{i=1}^{m} \alpha_{i} y_{i}\left\langle\boldsymbol{x}_{i}, \boldsymbol{x}\right\rangle+b
f ( x ) = i = 1 ∑ m α i y i ⟨ x i , x ⟩ + b 对于线性不可分,我们使用一个非线性映射,将数据映射到特征空间,在特征空间中使用线性学习器,分类函数变形如下:
f
(
x
)
=
∑
i
=
1
m
α
i
y
i
⟨
ϕ
(
x
i
)
,
ϕ
(
x
)
⟩
+
b
f(\boldsymbol{x})=\sum_{i=1}^{m} \alpha_{i} y_{i}\left\langle\phi\left(\boldsymbol{x}_{i}\right), \phi(\boldsymbol{x})\right\rangle+b
f ( x ) = i = 1 ∑ m α i y i ⟨ ϕ ( x i ) , ϕ ( x ) ⟩ + b 其中
ϕ
ϕ
ϕ 表示从输入空间(X)到某个特征空间(F)的映射,这意味着建立非线性学习器分为两步:
首先使用一个非线性映射将数据变换到一个特征空间F;
然后在特征空间使用线性学习器进行分类。
由上式可知,我们的主要计算任务就是高维特征空间的内积
<
ϕ
(
x
i
)
,
ϕ
(
x
)
>
<ϕ(x_i),ϕ(x)>
< ϕ ( x i ) , ϕ ( x ) >
核技巧与核函数
假如在低维空间中存在某个函数
K
K
K ,它恰好等于在高维空间中的内积,即
K
(
x
i
,
x
)
=
<
ϕ
(
x
i
)
,
ϕ
(
x
)
>
K(x_i, x)=\ <ϕ(x_i),ϕ(x)>
K ( x i , x ) = < ϕ ( x i ) , ϕ ( x ) > 那么SVM就不用计算复杂的非线性变换,而由这个函数
K
(
x
i
,
x
)
K(x_i, x)
K ( x i , x ) 直接得到非线性变换的内积,大大简化了计算。这样的函数
K
(
x
i
,
x
)
K(x_i, x)
K ( x i , x ) 就被称为核函数 。
这种将内积替换成核函数的方式被称为 核技巧(kernel trick) 。
举个例子:假设现在有两个二维空间中的数据点
x
=
(
x
1
,
x
2
)
x=(x1,x2)
x = ( x 1 , x 2 ) 和
y
=
(
y
1
,
y
2
)
y=(y1,y2)
y = ( y 1 , y 2 ) ,考虑下面这个二元函数:
K
(
x
,
y
)
=
(
x
.
y
+
1
)
2
=
(
x
1
y
1
+
x
2
y
2
+
1
)
2
=
x
1
2
y
1
2
+
x
2
2
y
2
2
+
2
x
1
y
1
+
2
x
2
y
2
+
2
x
1
x
2
y
1
y
2
=
(
x
1
2
,
x
2
2
,
2
x
1
x
2
,
2
x
1
,
2
x
2
,
1
)
⋅
(
y
1
2
,
y
2
2
,
2
y
1
y
2
,
2
y
1
,
2
y
2
,
1
)
=
<
ϕ
(
x
)
,
ϕ
(
y
)
>
\begin{aligned} K(x, y)=(x . y+1)^{2}&=\left(x_{1} y_{1}+x_{2} y_{2}+1\right)^{2} \\ &=x_{1}^{2} y_{1}^{2}+x_{2}^{2} y_{2}^{2}+2 x_{1} y_{1}+2 x_{2} y_{2}+2 x_{1} x_{2} y_{1} y_{2} \\ &=\left(x_{1}^{2}, x_{2}^{2}, \sqrt{2} x_{1} x_{2}, \sqrt{2} x_{1}, \sqrt{2} x_{2}, 1\right) \cdot\left(y_{1}^{2}, y_{2}^{2}, \sqrt{2} y_{1} y_{2}, \sqrt{2} y_{1}, \sqrt{2} y_{2}, 1\right) \\ &=<ϕ(x),ϕ(y)> \end{aligned}
K ( x , y ) = ( x . y + 1 ) 2 = ( x 1 y 1 + x 2 y 2 + 1 ) 2 = x 1 2 y 1 2 + x 2 2 y 2 2 + 2 x 1 y 1 + 2 x 2 y 2 + 2 x 1 x 2 y 1 y 2 = ( x 1 2 , x 2 2 , 2
x 1 x 2 , 2
x 1 , 2
x 2 , 1 ) ⋅ ( y 1 2 , y 2 2 , 2
y 1 y 2 , 2
y 1 , 2
y 2 , 1 ) = < ϕ ( x ) , ϕ ( y ) > 发现最后结果恰好是两个向量的内积,而且两个向量分别是二维空间数据点
x
x
x 和
y
y
y 在5维空间中的映射!想到刚才核函数的定义,我们很容易知道,
K
(
x
,
y
)
K(x,y)
K ( x , y ) 就是一个核函数,这样大大简化了运算。
通过核技巧的转变,我们的超平面方程变为:
f
(
x
)
=
∑
i
=
1
m
α
i
y
i
K
(
x
i
,
x
)
+
b
f(\boldsymbol{x})=\sum_{i=1}^{m} \alpha_{i} y_{i} K\left(\boldsymbol{x}_{i}, \boldsymbol{x}\right)+b
f ( x ) = i = 1 ∑ m α i y i K ( x i , x ) + b 对偶问题变为:
max
α
∑
i
=
1
m
α
i
−
1
2
α
i
α
j
y
i
y
j
K
(
x
i
,
x
j
)
s.t.
α
i
≥
0
,
i
=
1
,
2
,
⋯
,
m
∑
i
=
1
m
α
i
y
i
=
0
\begin{aligned} &\max _{\boldsymbol{\alpha}} \sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \alpha_{i} \alpha_{j} y_{i} y_{j} K\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right) \\ &\text { s.t. } \alpha_{i} \geq 0, i=1,2, \cdots, m \\ &\quad \sum_{i=1}^{m} \alpha_{i} y_{i}=0 \end{aligned}
α max i = 1 ∑ m α i − 2 1 α i α j y i y j K ( x i , x j ) s.t. α i ≥ 0 , i = 1 , 2 , ⋯ , m i = 1 ∑ m α i y i = 0
核函数的选择
常用的核函数有很多,例如,线性核、多项式核、拉普拉斯核等等,一般我们使用径向基核函数(RBF)。
径向基核函数是SVM中常用的一个核函数。径向基核函数采用向量作为自变量的函数,能够基于向量举例运算输出一个标量。径向基核函数的高斯版本的公式如下:
K
(
x
1
,
x
2
)
=
exp
{
−
∥
x
1
−
x
2
∥
2
2
σ
2
}
K\left(\boldsymbol{x}_{1}, \boldsymbol{x}_{2}\right)=\exp \left\{-\frac{\left\|\boldsymbol{x}_{1}-\boldsymbol{x}_{2}\right\|^{2}}{2 \sigma^{2}}\right\}
K ( x 1 , x 2 ) = exp { − 2 σ 2 ∥ x 1 − x 2 ∥ 2 } 其中,σ是用户自定义的用于确定到达率(reach)或者说函数值跌落到0的速度参数。
如果σ选得很大,模型复杂度越高,高次特征上的权重实际上衰减得非常快,所以实际上(数值上近似一下)相当于一个低维的子空间;
如果σ选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。
总的来说,通过调控参数σ,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。
推荐阅读: 支持向量机实战篇之再撕非线性SVM Coursera-吴恩达-机器学习-(第7周笔记)支持向量机