本文从实践的角度对scikit-learn SVM算法库的使用做一个小结。scikit-learn SVM算法库封装了libsvm 和 liblinear 的实现,仅仅重写了算法了接口部分。

1. scikit-learn SVM算法库使用概述

scikit-learn中SVM的算法库分为两类,一类是分类的算法库,包括SVC, NuSVC,和LinearSVC 3个类。另一类是回归算法库,包括SVR, NuSVR,和LinearSVR 3个类。相关的类都包裹在sklearn.svm模块之中。

对于SVC, NuSVC,和LinearSVC 3个分类的类,SVC和 NuSVC差不多,区别仅仅在于对损失的度量方式不同,而LinearSVC从名字就可以看出,他是线性分类,也就是不支持各种低维到高维的核函数,仅仅支持线性核函数,对线性不可分的数据不能使用。

同样的,对于SVR, NuSVR,和LinearSVR 3个回归的类, SVR和NuSVR差不多,区别也仅仅在于对损失的度量方式不同。LinearSVR是线性回归,只能使用线性核函数。

我们使用这些类的时候,如果有经验知道数据是线性可以拟合的,那么使用LinearSVC去分类 或者LinearSVR去回归,它们不需要我们去慢慢的调参去选择各种核函数以及对应参数, 速度也快。如果我们对数据分布没有什么经验,一般使用SVC去分类或者SVR去回归,这就需要我们选择核函数以及对核函数调参了。

什么特殊场景需要使用NuSVC分类 和 NuSVR 回归呢?如果我们对训练集训练的错误率或者说支持向量的百分比有要求的时候,可以选择NuSVC分类 和 NuSVR 。它们有一个参数来控制这个百分比。

这些类的详细使用方法我们在下面再详细讲述。

2. 回顾SVM分类算法和回归算法

我们先简要回顾下SVM分类算法和回归算法,因为这里面有些参数对应于算法库的参数,如果不先复习下,下面对参数的讲述可能会有些难以理解。

对于SVM分类算法,其原始形式是:

其中m为样本个数,我们的样本为。是我们的分离超平面的系数,为第i个样本的松弛系数, C为惩罚系数。为低维到高维的映射函数。

通过拉格朗日函数以及对偶化后的形式为:

其中和原始形式不同的为拉格朗日系数向量。为我们要使用的核函数。

3. SVM核函数概述

在scikit-learn中,内置的核函数一共有4种,当然如果你认为线性核函数不算核函数的话,那就只有三种。

1)线性核函数(Linear Kernel)表达式为:,就是普通的内积,LinearSVC 和 LinearSVR 只能使用它。

2) 多项式核函数(Polynomial Kernel)是线性不可分SVM常用的核函数之一,表达式为:(,其中,都需要自己调参定义,比较麻烦。

3)高斯核函数(Gaussian Kernel),在SVM中也称为径向基核函数(Radial Basis Function,RBF),它是libsvm默认的核函数,当然也是scikit-learn默认的核函数。表达式为:, 其中,大于0,需要自己调参定义。

4)Sigmoid核函数(Sigmoid Kernel)也是线性不可分SVM常用的核函数之一,表达式为:(, 其中,都需要自己调参定义。

一般情况下,对非线性数据使用默认的高斯核函数会有比较好的效果,如果你不是SVM调参高手的话,建议使用高斯核来做数据分析。

4. SVM分类算法库参数小结

这里我们对SVM分类算法库的重要参数做一个详细的解释,重点讲述调参的一些注意点。

5. SVM回归算法库参数小结

SVM回归算法库的重要参数巨大部分和分类算法库类似,因此这里重点讲述和分类算法库不同的部分,对于相同的部分可以参考上一节对应参数。

6. SVM算法库其他调参要点

上面已经对scikit-learn中类库的参数做了总结,这里对其他的调参要点做一个小结。

1)一般推荐在做训练之前对数据进行归一化,当然测试集中的数据也需要归一化。。

2)在特征数非常多的情况下,或者样本数远小于特征数的时候,使用线性核,效果已经很好,并且只需要选择惩罚系数C即可。

3)在选择核函数时,如果线性拟合不好,一般推荐使用默认的高斯核'rbf'。这时我们主要需要对惩罚系数C和核函数参数进行艰苦的调参,通过多轮的交叉验证选择合适的惩罚系数C和核函数参数。

4)理论上高斯核不会比线性核差,但是这个理论却建立在要花费更多的时间来调参上。所以实际上能用线性核解决问题我们尽量使用线性核。

