非线性问题

在之前学了线性支持向量机,通过训练集学习到分离超平面非线性支持向量机算法_核函数,但是有时候分类问题不是线性的,也就是我们不能直接得到分离超平面。看下面两个图:

非线性支持向量机算法_非线性支持向量机算法_02

左边的图,只能使用一个椭圆(曲面)来对正例(黑点表示的实例)和负例(x表示的实例)来进行划分,而无法使用超平面非线性支持向量机算法_核函数来进行划分。对于这样的非线性问题,显然线性支持向量机无法求解,但是可以将左边图中的实例,按照某种映射关系映射到右图中,此时就可以使用线性支持向量机了。也就是说使用线性分类方法去解决非线性问题可以使用下面两个步骤:

  1. 使用一个函数,将原空间中的数据变映射到新空间(上图中左图中实例映射到右图);
  2. 在新空间里用线性分类学习方法学习到分类模型(这里就是使用线性支持向量机学习到超平面非线性支持向量机算法_机器学习_04)。

核技法用到支持向量机中的思想:使用一个非线性变换将输入空间映射到特征空间,从而使得输入空间的超曲面对应于特征空间的超平面。

说到这就正式给出核函数的定义:

核函数:
非线性支持向量机算法_核函数_05为输入空间,非线性支持向量机算法_机器学习_06为特征空间,如果存在一个 非线性支持向量机算法_核函数_05非线性支持向量机算法_机器学习_06的映射

非线性支持向量机算法_SVM_09

使得对于所有的输入 非线性支持向量机算法_SVM_10满足条件

非线性支持向量机算法_机器学习_11

则称非线性支持向量机算法_核函数_12为核函数,非线性支持向量机算法_机器学习_13为映射空间,非线性支持向量机算法_支持向量机_14表示两者的内积。

核技法在SVM中的使用

现在将核技法使用到非线性分类问题中,非线性支持向量机模型(凸二次规划对偶模型)如下:

非线性支持向量机算法_支持向量机_15

非线性支持向量机算法_核函数_16

非线性支持向量机算法_核函数_17

求得的分离超平面如下:

非线性支持向量机算法_机器学习_18

其中非线性支持向量机算法_机器学习_19表示两个向量的内积。
不管是对偶模型还是求得的结果都是输入向量的内积,将其替换成核函数得到目标函数与分离超平面,得到:

非线性支持向量机算法_核函数_20

非线性支持向量机算法_非线性支持向量机算法_21

其中非线性支持向量机算法_非线性支持向量机算法_22也就是说,将输入空间中的向量非线性支持向量机算法_核函数_23映射成特征空间的非线性支持向量机算法_SVM_24(将输入空间向量内积转换成特征空间向量内积)转换就得到上面的右图中的点了,此时就可以使用线性支持向量机得到分离超平面,而关于核函数的选取得看具体的情况,后面会介绍常用的核函数。

正定核

上面介绍了核函数非线性支持向量机算法_核函数_12,而正定核也就是核函数。那么非线性支持向量机算法_核函数_12满足什么条件才能作为正定核呢,下面不加证明的给出正定核的充要条件。

非线性支持向量机算法_核函数_27是对称函数(非线性支持向量机算法_SVM_28),那么非线性支持向量机算法_核函数_12 是正定核的充要条件是,对于任意的 非线性支持向量机算法_机器学习_30,非线性支持向量机算法_核函数_12对应的矩阵:

非线性支持向量机算法_机器学习_32

是半正定矩阵。

常用核函数

1、多项式核函数

非线性支持向量机算法_核函数_33

对应的支持向量机为p次多项式分类器,此时,分类超平面为:
非线性支持向量机算法_SVM_34

2、高斯核函数

非线性支持向量机算法_机器学习_35

对应的支持向量机为高斯径向基函数分类器,此时,分类超平面为:
非线性支持向量机算法_核函数_36

序列最小最优化算法

到这里,线性可分支持向量机,线性支持向量机,非线性支持向量机已经学完了。关于如何求解各自的对偶问题还没有给出,每次都是假设非线性支持向量机算法_机器学习_37

介绍SMO算法之前先介绍坐标上升法:

假设要求解无约束条件的函数参数如下:

非线性支持向量机算法_机器学习_38

