支持向量机
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的用武之地:允许我们在两个目标之间权衡。
支持向量机原理线性支持回归
在前四篇里面我们讲到了SVM的线性分类和非线性分类,以及在分类时用到的算法。这些都关注与SVM的分类问题。实际上SVM也可以用于回归模型,本篇就对如何将SVM用于回归模型做一个总结。重点关注SVM分类和SVM回归的相同点与不同点。
1. SVM回归模型的损失函数度量
回顾下我们前面SVM分类模型中,我们的目标函数是让12||w||2212||w||22最小,同时让各个训练集中的点尽量远离自己类别一边的的支持向量,即yi(w∙ϕ(xi)+b)≥1yi(w∙ϕ(xi)+b)≥1。如果是加入一个松弛变量ξi≥0ξi≥0,则目标函数是12||w||22+C∑i=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),如果|yi−w∙ϕ(xi)−b|≤ϵ|yi−w∙ϕ(xi)−b|≤ϵ,则完全没有损失,如果|yi−w∙ϕ(xi)−b|>ϵ|yi−w∙ϕ(xi)−b|>ϵ,则对应的损失为|yi−w∙ϕ(xi)−b|−ϵ|yi−w∙ϕ(xi)−b|−ϵ,这个均方差损失函数不同,如果是均方差,那么只要yi−w∙ϕ(xi)−b≠0yi−w∙ϕ(xi)−b≠0,那么就会有损失。
如下图所示,在蓝色条带里面的点都是没有损失的,但是外面的点的是有损失的,损失大小为红色线的长度。
总结下,我们的SVM回归模型的损失函数度量为:
2. SVM回归模型的目标函数的原始形式
上一节我们已经得到了我们的损失函数的度量,现在可以可以定义我们的目标函数如下:
和SVM分类模型相似,回归模型也可以对每个样本(xi,yi)(xi,yi)加入松弛变量ξi≥0ξi≥0, 但是由于我们这里用的是绝对值,实际上是两个不等式,也就是说两边都需要松弛变量,我们定义为ξ∨i,ξ∧iξi∨,ξi∧, 则我们SVM回归模型的损失函数度量在加入松弛变量之后变为:
依然和SVM分类模型相似,我们可以用拉格朗日函数将目标优化函数变成无约束的形式,也就是拉格朗日函数的原始形式如下: