吴恩达机器学习(七)支持向量机 3/3 —— 非线性 SVM

    :     +   \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 ) = 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(\boldsymbol{x})=\sum_{i=1}^{m} \alpha_{i} y_{i}\left\langle\phi\left(\boldsymbol{x}_{i}\right), \phi(\boldsymbol{x})\right\rangle+b 其中 ϕ ϕ 表示从输入空间(X)到某个特征空间(F)的映射,这意味着建立非线性学习器分为两步:

  1. 首先使用一个非线性映射将数据变换到一个特征空间F;
  2. 然后在特征空间使用线性学习器进行分类。

由上式可知,我们的主要计算任务就是高维特征空间的内积 < ϕ ( x i ) , ϕ ( x ) > <ϕ(x_i),ϕ(x)>

核技巧与核函数

假如在低维空间中存在某个函数 K K ,它恰好等于在高维空间中的内积,即 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) 就被称为核函数

这种将内积替换成核函数的方式被称为 核技巧(kernel trick)

举个例子:假设现在有两个二维空间中的数据点 x = ( x 1 , x 2 ) x=(x1,x2) y = ( y 1 , y 2 ) y=(y1,y2) ,考虑下面这个二元函数: 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} 发现最后结果恰好是两个向量的内积,而且两个向量分别是二维空间数据点 x x y y 在5维空间中的映射!想到刚才核函数的定义,我们很容易知道, 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 对偶问题变为:
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}

核函数的选择

常用的核函数有很多,例如,线性核、多项式核、拉普拉斯核等等,一般我们使用径向基核函数(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\}
其中,σ是用户自定义的用于确定到达率(reach)或者说函数值跌落到0的速度参数。

  • 如果σ选得很大,模型复杂度越高,高次特征上的权重实际上衰减得非常快,所以实际上(数值上近似一下)相当于一个低维的子空间;
  • 如果σ选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。

总的来说,通过调控参数σ,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。


推荐阅读:
支持向量机实战篇之再撕非线性SVM
Coursera-吴恩达-机器学习-(第7周笔记)支持向量机

发布了21 篇原创文章 · 获赞 21 · 访问量 1954

猜你喜欢

转载自blog.csdn.net/m0_37867091/article/details/105341746