坐标上升法的思路是,选取某一个非线性支持向量机算法_机器学习_39,对其他的非线性支持向量机算法_机器学习_40进行固定,修改非线性支持向量机算法_机器学习_39的值,使函数非线性支持向量机算法_非线性支持向量机算法_42的值达到最大,此时选取下一个非线性支持向量机算法_机器学习_40的值,而对其他的所有非线性支持向量机算法_机器学习_40值进行固定,如此循环下去直到收敛,写成伪代码如下:

非线性支持向量机算法_SVM_45
非线性支持向量机算法_非线性支持向量机算法_46
非线性支持向量机算法_SVM_47
非线性支持向量机算法_核函数_48
非线性支持向量机算法_机器学习_49

SMO算法和坐标上升法是很类似的,将其用在解SVM中对偶模型中是这样做的,由于存在约束条件非线性支持向量机算法_核函数_50,所以每次选两个变量非线性支持向量机算法_非线性支持向量机算法_51,使得两个变量变化幅度一样(一个增加多少另一个就减少多少)从而使得满足约束条件。下面给出较具体的介绍:

方便起见,假设选的两个参数是非线性支持向量机算法_非线性支持向量机算法_52,而其他变量 非线性支持向量机算法_核函数_53进行固定,也就是说只要不含非线性支持向量机算法_非线性支持向量机算法_52的项都看做常数了。

对于约束条件非线性支持向量机算法_核函数_50,转换一下得到非线性支持向量机算法_非线性支持向量机算法_56,将非线性支持向量机算法_非线性支持向量机算法_57看做常数非线性支持向量机算法_支持向量机_58,那么就有非线性支持向量机算法_机器学习_59,画在坐标系中得到下面的图

非线性支持向量机算法_机器学习_60

非线性支持向量机算法_机器学习_59
非线性支持向量机算法_支持向量机_62

非线性支持向量机算法_核函数_63来表示非线性支持向量机算法_SVM_64,这样的话就只有一个变量非线性支持向量机算法_核函数_63了。
对偶问题的目标函数为:
非线性支持向量机算法_核函数_20

非线性支持向量机算法_SVM_67

非线性支持向量机算法_支持向量机_68固定,而非线性支持向量机算法_SVM_64非线性支持向量机算法_核函数_63来表示,带入到非线性支持向量机算法_支持向量机_71,那么得到的肯定就是一个关于非线性支持向量机算法_核函数_63的一元二次函数非线性支持向量机算法_机器学习_73(具体的可以自行计算),那么现在要做的就是求出非线性支持向量机算法_支持向量机_74最大值所对应的非线性支持向量机算法_核函数_63了,如果不考虑约束条件那么结果就是非线性支持向量机算法_支持向量机_74对应的抛物线的顶点了,但是,这个函数是受到了约束条件约束的,也就是上面两个图,假如就是左图,那么需要将这条抛物线和上面的左图画在一起,如下:

非线性支持向量机算法_机器学习_77

显然,1和3的情况是不满足约束条件的,因为最优值的非线性支持向量机算法_核函数_63的值一个是小于了非线性支持向量机算法_核函数_63的最小值,另一个是大于了非线性支持向量机算法_核函数_63的最大值,需要取在非线性支持向量机算法_核函数_63范围内非线性支持向量机算法_支持向量机_74是最优值。具体的就直接摘抄《统计学习方法》了,具体的细节会作解释。

非线性支持向量机算法_非线性支持向量机算法_83


剪辑指的是考虑约束条件(非线性支持向量机算法_核函数_63取值范围)的情况。

为了理解方便就按照上面的两个图来解释:
对于非线性支持向量机算法_SVM_85时候的边界问题:
(1)、当直线位于右下角的时候,下界非线性支持向量机算法_非线性支持向量机算法_86非线性支持向量机算法_支持向量机_87是直线与下方的横纵的交点,而非线性支持向量机算法_核函数_88;而上界非线性支持向量机算法_支持向量机_89
(2)、当直线位于左上角的时候,下界非线性支持向量机算法_非线性支持向量机算法_90,而上界非线性支持向量机算法_核函数_91,注意非线性支持向量机算法_非线性支持向量机算法_92,往左下方延长该执行,得到与下方横纵交点的值。

关于非线性支持向量机算法_机器学习_93也分为左下方和右上方来讨论,具体的就详述了。

最后计算总结如下:

非线性支持向量机算法_支持向量机_94