微信公众号:python宝
关注可了解更多的python相关知识。若有问题或建议,请公众号留言;

内容目录

一、支持向量机 SVM 简介二、LinearSVC, LinearSVR,SVC,SVR参数解释与比较1、LinearSVC介绍2、SVC 介绍3、LinearSVR 介绍4、SVR 介绍三、LinearSVC, LinearSVR,SVC,SVR 比较

一、支持向量机 SVM 简介

  支持向量机(SVM:Support Vector Machine)是机器学习中常见的一种分类算法,是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题来求解。支持向量机要做的就是要在这些可以选择的直线中选择一条最好的直线来作为分类的直线。

  • 当训练样本线性可分时,通过硬间隔最大化,学习一个线性可分支持向量机;

  • 当训练样本近似线性可分时,通过软间隔最大化,学习一个线性支持向量机;

  • 当训练样本线性不可分时,通过核技巧和软间隔最大化,学习一个非线性支持向量机。

  给定一些数据点,它们分别属于两个不同的类。我们现在要找到一个线性分类器把这些数据分成AB两类。最简单的办法当然是,画一条线,然后将它们分成两类。线的一侧,属于A类,另一侧,则属于B类。SVM算法可以让我们找到这样一个最佳的线(超平面),来划分数据。相比于KNN之类的算法,SVM算法只需要计算一次,得出最佳线(超平面)即可。面对测试数据,只需要判断数据点落在线的哪一侧,就可以知道该数据点所属分类了。比起KNN每次都需要计算一遍邻居点的分类,SVM算法显得简单无比。

  SVM的基本概念:

  • 分隔超平面:将数据集分割开来的直线叫做分隔超平面;

  • 超平面:如果数据集是N维的,那么就需要N-1维的某对象来对数据进行分割。该对象叫做超平面,也就是分类的决策边界;

  • 间隔:一个点到分割面的距离,称为点相对于分割面的距离。数据集中所有的点到分割面的最小间隔的2倍,称为分类器或数据集的间隔;

  • 最大间隔:SVM分类器是要找最大的数据集间隔,其实就是距离直线距离最短的点离直线的距离要最大;

  • 支持向量:坐落在数据边际的两边超平面上的点被称为支持向量,也就是对于点的犯错的容忍度越大越好,其实就是函数间隔越大越好,我们的拟合直线也将会由着些点确定。

二、LinearSVC, LinearSVR,SVC,SVR参数解释与比较

1、LinearSVC介绍

from sklearn.svm import LinearSVC, LinearSVR,SVC,SVR
LSVC = LinearSVC(penalty='l2',loss='squared_hinge',dual=True,tol=0.0001,C=1.0,multi_class='ovr',fit_intercept=True,intercept_scaling=1,class_weight=None,verbose=0,random_state=None,max_iter=1000)# 原文链接:https://blog.csdn.net/u010986753/article/details/96533050

参数解释

  • penalty:正则化参数,L1和L2两种参数可选,仅LinearSVC有。

  • loss:损失函数,有‘hinge’和‘squared_hinge’两种可选,前者又称L1损失,后者称为L2损失,默认是是’squared_hinge’,其中hinge是SVM的标准损失,squared_hinge是hinge的平方。

  • dual:是否转化为对偶问题求解,默认是True。

  • tol:残差收敛条件,默认是0.0001,与LR中的一致。

  • C:惩罚系数,用来控制损失函数的惩罚系数,类似于LR中的正则化系数,默认值为1.0。C越大,即对分错样本的惩罚程度越大,因此在训练样本中准确率越高,但是泛化能力降低,也就是对测试数据的分类准确率降低。相反,减小C的话,容许训练样本中有一些误分类错误样本,泛化能力强。对于训练样本带有噪声的情况,一般采用后者,把训练样本集中错误分类的样本作为噪声。

  • multi_class:负责多分类问题中分类策略制定,有‘ovr’和‘crammer_singer’ 两种参数值可选,默认值是’ovr’,'ovr'的分类原则是将待分类中的某一类当作正类,其他全部归为负类,通过这样求取得到每个类别作为正类时的正确率,取正确率最高的那个类别为正类;‘crammer_singer’ 是直接针对目标函数设置多个参数值,最后进行优化,得到不同类别的参数值大小。

  • fit_intercept:是否计算截距,与LR模型中的意思一致。

  • class_weight:与其他模型中参数含义一样,也是用来处理不平衡样本数据的,可以直接以字典的形式指定不同类别的权重,也可以使用balanced参数值。

  • verbose:详细输出,默认是False.

  • random_state:随机种子的大小。

  • max_iter:最大迭代次数,默认是1000。

      
    对象

  • coef_:各特征的系数(重要性)。

  • intercept_:截距的大小(常数值)。