算法:线性时间选择_机器学习必修课!scikit-learn 支持向量机算法库使用小结相关推荐

  1. louvian算法 缺点 优化_机器学习中的优化算法(1)-优化算法重要性,SGD,Momentum(附Python示例)...

    本系列文章已转至 机器学习的优化器​zhuanlan.zhihu.com 优化算法在机器学习中扮演着至关重要的角色,了解常用的优化算法对于机器学习爱好者和从业者有着重要的意义. 这系列文章先讲述优化算 ...

  2. 机器学习与Scikit Learn学习库

    摘要: 本文介绍机器学习相关的学习库Scikit Learn,包含其安装及具体识别手写体数字案例,适合机器学习初学者入门Scikit Learn. 在我科研的时候,机器学习(ML)是计算机科学领域中最 ...

  3. k邻近算法python代码_机器学习算法之K近邻法-Python实现

    一.算法简介 k近邻法(k-nearest neighbor,k-NN)是一种基本的分类方法,输入的是实例的特征向量,对应于特征空间的点,输出结果为实例的类别,可以取多类.对于训练集来说,每个实例的类 ...

  4. 机器学习实践:基于支持向量机算法对鸢尾花进行分类

    摘要:List item使用scikit-learn机器学习包的支持向量机算法,使用全部特征对鸢尾花进行分类. 本文分享自华为云社区<支持向量机算法之鸢尾花特征分类[机器学习]>,作者:上 ...

  5. 古老的spc也可以用机器学习(三)-支持向量机算法

    大家都很清楚SPC的中文叫统计过程控制,它的作用是发现过程数据中的异常行为,SPC有8种以上的判异规则,每一中判异规则对应可能的异常原因,非常实用. 现在大数据.机器学习应用越来越广泛,而机器学习算法 ...

  6. 机器学习算法系列(十四)-硬间隔支持向量机算法(Hard-margin Support Vector Machine)

    阅读本文需要的背景知识点:拉格朗日乘子法.KKT条件.一丢丢编程知识 一.引言   前面一节我们介绍了一种分类算法--朴素贝叶斯分类器算法,从概率分布的角度进行分类.下面我们会花几节来介绍另一种在分类 ...

  7. slope one 推荐算法python 代码_基于协同的SlopeOne推荐算法原理介绍和实现

    Slope One 算法是由 Daniel Lemire 教授在 2005 年提出的一个 Item-Based 的协同过滤推荐算法. --文章概要 该篇文章主要介绍Slope One算法.Slope ...

  8. 支持向量机回归_机器学习系列17:支持向量机

    机器学习系列17:支持向量机 支持向量机(Support vector machine)是一种强大的机器学习算法,和神经网络相比,它在学习复杂的非线性方程时,能够提供更清晰和更加强大的方式.为了学习支 ...

  9. l bfgs算法java代码_数值优化:理解L-BFGS算法

    译自<Numerical Optimization: Understanding L-BFGS>,本来只想作为学习CRF的补充材料,读完后发现收获很多,把许多以前零散的知识点都串起来了.对 ...

最新文章

  1. 认清自己,就能活出更好的自己
  2. 什么是棉绒,它如何节省您的时间?
  3. CentOS7 redis-3.2.8 从单机到主从再到集群配置
  4. 微服务发展的历史_Spring Cloud Alibaba#03. 微服务的发展史
  5. HDU Problem - 3763 CD(二分)
  6. 在微信浏览器字体被调大导致页面错乱的解决办法
  7. 基础省选+NOI-第4部分 动态规划
  8. 服务器性能优化的8种常用方法
  9. Python中文件操作和文件夹操作的学习笔记
  10. 简析 JSON 中的{}与[]
  11. 自动化运维 Shell
  12. 电商项目数据库设计 | 第五篇:参考京东商城详细讲解商品数据库设计
  13. facebook登陆接入
  14. python写斗地主游戏_python斗地主
  15. DC-DC电源市场现状及未来发展趋势分析
  16. L3-015 球队“食物链” (30 分)
  17. python变成exe1023无标题_GitHub - Qing1023/Python-100-Days: Python - 100天从新手到大师
  18. 利用Medium的CDN来改善Feed的页面加载时间
  19. Java中byte与short、int、long互转(包含大端,小端)
  20. 以下内容仅对你可见个性签名_微信个性签名居中以下内容仅对你可见

热门文章

  1. [程序人生]: 判断字符串是否为出栈序列
  2. C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区...
  3. ZOJ-3704 I am Nexus Master! 模拟
  4. 他人收藏的精彩视频(一)
  5. android 会话 java_java – Android会话管理
  6. 信息学奥赛一本通 1064:奥运奖牌计数 | OpenJudge NOI 1.5 07
  7. 信息学奥赛一本通(1246:膨胀的木棍)
  8. 信息学奥赛一本通(1178:成绩排序)——选择排序
  9. 信息学奥赛一本通(1054:三角形判断)
  10. 训练日志 2019.4.6