支持向量机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了支持向量机相关的知识,希望对你有一定的参考价值。

参考技术A 支持向量机是一个功能请打并且全面的机器学习模型,它能够执行线性或非线性、回归,甚至是异常值检测任务。它是机器学习领域最受欢迎的模型之一。SVM特别适用于中小型复杂数据集的分类。

一、线性SVM分类

可以将SVM分类器视为在类别之间拟合可能的最宽的街道,因此也可以叫做大间隔分类。

注意,在街道意外的地方增加更多训练实例,不会对决策边界产生影响,也就是说它完全由街道边缘的实例所决定。SVM对特征的缩放非常敏感。

二、软间隔分类

1、硬间隔分类:如果严格地让所有实例都不在街道上,并且位于正确的一边

2、硬间隔分类的两个问题:(1)它只在数据是线性可分离的时候才有效

                                                  (2)它对于异常值非常敏感

3.软间隔分类:避免这些问题,最好使用更灵活的模型。目标是尽可能在保持街道宽度和限制间隔违例(即位于街道之上,升值在错误一边的实例)之间找到良好的平衡。

4.Scikit-Learn 的SVM类中,可以通过超参数C来控制这个平衡:C值越小,则街道越宽,但是间隔违例也会越多。

5.三种分类器的比较

(1)LinearSVC(C=1,loss="hinge")

(2)SVM(kernel = "linear",C = 1),但是这个要慢得多,特别是对于大型训练集而言

(3)SGDClassifier(loss="hinge",alpha=1/(m*C)),适用于常规梯度下降来训练线性SVM分类器。,不会像LinearSVC那样快速收敛,但是对于内存处理不了的大型数据集或是线性分类任务,它非常有效。

三、非线性SVM

在许多情况下,线性SVM分类器是有效的,并且通常出人意料的好,但是,有很多数据集远不是线性课分离的。处理非线性数据集的方法之一是添加更多特征,比如多项式特征,在某些情况下,这可能导致数据集变得线性可分离。

1.多项式核——添加多项式

添加多项式特征实现起来非常简单,并且对所有的机器学习算法有效。但是,如果多项式太低阶,处理不了费换成那个复杂的数据集,而高阶则会创造出戴昂的特征,导致模型太慢。

使用SVM时,可以运用数学技巧——核技巧

它产生的结果就跟添加了许多多项式特征,甚至是非常高阶的多项式特征一样,但实际上并不需要真的添加。

2.添加相似特征——用相似特征替代

(1)解决非线性问题的另一种技术是添加相似特征。这些特征经过相似函数计算得出,相似函数可以测量每个实例与一个特定地标之间的相似程度。

例:

在x1 =-2和x2 = 1处添加两个地标。接下来,采用高斯径向基函数(RBF)作为相似函数:

这是一个从0到1变化的钟形函数。实例x1=-1:它与第一个地标的距离为1,与第二个地标的距离为2.因此它的新特征为 0.74, 0.30

(2)怎么选择地标:

最简单的方法时在数据集里面一个实例的位置上创建一个地标。缺点是:一个有m个实例n个特征的训练集会被转换成一个m个实例

3.如何选择核函数

有那么多的核函数,该如何决定使用哪一个?有一个经验法则是,永远先从现行核函数开始尝试(LinearSVC 比 SVC(kernel =“linear”)快得多),特别是训练集非常大或特征非常多的时候。如果训练集不太大,你可以试试高斯RBF核, 大多数情况下它都非常好用。

4.计算复杂度

(1)liblinear库为线性SVM实现了一个优化算法,LinearSVC正是基于该库的。这个算法不支持核技巧,不过它与训练实例的数量和特征数量几乎线性相关:其训练时间复杂度大致为O(m x n)

(2)SVC是基于libsvm库的,这个库的算法支持核技巧。训练时间复杂度通常在 和 之间,这意味着如果训练实例的数量变大,它会慢得可怕,所以这个算法完美适用于复杂但是中小型的训练集。但是,它还是可以良好适应地特征数量的增加,特别是应对稀疏特征。

四、SVM回归

SVM回归要做的是让尽可能多的实例位于街道上,在同时街道的同时还限制间隔违例,SVM回归要让尽可能多的实例位于街道上,同时限制间隔为例。街道的宽度由超参数 控制。

五、工作原理

线性SVM是通过简单地计算决策函数 来预测新实例x的分类。如果结果为正,则预测类别 是正类(1),否则为负类(0)

训练线性SVM分类器即意味着找到W和b的值,从而使这个间隔尽可能宽的同时,避免(硬间隔)或是限制(软间隔)间隔违例

(1)训练目标

要最小化||w||来得到尽可能大的间隔。但是,如果我们想要避免任何间隔违例(硬间隔),那么就要使所有正类训练集的决策函数大于1,负类训练集的决策函数小于-1。因此,我们可以将硬间隔线性SVM分类器的目标,看做一个约束优化问题,对所有实例:

公式:硬间隔线性SVM分类器的目标

使得

虽然 最小化和 结果相同,但是 有一个简单好用的导数。而 在W =0 时,是不可微的。优化算法在可微函数上的工作效果要好得多。

