针对 “支持向量机” 将分为以下几个部分进行介绍:
本内容将介绍 非线性支持向量机。
在 支持向量机 01 - 线性可分支持向量机和线性支持向量机 中讲解的都是线性分类问题。但是,在现实问题中存在着非线性分类问题,即在原始样本空间内并不存在一个能正确划分两类样本的超平面。
我们先看一个例子:如图-1 所示,图中 “●” 表示正实例点,“×” 表示负实例点。可以看到,无法用一条直线(线性模型)将正负实例正确分开,但可以用一条椭圆曲线(非线性模型)将它们正确分开。
非线性问题往往不好求解,所以希望能用解线性分类问题的方法解决这个问题。所采取的方法是进行一个非线性变换,将非线性问题变换为线性问题,通过解变换后的线性问题的方法求解原来的非线性问题。对图-1 所示的例子,通过变换,将左图中椭圆变换成右图中的直线,将非线性分类问题变换为线性分类问题。
设原空间为 X ⊆ R 2 \mathcal{X} \subseteq \mathbb{R}^{2} X⊆R2, x = ( x 1 ; x 2 ) ∈ X \mathbf{x} = (x_1; x_2) \in \mathcal{X} x=(x1;x2)∈X,新空间为 Z ⊆ R 2 \mathcal{Z} \subseteq \mathbb{R}^{2} Z⊆R2, z = ( z 1 ; z 2 ) ∈ Z \mathbf{z} = (z_1; z_2) \in \mathcal{Z} z=(z1;z2)∈Z,定义从原空间到新空间的变换:
(1) z = ϕ ( x ) = ( ( x 1 ) 2 ; ( x 2 ) 2 ) \mathbf{z} = \phi(\mathbf{x}) = \left((x_1)^2; (x_2)^2\right) \tag{1} z=ϕ(x)=((x1)2;(x2)2)(1)
经过变换 z = ϕ ( x ) \mathbf{z} = \phi(\mathbf{x}) z=ϕ(x),原空间 X ⊆ R 2 \mathcal{X} \subseteq \mathbb{R}^2 X⊆R2 变换为新空间 Z ⊆ R 2 \mathcal{Z} \subseteq \mathbb{R}^2 Z⊆R2,原空间中的点相应地变换为新空间的点,原空间的椭圆
(2) w 1 ( x 1 ) 2 + w 2 ( x 2 ) 2 + b = 0 w_1 (x_1)^2 + w_2(x_2)^2 + b = 0 \tag{2} w1(x1)2+w2(x2)2+b=0(2)
变换为新空间中的直线
(3) w 1 z 1 + w 2 z 2 + b = 0 w_1 z_1 + w_2 z_2 + b = 0 \tag{3} w1z1+w2z2+b=0(3)
在变换后的新空间中,直线 w 1 z 1 + w 2 z 2 + b = 0 w_1 z_1 + w_2 z_2 + b = 0 w1z1+w2z2+b=0 可以将变换后的正负实例点正确分开。这样,原空间的非线性可分问题就变成了新空间中的线性可分问题。
上面的例子说明,用线性分类方法求解非线性分类问题分为两步:
核技巧 就属于这样的方法。
核技巧应用到支持向量机,其基本想法就是通过一个非线性变换将输入空间(欧式空间 R n \mathbb{R}^n Rn 或离散集合)对应于一个特征空间(希尔伯特空间 H \mathcal{H} H),使得在输入空间 R n \mathbb{R}^n Rn 中的超曲面模型对应于特征空间 H \mathcal{H} H 中的超平面模型(支持向量机)。这样,分类问题的学习任务通过在特征空间中求解线性支持向量机就可以完成。
定义:设 X \mathcal{X} X 是输入空间(欧式空间 R n \mathbb{R}^n Rn 或离散集合),又设 H \mathcal{H} H 为特征空间(希尔伯特空间),存在一个从 X \mathcal{X} X 到 H \mathcal{H} H 的映射 ϕ ( x ) : X → H \phi (\mathbf{x}): \mathcal{X} \rightarrow \mathcal{H} ϕ(x):X→H,对所有 x ( i ) , x ( j ) ∈ X \mathbf{x}^{(i)}, \mathbf{x}^{(j)} \in \mathcal{X} x(i),x(j)∈X,函数 K ( x ( i ) , x ( j ) ) K \left( \mathbf{x}^{(i)}, \mathbf{x}^{(j)} \right) K(x(i),x(j)) 满足条件
(4) K ( x ( i ) , x ( j ) ) = ϕ ( x ( i ) ) ⋅ ϕ ( x ( j ) ) K \left( \mathbf{x}^{(i)}, \mathbf{x}^{(j)} \right) = \phi \left( \mathbf{x}^{(i)} \right) \cdot \phi \left( \mathbf{x}^{(j)} \right) \tag{4} K(x(i),x(j))=ϕ(x(i))⋅ϕ(x(j))(4)
则称 K ( x ( i ) , x ( j ) ) K \left( \mathbf{x}^{(i)}, \mathbf{x}^{(j)} \right) K(x(i),x(j)) 为 核函数,式中 ϕ ( x ( i ) ) ⋅ ϕ ( x ( j ) ) \phi \left( \mathbf{x}^{(i)} \right) \cdot \phi \left( \mathbf{x}^{(j)} \right) ϕ(x(i))⋅ϕ(x(j)) 为 ϕ ( x ( i ) ) \phi \left( \mathbf{x}^{(i)} \right) ϕ(x(i)) 与 ϕ ( x ( j ) ) \phi \left( \mathbf{x}^{(j)} \right) ϕ(x(j)) 的內积(点积)。
核技巧的想法是,在学习与预测中只定义核函数 K ( x ( i ) , x ( j ) ) K(\mathbf{x}^{(i)},\mathbf{x}^{(j)}) K(x(i),x(j)),而不是显式地定义映射函数 ϕ \phi ϕ。通常,直接计算 K ( x ( i ) , x ( j ) ) K(\mathbf{x}^{(i)},\mathbf{x}^{(j)}) K(x(i),x(j)) 比较容易,而通过 ϕ ( x ( i ) ) \phi(\mathbf{x}^{(i)}) ϕ(x(i)) 和 ϕ ( x ( j ) ) \phi(\mathbf{x}^{(j)}) ϕ(x(j)) 计算 K ( x ( i ) , x ( j ) ) K(\mathbf{x}^{(i)},\mathbf{x}^{(j)}) K(x(i),x(j)) 并不容易。注意, ϕ \phi ϕ 是输入空间 R n \mathbb{R}^{n} Rn 到特征空间 H \mathcal{H} H 的映射,特征空间 H \mathcal{H} H 一般是高维的,甚至是无穷维的。
我们注意到在线性支持向量机的对偶问题的目标函数涉及输入实例与实例之间的內积。在对偶问题的目标函数中的內积 x ( i ) ⋅ x ( j ) \mathbf{x}^{(i)} \cdot \mathbf{x}^{(j)} x(i)⋅x(j) 可以用核函数 K ( x ( i ) , x ( j ) ) = ϕ ( x ( i ) ) ⋅ ϕ ( x ( j ) ) K(\mathbf{x}^{(i)},\mathbf{x}^{(j)}) = \phi(\mathbf{x}^{(i)}) \cdot \phi(\mathbf{x}^{(j)}) K(x(i),x(j))=ϕ(x(i))⋅ϕ(x(j)) 来代替。此时对偶问题的目标函数成为
(5) max α ( ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y ( i ) y ( j ) K ( x ( i ) , x ( j ) ) ) \max_\alpha \left( \sum_{i=1}^{m}\alpha_i - \frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_i \alpha_j y^{(i)} y^{(j)} K(\mathbf{x}^{(i)},\mathbf{x}^{(j)}) \right) \tag{5} αmax(i=1∑mαi−21i=1∑mj=1∑mαiαjy(i)y(j)K(x(i),x(j)))(5)
求解后即可得到
(6) f ( x ) = ∑ i = 1 m α i y ( i ) K ( x ( i ) , x ) + b f(\mathbf{x}) = \sum_{i=1}^{m} \alpha_i y^{(i)} K(\mathbf{x}^{(i)}, \mathbf{x}) + b \tag{6} f(x)=i=1∑mαiy(i)K(x(i),x)+b(6)
这等价于经过映射函数 ϕ \phi ϕ 将原来的输入空间变换为一个新的特征空间,将输入空间中的內积 x ( i ) ⋅ x ( j ) \mathbf{x}^{(i)} \cdot \mathbf{x}^{(j)} x(i)⋅x(j) 变换为特征空间中的內积 ϕ ( x ( i ) ) ⋅ ϕ ( x ( j ) ) \phi(\mathbf{x}^{(i)}) \cdot \phi(\mathbf{x}^{(j)}) ϕ(x(i))⋅ϕ(x(j)),在新的特征空间里从训练样本中学习线性支持向量机。当映射函数是非线性函数时,学习到的含有核函数的支持向量机是非线性分类模型。
也就是说,在核函数 K ( x ( i ) , x ( j ) ) K(\mathbf{x}^{(i)},\mathbf{x}^{(j)}) K(x(i),x(j)) 给定的条件下,可以利用解线性分类问题的方法求解非线性分类问题的支持向量机。学习是隐式地在特征空间进行的,不需要显示地定义特征空间和映射函数。这样的技巧称为核技巧,它是巧妙地利用线性分类学习方法与核函数解决非线性问题的技术。在实际应用中,往往依赖领域知识直接选择核函数,核函数选择的有效性需要通过实验验证。
到底什么样的函数才可当做核函数呢?通常所说的核函数实际上就是正定核函数。那我们来了解一下什么是正定核函数。
定义:设 X ⊆ R 2 \mathcal{X} \subseteq \mathbb{R}^{2} X⊆R2, K ( x ( i ) , x ( j ) ) K(\mathbf{x}^{(i)}, \mathbf{x}^{(j)}) K(x(i),x(j)) 是定义在 X × X \mathcal{X} \times \mathcal{X} X×X 上的对称函数,如果对任意 x ( i ) ∈ X \mathbf{x}^{(i)} \in \mathcal{X} x(i)∈X, i = 1 , 2 , ⋯   , m i = 1,2, \cdots, m i=1,2,⋯,m, K ( x ( i ) , x ( j ) ) K\left( \mathbf{x}^{(i)}, \mathbf{x}^{(j)} \right) K(x(i),x(j)) 对应的 Gram 矩阵
(7) K = [ K ( x ( i ) , x ( j ) ) ] m × m K = \left[K\left( \mathbf{x}^{(i)}, \mathbf{x}^{(j)} \right)\right]_{m\times m} \tag{7} K=[K(x(i),x(j))]m×m(7)
是半正定矩阵,则称 K ( x ( i ) , x ( j ) ) K\left( \mathbf{x}^{(i)}, \mathbf{x}^{(j)} \right) K(x(i),x(j)) 是 正定核函数。
虽然我们已经知道了正定核函数的定义,但是对于一个具体函数 K ( x ( i ) , x ( j ) ) K\left( \mathbf{x}^{(i)}, \mathbf{x}^{(j)} \right) K(x(i),x(j)) 来说,检验它是否为正定核函数并不容易。所以在实际问题中往往应用已有的核函数。
以下为几种常用核函数:
名称 | 表达式 | 说明 |
---|---|---|
线性核(Linear Kernel) | K ( x ( i ) , x ( j ) ) = x ( i ) ⋅ x ( j ) K(\mathbf{x}^{(i)},\mathbf{x}^{(j)}) = \mathbf{x}^{(i)} \cdot \mathbf{x}^{(j)} K(x(i),x(j))=x(i)⋅x(j) | 实际上就是线性 SVM。 |
多项式核(Polynomial Kernel) | K ( x ( i ) , x ( j ) ) = ( γ x ( i ) ⋅ x ( j ) + r ) d K(\mathbf{x}^{(i)},\mathbf{x}^{(j)}) = \left( \gamma \mathbf{x}^{(i)} \cdot \mathbf{x}^{(j)} + r\right)^d K(x(i),x(j))=(γx(i)⋅x(j)+r)d | 斜率 γ \gamma γ,常数项 r r r,和多项式次数 d ≥ 1 d \geq 1 d≥1。 |
高斯核(Gaussian Kernel) | K ( x ( i ) , x ( j ) ) = exp ( − ∥ ∥ x ( i ) − x ( j ) ∥ ∥ 2 2 σ 2 ) K(\mathbf{x}^{(i)},\mathbf{x}^{(j)}) = \exp \left( - \frac{\|\|\mathbf{x}^{(i)} - \mathbf{x}^{(j)}\|\|^2}{2 \sigma ^{2}} \right) K(x(i),x(j))=exp(−2σ2∥∥x(i)−x(j)∥∥2) | 也称为径向基核函数,libsvm 库将它作为默认核函数。 σ > 0 \sigma > 0 σ>0 是高斯核的带宽。 |
拉普拉斯核 | K ( x ( i ) , x ( j ) ) = exp ( − ∥ ∥ x ( i ) − x ( j ) ∥ ∥ σ ) K(\mathbf{x}^{(i)},\mathbf{x}^{(j)}) = \exp \left( - \frac{\|\|\mathbf{x}^{(i)} - \mathbf{x}^{(j)}\|\|}{\sigma} \right) K(x(i),x(j))=exp(−σ∥∥x(i)−x(j)∥∥) | σ > 0 \sigma > 0 σ>0 |
Sigmoid 核(Sigmoid Kenel) | K ( x ( i ) , x ( j ) ) = tanh ( β x ( i ) ⋅ x ( j ) + θ ) K(\mathbf{x}^{(i)},\mathbf{x}^{(j)}) = \tanh (\beta \mathbf{x}^{(i)} \cdot \mathbf{x}^{(j)} + \theta) K(x(i),x(j))=tanh(βx(i)⋅x(j)+θ) | tanh \tanh tanh 为双曲正切函数, β > 0 \beta > 0 β>0, θ < 0 \theta < 0 θ<0。 |
此外,还可以通过函数组合得到核函数,例如:
若 K 1 K_1 K1 和 K 2 K_2 K2 为核函数,则对于任意正数 γ 1 \gamma_1 γ1 和 γ 2 \gamma_2 γ2,其线性组合 γ 1 K 1 + γ 2 K 2 \gamma_1 K_1 + \gamma_2 K_2 γ1K1+γ2K2 也是核函数。
若 K 1 K_1 K1 和 K 2 K_2 K2 为核函数,则核函数的直积 K 1 ⨂ K 2 ( x ( i ) , x ( j ) ) = K 1 ( x ( i ) , x ( j ) ) K 2 ( x ( i ) , x ( j ) ) K_1 \bigotimes K_2(\mathbf{x}^{(i)}, \mathbf{x}^{(j)}) = K_1(\mathbf{x}^{(i)}, \mathbf{x}^{(j)}) K_2(\mathbf{x}^{(i)}, \mathbf{x}^{(j)}) K1⨂K2(x(i),x(j))=K1(x(i),x(j))K2(x(i),x(j)) 也是核函数。
若 K 1 K_1 K1 为核函数,则对于任意函数 g ( x ) g(\mathbf{x}) g(x), K ( x ( i ) , x ( j ) ) = g ( x ( i ) ) K 1 ( x ( i ) , x ( j ) ) g ( x ( j ) ) K\left( \mathbf{x}^{(i)}, \mathbf{x}^{(j)} \right) = g\left(\mathbf{x}^{(i)}\right) K_1\left(\mathbf{x}^{(i)}, \mathbf{x}^{(j)}\right) g\left(\mathbf{x}^{(j)}\right) K(x(i),x(j))=g(x(i))K1(x(i),x(j))g(x(j)) 也是核函数。
求取非线性支持向量机的方法与线性支持向量机一样,不同的是:将线性支持向量机中的 內积 替换成 核函数。在实际问题中往往使用已有的核函数(例如,高斯核函数、多项式核函数等等)。
参考:
[1] 周志华《机器学习》
[2] 李航《统计学习方法》
[3] https://zhuanlan.zhihu.com/p/29872905
[4] https://www.cnblogs.com/pinard/p/6103615.html