查看原文:http://www.wyblog.cn/2016/11/16/%e6%9c%80%e5%b0%8f%e4%ba%8c%e4%b9%98%e6%94%af%e6%8c%81%e5%90%91%e9%87%8f%e6%9c%ba-lssvm/
通过前文分析,可以看到,支持向量机最适合于小样本的学习环境。它的关键在于要找出所有的支持向量,从这些支持向量,就能得出最优分隔超平面了。这一做法让人联想到普通信号的处理。对于一个信号,其结构都是真实信号加上各种噪声。我们在做信号处理时,目的就是为了削弱噪声的影响,从而得出真实的信号值。这样对应起看,支持向量机机与信号滤波似乎有异曲同工之妙。在样本里,除了支持向量的那些点就像是信号里的噪声,支持向量恰对应于信号中的真实成分,支持向量机里寻找最优超平面恰好就是信号处理时要极大化削弱噪声的影响。从搜索的文献来看,已经有很多前辈做了相关工作。本文所讲的最小二乘支持向量机便是一种被最为广泛采用的方法,其对非线性信号的处理有较好的准确度及精度提升。与人工神经网络比,它能克服训练时间长、训练结果存在随机性以及过学习的不足。并且,相关文献提出了一种简化运算的方式,使得效率大大提高。本文主要参考相关文献,对最小二乘支持向量机的基本算法进行总结,分析了模型中各参数对模型精度、复杂度、计算量的影响,以及总结一种能提高模型运算速度及性能的改进算法。
训练样本集为$latex (x_{i},y_{i}) $,其中$latex X \in R^{d} $ ,$latex Y \in R $。SVM模型思想为如果训练样本在自身空间里是线性不可分的,那么就将输入空间$latex X \in R^{d} $通过一个非线性映射φ(·)映射到一个特征空间$latex \phi (X)=\phi (X_{1},X_{2},\cdot \cdot \cdot,X_{n}) $,然后在这个高维空间里去构造最优决策函数$latex y=\omega \cdot \phi (x)+b $。
在模型里,有三个参数需要我们去处理。其一是ω与b,这个可以通过极小化风险函数来求取。其二是非线性映射$latex \phi (X) $,这一映射存在无数个,那么我们应该用什么方式去选择哪一个呢,这里采用的简化方法就是用核方法,下文再谈。支持向量机中心思想是以结构风险最小化为准则进行构建模型,所以这里风险函数选择为$latex R=c \cdot R_{emp} + \frac {1}{2} || \omega ||^{2} $。公式第一项Remp代表经验风险,这里LS-SVM模型里,用的是二次损失函数,即$latex \sum_{i}\zeta_{i}^{2} $,其代表模型对训练样本预测误差的平方和。经验风险最小化并不能全部决定模型的整体风险最小化,人工神经网络便在这里入了坑。所以,我们的风险函数里加入了第二项,及$latex \frac {1}{2} || \omega ||^{2} $,这里代表的是结构风险最小化,ω的模则在一定程度上代表了模型的复杂度。综合以上,我们的优化问题变为了:$latex min \quad R=c \cdot \sum_{i=1}^{n} \zeta_{i}^{2} + \frac {1}{2} || \omega ||^{2} $$latex s.t. \quad y_{i}= \omega ^{T} \cdot \phi (x_{i})+b, \quad \quad i=1,2,\cdot \cdot \cdot ,n$构造拉格朗日等式:$latex L(\omega,b,\zeta,\alpha)= c \cdot \sum_{i=1}^{n} \zeta_{i}^{2} + \frac {1}{2} || \omega ||^{2} - \sum_{i=1}^{n} (\alpha_{i} (\omega ^{T} \cdot \phi (x_{i})+b-y_{i}))$其中的αi是拉格朗日乘子。令L分别对参数分别求偏导数,另其为0:$latex \frac {\partial L} {\partial \omega} =0 ,\frac {\partial L} {\partial b} =0 ,\frac {\partial L} {\partial \zeta_{i} } =0 ,\frac {\partial L} {\partial \alpha_{i}} =0 $可得:$latex \omega=\sum_{i=1}^{n} \alpha_{i} \cdot \phi (x_{i})$$latex \sum_{i=1}^{n} \alpha_{i} = 0$$latex 2c \zeta_{i} = \alpha_{i}$$latex y_{i}=\omega^{T} \cdot \phi (x_{i}) +b+ \zeta_{i}$整理后,可得最终输出式:$latex y_{i}=\sum_{i=1}^{n} (\alpha_{j} \cdot <\phi (x_{i}), \phi (x_{j}) >)+b+ \frac {1}{2c} \alpha_{i}$注意到,在以上的输出式里存在向量内积 $latex <\phi (x_{i}), \phi (x_{j}) >$,而且此内积是在输入空间映射到特征空间之后做的内积,如果我们取死扣映射函数,那是解决不了问题的。所以,这里采用了经典的核方法。核方法在于用一个核函数来代替特征空间里的内积,这样我们就不用去思考如何映射输入空间到特征空间了。核函数定义为$latex K(x_{i},x_{j})=<\phi (x_{i}),\phi (x_{j})> $,则:$latex y_{i}=\sum_{i=1}^{n} (\alpha_{j} \cdot K(x_{i},x_{j}))+b+ \frac {1}{2c} \alpha_{i}$。根据训练样本集$latex (x_{i},x_{j}) $,就能解以上方程,得出方程里的参数αi与b,得出决策函数:$latex f(x)=\sum_{i=1}^{n} \alpha_{i} \cdot K(x,x_{i})+b $。根据前系列博文可知,αi不为0所谓对应的样本,即为支持向量。以上是我们没考虑核函数形式的讨论情况。在实际情况里,常见的核函数形式有1.线性核函数$latex K(x_{i},x_{j})=x_{i} \cdot x_{j}$,2.多项式核函数$latex K(x_{i},x_{j})=(x_{i} \cdot x_{j} + 1)^{d}$3.径向基核函数(RBF)$latex K(x_{i},x_{j})=exp \left ( - \frac {||x_{i}-x_{j}||^{2}}{2 \cdot \sigma ^{2}} \right ) $对于LS-SVM,我们选择的核函数为RBF核。可以看到,核函数里含有一个自定义参数σ。
由策略里的分析,在优化函数的等式里有两个参数是我们需要自己取定的,经验风险系数c,以及核函数里的参数σ。确定了这两个参数,我们就可以根据样本集求出α,b,最终得出f(X)了。所以,这里的算法主要讨论c与σ的问题。c与σ直接决定了模型的性能。所以,我们可以使用网格法来找出c与σ的参数,并在模型上用交叉验证的方式试验参数的预测误差,最后找出是误差最小的那对c与σ,即为最优解。这里,网格法就涉及到了网格的划分,划分的稀疏,那么值越准确,但是计算量越大。具体做法如下:1.确定参数的初始取值范围。可以取$latex c \in [0.1,10],\sigma \in [0.1,10] $,至于步长,就需要视具体情况而定了,定的大,计算量就相对较小。2.输入每个节点参数(c,σ)到LS-SVM模型中进行训练,并用试验数据进行交叉验证,进行模型性能评估。评估准则则可以选择模型均方误差等。3.最后选择出最小误差的(c,σ)作为模型最终参数,得出f(x)。
涉及到参数c与σ这里直接根据相关文献给出结论进行总结。首先我们固定参数c,使它为一个定常值。当核参数σ增大时,分析RBF核表达式可知,$latex K(x_{i},x_{j})$ 的值不接近0的会越来越多,那么在计算时,计算复杂度就会陡然上升,计算量大了,那么模型的训练时间就会变长。同时会影响拉格朗日乘子α的取值,αi不为0的变多,支持向量就多了,也意味着模型变得更复杂了。随着σ增大,模型对训练样本的预测误差呈增大趋势,逼近能力变差,对预测样本误差呈先减小后增大的趋势,所以σ在某个值上有最佳的泛化能力。接着,我们固定核参数σ,使它为一个定常值。c的改变也会影响拉格朗日乘子α,c越小,α接近0的就越多,也就是模型越简单。这一点从我们的风险函数上体现更直观。从风险函数上来看,c是平衡经验风险与结构风险关系的一个值,当c减小,也就是削弱了经验风险,加强了结构风险,欲使总的风险小,那么我们必然使结构风险小,也就意味着要使模型更简单,ω的模越小越好。同时,随着c的增大,模型对训练样本的预测误差会下降,但下降的幅度有限。总的来说,模型精度与复杂度对参数(c,α)的要求是相互矛盾的,实际运用时要根据需要用网格法去选择最佳的模型参数。
从以上分析可以看出,LS-SVM计算量还是比较大的,其计算量主要决定于αi不为0的个数,深层次原因就是取决于我们选定的支持向量的个数。现在我们考虑,αi=0与αi=0.1或者αi=0.01又相差得了多少呢,是否可以使得当αi小于一个阈值时,就使其等于0,从而简化计算。在相关文献里,进行了试验操作,得到的结论是可以这样做,模型精度虽然有所下降,但仍在可控范围内。与原本的算法相比,简化算法极大程度上减少了支持向量的个数,在空间复杂度以及时间复杂度上都有很大的优化。简化算法只是取消了边界样本的作用,也就是说我们要尽量不重复地选出能起作用的支持向量出来。这里虽然是简化,但任然保留了决定对象主体特征的主体样本,因此简化模型仍能够使模型预测精度满足要求,同时降低运算量,缩短计算时间。