首页 > 编程知识 正文

支持向量机实例讲解,支持向量机回归原理

时间:2023-05-03 13:14:59 阅读:16359 作者:971

http://www.Sina.com/http://www.Sina.com /

如上所述,SVM算法非常强大。 不仅支持线性和非线性分类,还支持线性和非线性回归。 其主要思想是逆转目标。 在分类问题中,拟合两个类别中最大可能的街道(间隔),同时限制间隔侵害(margin violations ); SVM回归尝试限制违反间隔(margin violation ) (即远离街道)的实例,同时尽可能多地将数据实例拟合到街道(间隔)。 街道的宽度由超级参数控制。 下图显示了用一些随机线性数据训练两个线性SVM回归模型的结果。 一方为大间隔=1.5,另一方为小间隔=0.5 )。

如果随后添加的训练数据包含在间隔中,则该模型也称为-不敏感,因为它不会影响模型的预测。

我们可以使用sk-learn的线性Svr类训练SVM回归。 下面的代码对应于上图左边的模型。 (训练数据必须先进行缩放和中心化操作,中心化也称为零平均化,表示从变量中减去该平均值。 实际上,在平移过程中,平移后所有数据的中心都是(0,0 ) ) :

froms klearn.svmimportlinearsvrsvm _ reg=linear SVR (epsilon=1.5 ) svm_reg.fit(X ) x,y ) () ) ) )

处理非线性回归任务时,也可以使用内核化的SVM模型。 例如,下图显示了使用二次多项式内核在随机二次训练集中进行SVM回归的情况。

左图中有一个小正则。 超级参数c的值很大。 右图的正则很大。 是小c的值。

下面代码上图中左图对应的模型使用了sk-learn SVR类(支持内核方法)。 SVR类相当于分类问题的SVC类,LinearSVR类相当于分类问题的LinearSVC类。 LinearSVR类根据训练集的大小线性扩展(类似于LinearSVC类)。 另一方面,当训练集急剧增加时,SVR类的速度会大幅降低(与SVC类一致)。

froms klearn.svmimportsvrsvm _ poly _ reg=SVR (kernel=' poly ',degree=2,C=100,epsilon=0.1 ) SVM _ poly _ SVR

SVMs也可用于异常点(值)检测。 具体请参考sk-learn的文档。

SVM

本章说明SVM是如何预测的,算法是如何工作的。 首先从线性SVM分类器开始。

首先,将所有模型参数放入偏置项参数0和包含输入特征权重1到n的向量中,在所有数据实例中添加偏置项x0=1。 在此,将偏置项称为b,特征权重向量称为w。

回归

线性SVM分类器模型在执行预测时,为输入的实例x计算决策函数wTx b=w1x1 wnxn b。 如果结果为正,则预测的类属于正类(1),否则属于相反类(0),如下式所示:

看看SVM在以前的iris数据集上训练后的决策函数图。

这是二维平面,因为数据集具有两个特征: petal width和petal length。 决策边界由使决策函数为0的点构成。 也就是上图中实线所示的两个平面的交线。

虚线表示将决策函数设为1或-1的点。 这两条虚线平行,离决定边界的距离相等,构成了间隔。 训练线性SVM分类器是找出w-b对的值,尽可能扩大这个间隔,同时避免或限制间隔的侵犯。 避免间隔侵犯的结果为硬间隔(hard margin ),限制间隔侵犯的结果为软间隔。

原理解释

在上图的示例中,您可以看到此决策函数的图像是平面的,并且具有坡度。 该梯度与权重向量w的范数(norm ) ( 决策方法与预测)相等。 如果将此梯度除以2,则决策函数为1的点将远离决策边界两倍。 也就是说,坡度除以2会使间隔加倍。 如下图所示。

所以我们希望将 训练目标的值最小化,以获得更大的间隔。 但是,如果还想避免间隔入侵(硬间隔),则所有训练数据的“正”训练实例的计算结果必须大于1,“负”训练实例的计算结果必须小于-1 为负实例(即y(I )=0)定义t ) I )=1,为正实例(y ) I )=1),http://www.Sina.com/t3358ww )

p>所以我们接下来可以将硬间隔SVM分类器目标表示为一个带约束的优化问题,如下公式:

 

 

这里可以看到,我们优化的不是∥ w ∥,而是½wTw,它等同于½∥ w ∥2。因为½∥ w ∥2的导数非常简单(也就是w),而∥ w ∥ 在w=0时不可微。优化算法在可微函数上工作效果更好。

为了达到软间隔(soft margin)目标,我们需要为每个实例i引入一个松弛变量ζ(i) ≥ 0,这个变量衡量的是第ith个实例被允许入侵间隔的程度。我们现在有两个冲突的目标:让松弛变量尽可能的小,以减少间隔入侵;同时还要让 ½∥ w ∥2 尽可能的小,以增加间隔。所以这就是为什么算法中引入超参数C:这个参数可以让我们定义这两个目标之间的权衡(tradeoff)。对应的带约束优化问题为:

 

 

二次规划

硬间隔与软间隔问题都是带线性约束的凸二次优化问题,这种就是常说的二次规划(Quadratic Programming,QP)问题。有很多现成的解决办法用于解决QP问题,在这不会深入讨论。这种常规问题的公式如下所示:

 

 

需要注意的是表达式Apb 定义了nc的约束:pa(i) ≤ b(i) for i = 1, 2, ⋯, nc, 这里a(i)代表的是包含了A的第ith行的向量,b(i)代表的是b的ith第个元素。

如果我们按下面的参数设置QP参数,则可以得到硬间隔线性SVM分类器的目标:

 

一个训练硬间隔线性SVM分类器的方法是使用已有的OP问题解决方法,传入上述参数即可。求得的结果向量p会包含偏执项b=p0,以及特征权重wi = pi for i = 1, 2, ⋯, n。类似的,也可以使用QP问题解决方案解决软间隔问题。

不过在使用核方法时,我们会使用另一个不同的带约束的优化问题。

 

在线SVMonline SVM

在这章结束之前,我们快速地看一下在线SVM分类器(在线学习是指递增的训练,一般在一个新实例到达时就训练一次)。

对于线性SVM分类器,一种方法是使用梯度下降(例如使用SGDClassifier)最小化以下损失函数:

 

这个损失函数是由原始问题推导得出,但是它的收敛速度相比基于QP方法的收敛会慢特别多。在这个损失函数中,第一个累加会推进模型去找一个较小的权重向量w,继而产生一个更大的间隔。第二个累加会计算所有的间隔入侵(margin violations)。一个实例如果是远离街道、且在它所属正确的那一侧,则它的间隔入侵为0;否则它的间隔入侵则为距离正确那一侧街道的距离的比例。最小化这个项,会确保模型尽可能少地造成间隔入侵。

最后提一下HINGE LOSS,我们之前在训练SVM时使用的是这个损失函数。它的函数为max(0, 1-t)。在 t ≥ 1时,输出为0。它的导数在t < 1 时等于 -1,在t > 1 时等于0 ;在t=1时不可微,不过仍可以在使用梯度下降时,使用t=1 时的任何次导数(也就是说,任何在-1到0之间的值)。函数图如下:

 

 

在在线SVM中,也是可以实现在线核化SVM的,例如使用“Incremental and Decremental SVM Learning” 或”Fast Kernel Classifiers with Online and Active Learning”。不过这些是通过Matlab和C++实现的。对于大型的非线性问题,我们其实可以考虑使用神经网络。

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。