(2)软间隔

要达到软间隔的目标,需要引入一个松弛变量 , 衡量的是第i个实例多大程度上允许间隔违例。现在有两个相互冲突的目标:使松弛变量越小越好从而减少间隔违例,同时还要使  最小化以增大间隔。这正是超参数C的用武之地:允许我们在两个目标之间权衡。

支持向量机原理线性支持回归

   支持向量机原理(一) 线性支持向量机

    支持向量机原理(二) 线性支持向量机的软间隔最大化模型

    支持向量机原理(三)线性不可分支持向量机与核函数

    支持向量机原理(四)SMO算法原理

    支持向量机原理(五)线性支持回归

    在前四篇里面我们讲到了SVM的线性分类和非线性分类,以及在分类时用到的算法。这些都关注与SVM的分类问题。实际上SVM也可以用于回归模型,本篇就对如何将SVM用于回归模型做一个总结。重点关注SVM分类和SVM回归的相同点与不同点。

1. SVM回归模型的损失函数度量

    回顾下我们前面SVM分类模型中,我们的目标函数是让12||w||2212||w||22最小,同时让各个训练集中的点尽量远离自己类别一边的的支持向量,即yi(wϕ(xi)+b)1yi(w∙ϕ(xi)+b)≥1。如果是加入一个松弛变量ξi0ξi≥0,则目标函数是12||w||22+Ci=1mξi12||w||22+C∑i=1mξi,对应的约束条件变成:yi(wϕ(xi)+b)1ξiyi(w∙ϕ(xi)+b)≥1−ξi

    但是我们现在是回归模型,优化目标函数可以继续和SVM分类模型保持一致为12||w||2212||w||22,但是约束条件呢?不可能是让各个训练集中的点尽量远离自己类别一边的的支持向量,因为我们是回归模型,没有类别。对于回归模型,我们的目标是让训练集中的每个点(xi,yi)(xi,yi),尽量拟合到一个线性模型yi =wϕ(xi)+byi =w∙ϕ(xi)+b。对于一般的回归模型,我们是用均方差作为损失函数,但是SVM不是这样定义损失函数的。

    SVM需要我们定义一个常量ϵ>0ϵ>0,对于某一个点(xi,yi)(xi,yi),如果|yiwϕ(xi)b|ϵ|yi−w∙ϕ(xi)−b|≤ϵ,则完全没有损失,如果|yiwϕ(xi)b|>ϵ|yi−w∙ϕ(xi)−b|>ϵ,则对应的损失为|yiwϕ(xi)b|ϵ|yi−w∙ϕ(xi)−b|−ϵ,这个均方差损失函数不同,如果是均方差,那么只要yiwϕ(xi)b0yi−w∙ϕ(xi)−b≠0,那么就会有损失。

    如下图所示,在蓝色条带里面的点都是没有损失的,但是外面的点的是有损失的,损失大小为红色线的长度。

    总结下,我们的SVM回归模型的损失函数度量为:

 

err(xi,yi)={0|yiwϕ(xi)+b|ϵ|yiwϕ(xi)b|ϵ|yiwϕ(xi)b|>ϵerr(xi,yi)={0|yi−w∙ϕ(xi)−b|≤ϵ|yi−w∙ϕ(xi)+b|−ϵ|yi−w∙ϕ(xi)−b|>ϵ

 

2. SVM回归模型的目标函数的原始形式

    上一节我们已经得到了我们的损失函数的度量,现在可以可以定义我们的目标函数如下:

min12||w||22s.t|yiwϕ(xi)b|ϵ(i=1,2,...m)min12||w||22s.t|yi−w∙ϕ(xi)−b|≤ϵ(i=1,2,...m)

 

    和SVM分类模型相似,回归模型也可以对每个样本(xi,yi)(xi,yi)加入松弛变量ξi0ξi≥0, 但是由于我们这里用的是绝对值,实际上是两个不等式,也就是说两边都需要松弛变量,我们定义为ξi,ξiξi∨,ξi∧, 则我们SVM回归模型的损失函数度量在加入松弛变量之后变为:

min12||w||22+Ci=1m(ξi+ξi)min12||w||22+C∑i=1m(ξi∨+ξi∧)
s.t.ϵξiyiwϕ(xi)bϵ+ξis.t.−ϵ−ξi∨≤yi−w∙ϕ(xi)−b≤ϵ+ξi∧
ξi0,ξi0(i=1,2,...,m)ξi∨≥0,ξi∧≥0(i=1,2,...,m)

 

    依然和SVM分类模型相似,我们可以用拉格朗日函数将目标优化函数变成无约束的形式,也就是拉格朗日函数的原始形式如下:

 

L(w,b,α,α,ξi,ξi,μ,μ)=12||w||22+Ci=1m(ξi+ξi)+i=1以上是关于支持向量机的主要内容,如果未能解决你的问题,请参考以下文章

支持向量机

支持向量机原理 线性支持向量机的软间隔最大化模型

支持向量机

什么是支持向量机?

支持向量机

支持向量机原理线性不可分支持向量机与核函数