1. 前言
前文:
支持向量机(SVM)详解(一)
支持向量机(SVM)详解(二)
前文详细推导了支持向量机算法原理。本文将介绍支持向量机常用核函数、支持向量机解决多分类问题方法,以及支持向量机解决实际问题的一些经验。
2. 支持向量机的核函数
支持向量机库(如LIBSVM)一般会支持如下五种核函数:
- 线性内核(Linear): K ( X i , X j ) = X i T X j K(X_i,X_j)=X_i^TX_j K(Xi,Xj)=XiTXj
显然,当 K ( X i , X j ) = X i T X j K(X_i,X_j)=X_i^TX_j K(Xi,Xj)=XiTXj,则低维到高维的映射 φ ( X ) = X \varphi(X)=X φ(X)=X。因此,如果使用线性核函数,则使用核函数求解支持向量机与不使用核函数获得的结果是完全一样的。
- 多项式核(Polynomial): K ( X i , X j ) = ( γ X i T X j + b ) d K(X_i,X_j)=(\gamma X_i^TX_j+b)^d K(Xi,Xj)=(γXiTXj+b)d
γ \gamma γ和 b b b都是人为设置的超参数。多项式核是复杂度可以调节的核函数,可以证明,指数 d d d越大,则低维到高维的映射 φ ( X ) \varphi(X) φ(X)的维度越高。实际运用中,可以调节 d d d的大小来控制 φ ( X ) \varphi(X) φ(X)的维度,从而控制核函数的复杂度。
- 高斯径向基函数核(Radial basis function): K ( X i , X j ) = e − γ ∣ ∣ X i − X j ∣ ∣ 2 K(X_i,X_j)=e^{-\gamma||X_i-X_j||^2} K(Xi,Xj)=e−γ∣∣Xi−Xj∣∣2
γ \gamma γ是人为设置的超参数。可以证明,RBF核对应的映射函数 φ ( X ) \varphi(X) φ(X)的维度是无限维。
- Sigmoid核(Tanh): K ( X i , X j ) = t a n h ( γ X i T X j + b ) K(X_i,X_j)=tanh(\gamma{X_i^T}X_j+b) K(Xi,Xj)=tanh(γXiTXj+b),其中: t a n h ( x ) = e x − e − x e x + e − x tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} tanh(x)=ex+e−xex−e−x
γ \gamma γ和 b b b都是人为设置的超参数。该核函数对应的 φ ( X ) \varphi(X) φ(X)维度也是无限的。
- 自定义核(Precomputed kernel):
K = [ K ( X 1 , X 2 ) … K ( X 1 , X n ) ⋮ ⋱ ⋮ K ( X n , X 1 ) ⋯ K ( X n , X n ) ] K= \begin{bmatrix} K(X_1,X_2) & \dots & K(X_1,X_n) \\ \vdots & \ddots & \vdots \\ K(X_n,X_1) & \cdots & K(X_n,X_n) \end{bmatrix} K=⎣⎢⎡K(X1,X2)⋮K(Xn,X1)…⋱⋯K(X1,Xn)⋮K(Xn,Xn)⎦⎥⎤
如果知道所有的 K ( X i , X j ) K(X_i,X_j) K(Xi,Xj)的值,则可以将这些值代入支持向量机优化问题求解问题中,解出所有 α \alpha α,从而完成对支持向量机的求解。
在实际应用中,如果数据特征维度较大,则首选线性核函数。如果线性核函数效果不理想,则考虑RBF核函数,其次再考虑使用其余核函数;
如果数据特征维度不是特别大,建议首选RBF核函数。RBF核函数是实际编程中公认的、最常用的核函数,如果在实际问题中不知道该用什么样的核函数,建议首先采用RBF核函数。
3. 支持向量机解决多分类问题
3.1 改造优化目标函数和限制条件
支持向量机解决多分类问题思路一是通过改造其优化目标函数和限制条件,使之能够处理多分类问题,具体参见Multi-Class Support Vector Machine。
3.2 1类 vs k-1类
构造K个支持向量机:类别i VS 类别1,2,3,…,i-1,i+1,…,k(i从1到K)。对于每个优化问题,左边单一类别的标签为+1,右边k-1个类别的标签为-1。解出这k个优化问题后,获得k个 α \alpha α和 b b b的组合: α i ( k ) , b ( k ) , i = 1 ∼ n , k = 1 ∼ K \alpha_i^{(k)},b^{(k)},~~i=1\sim n,k=1\sim K αi(k),b(k), i=1∼n,k=1∼K。对于一个测试样本 X t X_t Xt,将其类别判定为 k m a x = a r g m a x ∑ i = 1 n α i ( k ) y i K ( X i , X t ) + b ( k ) , k = 1 ∼ K k_{max}=argmax\sum_{i=1}^n\alpha_i^{(k)}y_iK(X_i,X_t)+b^{(k)},~~k=1\sim K kmax=argmax∑i=1nαi(k)yiK(Xi,Xt)+b(k), k=1∼K。即寻找与其它类间隔最大的一类,将之作为测试样本 X t X_t Xt的预测标签。
3.3 1类 vs 另一类
构造 k ( k − 1 ) 2 \frac{k(k-1)}{2} 2k(k−1)个支持向量机,对于某个测试样本 X t X_t Xt,将其输入 k ( k − 1 ) 2 \frac{k(k-1)}{2} 2k(k−1)个支持向量机中,分别获得相应的类别标签,然后采取投票的方式获得最后的结果。
当出现平票情况,将 s o r c e = ∑ i = 1 n α i y i K ( X i , X t ) + b sorce=\sum_{i=1}^n\alpha_iy_iK(X_i,X_t)+b sorce=∑i=1nαiyiK(Xi,Xt)+b的值作为进一步判断的依据。分别计算类别 i i i的k-1个支持向量机的分数和,最后识别结果为分数最高的类别。(总共构造了 k ( k − 1 ) 2 \frac{k(k-1)}{2} 2k(k−1)个支持向量机,与类别 i i i相关的支持向量机个数均为k-1个)
通过支持向量机(SVM)详解(一)和支持向量机(SVM)详解(二)可知,支持向量机天生是为二分类问题设计的,3.1所述方法在实际运用中一般不被采用;
3.2所述方法存在严重的训练样本不平衡问题,即结果会偏向训练样本较多的一类;
实际运用中一般采用3.3所述方法。
4. 支持向量机的优缺点
4.1 优点
- 有严格的数学理论支持,可解释性强,不依靠统计方法,从而简化了通常的分类和回归问题;
- 能找出对任务至关重要的关键样本(支持向量);
- 采用映射到高维的解决方法之后,可以处理非线性分类/回归任务;
- 最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。
4.2 缺点
- 训练时间长。当采用 SMO 算法时,由于每次都需要挑选一对参数,因此时间复杂度为 O ( n 2 ) O(n^2) O(n2),其中 n 为训练样本的数量;
- 当采用核技巧时,如果需要存储核矩阵,则空间复杂度为 O ( n 2 ) O(n^2) O(n2);
- 模型预测时,预测时间与支持向量的个数成正比。当支持向量的数量较大时,预测计算复杂度较高。因此支持向量机只适合小批量样本的任务,无法适应百万甚至上亿样本的任务。
5. 支持向量机训练经验
有关支持向量机使用详细经验可参见LIBSVM – A Library for Support Vector Machines和A Practical Guide to Support Vector Classification。
在实际运用中,支持向量最多占训练样本的20%-30%,如果支持向量特别多,基本上说明模型没有训练好。极端情况下,会出现所有训练样本均为支持向量的情况。出现上述情况一般说明存在如下3个问题:
- 数据集没有什么规律;
- 支持向量机没有办法找到数据集的规律;
- 参数选择的不好。
6. 总结
至此,支持向量机详解全部完成。重点在于详解一和详解二两篇文章,这篇文章相当于做一些补充,同时也分享了支持向量机使用过程中常见的问题,以及出现相应问题的原因。有关支持向量机的训练经验,更多地还是建议去查看第5部分中提到的两个链接,其中包含了超参数的建议范围,为什么会出现过拟合现象等等。
7. 参考资料链接
- https://www.csie.ntu.edu.tw/~cjlin/libsvm/
- https://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf
- https://www.bilibili.com/video/BV1dJ411B7gh?from=search&seid=10165428540747855892
- https://zhuanlan.zhihu.com/p/77750026