∗ ∗ ∗ 点 击 查 看 : 吴 恩 达 机 器 学 习 — — 整 套 笔 记 + 编 程 作 业 详 解 ∗ ∗ ∗ \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周笔记)支持向量机