2、SVC 介绍

svc = SVC(C=1.0,kernel='rbf',degree=3,gamma='auto',coef0=0.0,shrinking=True,probability=False,tol=0.001,cache_size=200,class_weight=None,verbose=False,max_iter=-1,decision_function_shape=None,random_state=None)

参数解释:

  • C: float参数 默认值为1.0,错误项的惩罚系数。C越大,即对分错样本的惩罚程度越大,因此在训练样本中准确率越高,但是泛化能力降低,也就是对测试数据的分类准确率降低。相反,减小C的话,容许训练样本中有一些误分类错误样本,泛化能力强。对于训练样本带有噪声的情况,一般采用后者,把训练样本集中错误分类的样本作为噪声。

  • kernel: str参数 默认为‘rbf’,算法中采用的核函数类型,可选参数有:‘linear’:线性核函数、‘poly’:多项式核函数、‘rbf’:径像核函数/高斯核、‘sigmod’:sigmod核函数、‘precomputed’:核矩阵,precomputed表示自己提前计算好核函数矩阵,这时候算法内部就不再用核函数去计算核矩阵,而是直接用你给的核矩阵。还有一点需要说明,除了上面限定的核函数外,还可以给出自己定义的核函数,其实内部就是用你自己定义的核函数来计算核矩阵。

  • degree: int型参数 默认为3,这个参数只对多项式核函数有用,是指多项式核函数的阶数n,如果给的核函数参数是其他核函数,则会自动忽略该参数。

  • gamma: float参数 默认为auto,核函数系数,只对‘rbf’,‘poly’,‘sigmod’有效。如果gamma为auto,代表其值为样本特征数的倒数,即1/n_features.

  • coef0: float参数 默认为0.0,核函数中的独立项,只有对‘poly’和‘sigmod’核函数有用,是指其中的参数c

  • probability:bool参数 默认为False,是否启用概率估计。这必须在调用fit()之前启用,并且会fit()方法速度变慢。

  • shrinking:bool参数 默认为True,是否采用启发式收缩方式

  • tol: float参数 默认为1e^-3,svm停止训练的误差精度

  • cache_size:float参数 默认为200,指定训练所需要的内存,以MB为单位,默认为200MB。

  • class_weight:字典类型或者‘balance’字符串。默认为None,给每个类别分别设置不同的惩罚参数C,如果没有给,则会给所有类别都给C=1,即前面参数指出的参数C.如果给定参数‘balance’,则使用y的值自动调整与输入数据中的类频率成反比的权重。

  • verbose :bool参数 默认为False,是否启用详细输出。此设置利用libsvm中的每个进程运行时设置,如果启用,可能无法在多线程上下文中正常工作。一般情况都设为False,不用管它。

  • max_iter :int参数 默认为-1,最大迭代次数,如果为-1,表示不限制

  • random_state:int型参数 默认为None,伪随机数发生器的种子,在混洗数据时用于概率估计。

方法:

★fit() 方法:用于训练SVM,具体参数已经在定义SVC对象的时候给出了,这时候只需要给出数据集X和X对应的标签y即可。
★predict() 方法: 基于以上的训练,对预测样本T进行类别预测,因此只需要接收一个测试集T,该函数返回一个数组表示个测试样本的类别。

属性:

  • svc.n_support_:各类各有多少个支持向量;

  • svc.support_:各类的支持向量在训练样本中的索引;

  • svc.support_vectors_:各类所有的支持向量。

3、LinearSVR 介绍

Lsvr = LinearSVR(epsilon=0.0,tol=0.0001,C=1.0,loss='epsilon_insensitive',fit_intercept=True,intercept_scaling=1.0,dual=True,verbose=0,random_state=None,max_iter=1000)

