SVM算法

SVM算法概述

SVM又称为支持向量机,是一种二分类的模型。是一种监督学习模型。支持向量机可以分为线性核非线性两大类。其主要思想为找到空间中的一个更够将所有数据样本划开的超平面,并且使得本本集中所有数据到这个超平面的距离最短。

举个例子,在一个二维的平面上有放满了红豆和绿豆,左边放着红豆,右边放着绿豆,而中间就是分界线,我们想要把找到一条线,这条线能很好的把红豆和绿豆分开来,中间的分界线很明显就是。但是,能做到把红豆和绿豆分开来的线可能不止一条,如果这条中间的分界线旋转一定的角度,在平面范围内,也许也可以把红豆和绿豆分开,也能达到我们的目的,旋转后的线看似也解决了问题,但是跟一开始的中间线相比,效果肯定不如中间线的,假设红豆绿豆和旋转后的线一直无限延申,那么到最后肯定会有划分错误的情况。还有,就算是中间线往左往右平移一点距离,也能达到很好的划分,但是对未知数据的预测可能就会出现了偏差,假设线分界线里红豆很近,离绿豆很远,那么预测的红豆比样本的红豆的边缘值远一点点,就会被预测成绿豆,所以最佳的情况下是红豆和绿豆的边缘点到达这跟线的距离是一致的,如果是人来做,不考虑算法,按照我们人的习惯,也是选择两边等距离的一条线。SVM算法就是要找到能够划分红豆绿豆的最佳的那一条线,就是那条中间线,而不是旋转过后的线,是刚好中间的那条最佳的线。

计算过程

SVM 就是找到一条线,让在线的两边到两组数据的边界点的距离尽可能大。其中,边界点就被称之为支持向量,作为支持向量的样本点非常重要,而离分界线很远的点就可以视而不见。实际应用中,数据绝大多数都不会是有一条很明确的分界线的,而是数据不可划分的,所以,要使用SVM算法将所有的点映射到更高维的空间,在高维空间中找到能将这些点分开的超平面,而满足超平面的数量也不一定是唯一的,SVM还需要利用这些超平面,找到这两类点之间的最大间隔,也就是找到让两组数据到这个超平面的距离的最大值。

在高维空间中,超平面的函数表达式为:

w^{T}x+b=0

求出w和b,就得到了超平面的函数方程式。SVM算法的训练过程就是要求出最合适的w、b,从而找到最合适的超平面。

硬间隔和软间隔

硬间隔:完全分类准确,就是没有损失函数,其损失值为0,就是要找出两个异类正中间的那个平面,将两边数据完全划分,假设有百分之九十九的数据是可以划分的,但他们内部却存在着一两个对方的数据,也就是存在着异常值,那么就会因为这一两个异常值的情况下,硬间隔的要求就会导致导致不能线性可分,这是最糟糕的情况,就算没有达到最糟糕的情况,勉强进行划分,但是这样勉强得到的模型也被这一两个异常点严重影响了泛化的能力。

软间隔:允许一定量的样本分类错误,目标函数增加一个惩罚系数C,当C很大时,意味着分类严格不允许有错误,当C很小时,意味着分类宽松允许有更大的错误。C是指定的一个参数。这样就在一定程度上解决了出现异常值的情况。

核函数

SVM算法将所有的点映射到更高维的空间需要使用核函数进行数据变换,然后在高维空间中变成线性可分的数据,从而可以构造出最优分类超平面。

线性核函数公式:

K(x_{1},x_{2})=<x_{1},x_{2}>

就是普通的内积

多项式核函数公式:

K(x_{1},x_{2})=(<x1,x2>+r)^{d}

r和d需要自定定义,可根据r和d的取值不同,而有不同的计算式

高斯核函数公式:

K(x_{1},x_{2})=exp(-\frac{||x_{1}-x_{2}||^{2}}{2\sigma ^{2}})

高斯核函数,可根据实际需要灵活选取参数σ,甚至还可以将原始维度空间映射到无穷维度空间。不过,如果σ取值很大,会导致高次特征上的权重衰减快;如果σ取值很小,其好处是可以将任意的数据映射成为线性可分,但容易造成过拟合现象。高斯核函数是使用最广泛的核函数之一。一般情况下,对非线性数据使用默认的高斯核函数会有比较好的效果,

Sigmoid核函数公式:

K(x_{1},x_{2})=tanh(\gamma <x_{1},x_{2}>+r)

γ,r都需要自己调参定义,一般需要通过交叉验证选择一组合适的γ,r。也是使用最广泛的核函数之一。

多类分类器

SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。

构造SVM多类分类器的方法主要有两类

1.直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中。

2.间接法,主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有一对一法和一对多法。

一对一法就是在任意两类样本之间设计一个SVM分类器,因此k个类别的样本就需要设计k(k-1)/2个SVM分类器。当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。使用这种办法复杂度非常大,类别越多代价越大。

一对多法就是训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了K个SVM分类器。分类时将未知样本分类为具有最大分类函数值的那类。相比一对一法,一对多没有那么多的分类器,分类速度相对较大,但这种情况可能导致一个样本同时属于多个类,又或者不属于任何一个类。如果有新的类别加进来时,所有的模型还需要进行重新训练,而且成罚系数C比较难设置。

SVM算法的优缺点

优点:

1.有严格的数学理论支持,可解释性强。

2.由于算法依赖于支持向量,所以除了支持向量外,其他的样本点发生一些变化对算法没有什么影响。

3.SVM算法得到的是全局最优解。

缺点:

1.因为SVM算法的开销很大,对大规模训练样本难以实施,所以并不适合大的数量集。

2.处理多类别分类问题十分复杂。

SVM算法代码

from sklearn import svm
from sklearn.metrics import accuracy_score
clf=svm.SVC(C=1,kernel='rbf',decision_function_shape='ovr')#惩罚参数为1,核函数是rbf,就是高斯核函数,选择一对多分类器
clf.fit(x_train, y_train)
res=clf.predict(x_test)

代码函数及参数说明见

https://scikit-learn.org.cn/view/781.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值