支持向量机

2019-04-10  本文已影响0人  啦啦啦_9a5f

支持向量机是一个功能请打并且全面的机器学习模型,它能够执行线性或非线性、回归,甚至是异常值检测任务。它是机器学习领域最受欢迎的模型之一。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.因此它的新特征为x2 = exp(-0.3 * 1^2 )\approx 0.74,x3 = exp(-0.3 * 2^2 )\approx 0.30

(2)怎么选择地标:

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

3.如何选择核函数

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

4.计算复杂度

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

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

四、SVM回归

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

五、工作原理

线性SVM是通过简单地计算决策函数W^T *X + b = w1x1+...+wnxn+b来预测新实例x的分类。如果结果为正,则预测类别\hat{y} 是正类(1),否则为负类(0)

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

(1)训练目标

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

t ^ i (W^T \cdot X +b ) \geq  1

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

min(w,b) \frac{1}{2}W^T \cdot W

使得t^i (W^T \cdot X^i + b) \geq 1(i = 1,2,...,m)

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

(2)软间隔

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

上一篇下一篇

猜你喜欢

热点阅读