4、SVR 介绍

svr = SVR(kernel='rbf',degree=3,gamma='auto_deprecated',coef0=0.0,tol=0.001,C=1.0,epsilon=0.1,shrinking=True,cache_size=200,verbose=False,max_iter=-1)

参数解释:

  • kernel :string,optional(default ='rbf')指定要在算法中使用的内核类型。它必须是'linear','poly','rbf','sigmoid','precomputed'或者callable之一。如果没有给出,将使用'rbf'。如果给出了callable,则它用于预先计算内核矩阵。

  • degree:int,可选(默认= 3),多项式核函数的次数('poly')。被所有其他内核忽略。

  • gamma :float,optional(默认='auto'),'rbf','poly'和'sigmoid'的核系数。
    当前默认值为'auto',它使用1 / n_features,如果gamma='scale'传递,则使用1 /(n_features * X.std())作为gamma的值。当前默认的gamma''auto'将在版本0.22中更改为'scale'。'auto_deprecated','auto'的弃用版本用作默认值,表示没有传递明确的gamma值。

  • coef0 :float,optional(默认值= 0.0),核函数中的独立项。它只在'poly'和'sigmoid'中很重要。

  • tol :float,optional(默认值= 1e-3),容忍停止标准。

  • C :float,可选(默认= 1.0)错误术语的惩罚参数C.

  • epsilon :float,optional(默认值= 0.1),Epsilon在epsilon-SVR模型中。它指定了epsilon-tube,其中训练损失函数中没有惩罚与在实际值的距离epsilon内预测的点。

  • shrinking :布尔值,可选(默认= True),是否使用收缩启发式。

  • cache_size :float,可选,指定内核缓存的大小(以MB为单位)。

  • verbose详细说明 :bool,默认值:False,启用详细输出。请注意,此设置利用libsvm中的每进程运行时设置,如果启用,则可能无法在多线程上下文中正常运行。

  • max_iter :int,optional(默认值= -1),求解器内迭代的硬限制,或无限制的-1。

三、LinearSVC, LinearSVR,SVC,SVR 比较

  线性模型有线性决策边界(交叉的超平面),而非线性核模型(多项式或者高斯RBF)的弹性非线性决策边界的形状由核种类和参数决定。

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

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

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

  • LinearSVC使用的是平方hinge loss,SVC使用的是绝对值hinge loss,我们知道,绝对值hinge loss是非凸的,不能用GD去优化,而平方hinge loss可以;

  • LinearSVC使用的是One-vs-All(也称One-vs-Rest)的优化方法,而SVC使用的是One-vs-One;

  • 对于多分类问题,如果分类的数量是N,则LinearSVC适合N模型,而SVC适合N(N-1)/2模型;

  • LinearSVC基于liblinear,罚函数是对截矩进行惩罚;SVC基于libsvm,罚函数不是对截矩进行惩罚。

About Me:小婷儿

● 本文作者:小婷儿,专注于python、数据分析、数据挖掘、机器学习相关技术,也注重技术的运用

● 作者博客地址:https://blog.csdn.net/u010986753

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● 微信:tinghai87605025 联系我加微信群

● QQ:87605025

● QQ交流群py_data :483766429

● 公众号:python宝 或 DB宝

● 提供OCP、OCM和高可用最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

如果你觉得到文章对您有帮助,欢迎赞赏,有您的支持,小婷儿一定会越来越好!

