机器学习13——支持向量机下
支持向量机下
非线性支持向量机(Non-linear SVMs)详解
核心思想
当数据在原始空间线性不可分时,通过**核技巧(Kernel Trick)**将数据映射到高维特征空间,使其在该空间中线性可分。
比如以下的样本在一维空间不可分,但是映射到二维空间变得线性可分:
关键步骤
-
特征映射(Feature Mapping)
定义映射函数 ϕ:Rd→RD\phi: \mathbb{R}^d \to \mathbb{R}^Dϕ:Rd→RD(D≫dD \gg dD≫d),将原始特征 x\mathbf{x}x 映射到高维空间 ϕ(x)\phi(\mathbf{x})ϕ(x)。 -
映射后,分类器函数变成了:
g(x)=wTϕ(x)+b=∑xi∈SVλiyiϕ(xi)ϕ(x)+b g(x)=w^T \phi(x)+b=\sum_{x_i \in S V} \lambda_i y_i \phi\left(x_i\right) \phi(x)+b g(x)=wTϕ(x)+b=xi∈SV∑λiyiϕ(xi)ϕ(x)+b -
但是我们其实并不需要找到这个映射函数,然后将样本映射到高维空间后做内积!!我们可以用一个Kernel Trick:
-
核函数(Kernel Function)
直接计算高维空间的内积,避免显式映射。也就是我们可以在样本空间(原空间维度)下计算高维下样本的内积结果:
K(xi,xj)=ϕ(xi)Tϕ(xj) K(\mathbf{x}_i, \mathbf{x}_j) = \phi(\mathbf{x}_i)^T \phi(\mathbf{x}_j) K(xi,xj)=ϕ(xi)Tϕ(xj) -
示例:
-
一个二维空间样本:x=[x1x2];\mathrm{x}=\left[\begin{array}{ll}x_1 & x_2\end{array}\right] ;x=[x1x2];
-
让核函数K(xi,xj)=(1+xiTxj)2K\left(\mathrm{x}_{\mathrm{i}}, \mathrm{x}_{\mathrm{j}}\right)=\left(1+\mathrm{x}_{\mathrm{i}}^{\mathrm{T}} \mathrm{x}_{\mathrm{j}}\right)^2K(xi,xj)=(1+xiTxj)2,即K(xi,xj)=φ(xi)Tφ(xj)K\left(\mathrm{x}_{\mathrm{i}}, \mathrm{x}_{\mathrm{j}}\right)=\varphi\left(\mathrm{x}_{\mathrm{i}}\right)^{\mathrm{T}} \varphi\left(\mathrm{x}_{\mathrm{j}}\right)K(xi,xj)=φ(xi)Tφ(xj)
-
我们有:
K(Xi,Xj)=(1+Xi⊤Xj)2=1+Xi12Xj12+2Xi1Xj1Xi2Xj2+Xi22Xj22+2Xi1Xj1+2Xi2Xj2=[1Xi122Xi1Xi2Xi222Xi12Xi2][1Xj122Xj1Xj2Xj222Xj12Xj2]⊤=φ(Xi)⊤φ(Xj),where φ(X)=[1X122X1X2X222X12X2]⊤ \begin{aligned} K\left(X_i, X_j\right) &= \left(1 + X_i^{\top} X_j \right)^2 \\ &= 1 + X_{i1}^2 X_{j1}^2 + 2 X_{i1} X_{j1} X_{i2} X_{j2} + X_{i2}^2 X_{j2}^2 + 2 X_{i1} X_{j1} + 2 X_{i2} X_{j2} \\ &= \left[ \begin{array}{llll} 1 & X_{i1}^2 & \sqrt{2} X_{i1} X_{i2} & X_{i2}^2 & \sqrt{2} X_{i1} & \sqrt{2} X_{i2} \end{array} \right] \left[ \begin{array}{llll} 1 & X_{j1}^2 & \sqrt{2} X_{j1} X_{j2} & X_{j2}^2 & \sqrt{2} X_{j1} & \sqrt{2} X_{j2} \end{array} \right]^{\top} \\ &= \varphi\left(X_i\right)^{\top} \varphi\left(X_j\right), \quad \text{where } \varphi(X) = \left[ \begin{array}{llllll} 1 & X_1^2 & \sqrt{2} X_1 X_2 & X_2^2 & \sqrt{2} X_1 & \sqrt{2} X_2 \end{array} \right]^{\top} \end{aligned} K(Xi,Xj)=(1+Xi⊤Xj)2=1+Xi12Xj12+2Xi1Xj1Xi2Xj2+Xi22Xj22+2Xi1Xj1+2Xi2Xj2=[1Xi122Xi1Xi2Xi222Xi12Xi2][1Xj122Xj1Xj2Xj222Xj12Xj2]⊤=φ(Xi)⊤φ(Xj),where φ(X)=[1X122X1X2X222X12X2]⊤
-
-
常用核函数:
- 线性核:K(xi,xj)=xiTxjK(\mathbf{x}_i, \mathbf{x}_j) = \mathbf{x}_i^T \mathbf{x}_jK(xi,xj)=xiTxj
- 多项式核:K(xi,xj)=(1+xiTxj)pK(\mathbf{x}_i, \mathbf{x}_j) = (1 + \mathbf{x}_i^T \mathbf{x}_j)^pK(xi,xj)=(1+xiTxj)p
- 高斯核(RBF):K(xi,xj)=exp(−∥xi−xj∥22σ2)K(\mathbf{x}_i, \mathbf{x}_j) = \exp\left(-\frac{\|\mathbf{x}_i - \mathbf{x}_j\|^2}{2\sigma^2}\right)K(xi,xj)=exp(−2σ2∥xi−xj∥2)
- Sigmoid核:K(xi,xj)=tanh(β0xiTxj+β1)K(\mathbf{x}_i, \mathbf{x}_j) = \tanh(\beta_0 \mathbf{x}_i^T \mathbf{x}_j + \beta_1)K(xi,xj)=tanh(β0xiTxj+β1)
-
-
对偶问题优化
使用核函数替换内积,对偶问题变为:
maxλ∑i=1nλi−12∑i,j=1nλiλjyiyjK(xi,xj)s.t.0≤λi≤C,∑i=1nλiyi=0 \begin{aligned} \max_{\lambda} \quad & \sum_{i=1}^n \lambda_i - \frac{1}{2} \sum_{i,j=1}^n \lambda_i \lambda_j y_i y_j K(\mathbf{x}_i, \mathbf{x}_j) \\ \text{s.t.} \quad & 0 \leq \lambda_i \leq C, \quad \sum_{i=1}^n \lambda_i y_i = 0 \end{aligned} λmaxs.t.i=1∑nλi−21i,j=1∑nλiλjyiyjK(xi,xj)0≤λi≤C,i=1∑nλiyi=0
求解后得到判别函数:
g(x)=∑xi∈SVλiyiK(x,xi)+b g(\mathbf{x}) = \sum_{\mathbf{x}_i \in SV} \lambda_i y_i K(\mathbf{x}, \mathbf{x}_i) + b g(x)=xi∈SV∑λiyiK(x,xi)+b
其中偏移项 bbb 通过支持向量计算:
b=yk−∑xi∈SVλiyiK(xi,xk),0<λk<C b = y_k - \sum_{\mathbf{x}_i \in SV} \lambda_i y_i K(\mathbf{x}_i, \mathbf{x}_k), \quad 0 < \lambda_k < C b=yk−xi∈SV∑λiyiK(xi,xk),0<λk<C -
算法流程:
- 选择核函数
- 选择一个C的值
- 求解二次规划问题,得到 λi\lambda_iλi 和 bbb。
- 从支持向量构造分类函数
Other issues(使用 SVM 时需要注意的问题)
- Choice of kernel(核函数的选择)
- 在 SVM 中,核函数(kernel function)是关键,它定义了如何将数据从输入空间映射到高维特征空间。
- 常见的默认核函数是:
- 高斯核(Gaussian kernel / RBF kernel)
- 多项式核(Polynomial kernel)
- 这些核函数在很多通用任务上效果不错,但:
- 如果效果不佳,就需要更复杂的核函数(例如:字符串核、图核、语义核等),这时候可以结合具体任务设计。
- Domain experts can help formulate appropriate similarity measures
- 专业领域的知识可以帮助设计适合该任务的相似性度量方式,也就是定制核函数;
- 例如在生物信息学、图像识别等任务中,专家可以帮助构建更合适的核函数结构。
- Choice of kernel parameters(核函数参数的选择)
-
以高斯核为例,其形式是:
K(xi,xj)=exp(−∥xi−xj∥22σ2) K(x_i, x_j) = \exp\left(-\frac{\|x_i - x_j\|^2}{2\sigma^2}\right) K(xi,xj)=exp(−2σ2∥xi−xj∥2)
其中:- σ\sigmaσ 控制核的“宽度”,即数据点之间多远才被认为是“相似”的。
- 有经验规则认为:σ\sigmaσ 可设为“类别不同的最近样本点之间的距离”。
-
在缺乏理论依据时,常用:
- 验证集(validation set)
- 交叉验证(cross-validation)
来选择最优参数。
- Optimization criterion - Hard margin vs. Soft margin(优化标准)
- Hard margin SVM:
- 要求所有样本完全分开(间隔大,零误差),适用于数据线性可分的情况;
- Soft margin SVM:
- 允许一定的分类错误,引入松弛变量,更适用于现实世界中不可分的数据;
- 实际应用中常常需要:
- 通过大量试验调整不同参数来选择最优设置,比如 C 值(正则化参数)、核函数和其参数等。
Comparison with Neural Networks(与神经网络的比较)
特性 | 神经网络(Neural Networks) | 支持向量机(SVM) |
---|---|---|
特征映射 | 隐藏层将数据映射到低维空间(逐层抽象) | 核函数将数据映射到高维空间(甚至无限维) |
搜索空间 | 存在多个局部最小值(非凸优化) | 唯一全局最小值(凸优化问题) |
训练效率 | 训练成本高(梯度下降迭代,需调网络结构) | 训练效率高(凸优化,理论保证) |
分类效率 | 分类效率高(一次前向传播) | 分类效率也高(通过支持向量计算) |
模型参数 | 需要选择隐藏单元数和层数(模型复杂) | 只需选择核函数和 C(简洁) |
泛化性能 | 在典型任务中表现良好 | 同样在多数任务中表现优越,且对噪声更鲁棒 |