SVM有监督学习LinearSVC, LinearSVR,SVC,SVR -- 024相关推荐

  1. python中的sklearn.svm.svr_python机器学习库scikit-learn:SVR的基本应用

    scikit-learn是python的第三方机器学习库,里面集成了大量机器学习的常用方法.例如:贝叶斯,svm,knn等. scikit-learn的官网 : http://scikit-learn ...

  2. 实战案例|基于机器学习的 Python 信用卡欺诈检测!

    欢迎关注 ,专注Python.数据分析.数据挖掘.好玩工具! 当我们在网上购买产品时,很多人喜欢使用信用卡.但信用卡欺诈常常会在身边发生,网络安全正成为我们生活中至关重要的一部分. 为了解决这个问题, ...

  3. 【实战案例】Python 信用卡欺诈检测其实特简单

    当我们在网上购买产品时,很多人喜欢使用信用卡.但信用卡欺诈常常会在身边发生,网络安全正成为我们生活中至关重要的一部分. 为了解决这个问题,我们需要利用机器学习算法构建一个异常行为的识别系统,如果发现可 ...

  4. ML-支持向量:SVM、SVC、SVR、SMO原理推导及实现

    目录 1.导出目标 2拉格朗日转换 3对偶问题: 4求对偶问题 5 求b 6 得出模型 6.1 f(x)的约束条件: 7 核函数 7.1 软间隔 7.2 松弛变量: 7.3 KKT约束 8 SMO求a ...

  5. 机器学习:支持向量机SVM的SVC和SVR

    支持向量机SVM SVM的工作原理及分类 支持向量机的原理 线性可分的SVM 非线性可分的支持向量机 支持向量机分类SVC 支持向量机回归SVR SVR原理 SVR模型 时间序列曲线预测 SVM的工作 ...

  6. 谈谈SVM和SVR的区别

    支持向量机(SVM)本身是针对二分类问题提出的,而SVR(支持向量回归)是SVM(支持向量机)中的一个重要的应用分支.SVR回归与SVM分类的区别在于,SVR的样本点最终只有一类,它所寻求的最优超平面 ...

  7. 【白话机器学习】算法理论+实战之支持向量机(SVM)

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法A ...

  8. 【Scikit-Learn 中文文档】支持向量机 - 监督学习 - 用户指南 | ApacheCN

    中文文档: http://sklearn.apachecn.org/cn/0.19.0/modules/svm.html 英文文档: http://sklearn.apachecn.org/en/0. ...

  9. 支持向量机SVM(上)

    1 概述 支持向量机(SVM,也称为支持向量网络),是机器学习中获得关注最多的算法没有之一.它源于统计学习理论,是除了集成算法之外,接触的第一个强学习器.它有多强呢? 从算法的功能来看,SVM几乎囊括 ...

最新文章

  1. VS2017增加数据库连接串
  2. 【MATLAB】求点到多边形的最短距离
  3. 定期存款可以提前取出来吗_如果银行存款利率涨了,定期存款有必要取出再存吗?...
  4. html背景视频模糊效果,怎么给竖屏视频添加模糊背景效果?
  5. 如何在一场面试中展现你对Python的coding能力?
  6. java string 空间_java堆与栈 java String分配内存空间(详解)
  7. H.264文件解析与码流分析
  8. 百度wz竞价推广关键词排名的影响因素大全
  9. 《清单革命》:让大脑处理更重要的事情
  10. 【Cancer Research】由Y染色体LINC00278编码的新型微肽与AR信号通路介导的男性食管鳞状细胞癌相关
  11. CSDN个性化推荐 - 测试和建议
  12. VUEElement综合案例
  13. 优化版本的Json Viewer工具
  14. 中国数据治理现状调研报告(2021)
  15. 华为AR1200路由器清空console密码
  16. java局域网聊天代码_简单的局域网聊天程序(java版本的)
  17. 基于bitmap实现用户画像的标签圈人功能
  18. jquery级试题_JavaScript Jquery考试题.doc
  19. SpringBoot集成Redis报non null key required(已解决)
  20. TCL通讯在IFA 2018发布全新BlackBerry® KEY2 LE智能手机

热门文章

  1. 程序员:上班第一天就让改bug!网友:攒一堆了,就等你了!
  2. SpringMVC (注解、拦截器、json、Ajax)
  3. java怎么上传文件到虚拟主机,购买虚拟主机如何部署java项目
  4. linux运维面试题:第一部分
  5. 120亿美元打造 美军战地移动网络被曝存重大漏洞
  6. python愤怒的小鸟简单模拟程序_Python物理引擎
  7. hlookup函数使用教程_星期五的Excel函数:HLOOKUP查找当前价格
  8. python图像识别之图片相似度计算
  9. 自学编程真的很无力吗?不,完全可以相信自己。【肝 5000+字自述java自学】
  10. springcloud中网关zuul的过滤器zuulFilter的使用