更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html

scikit-learn库之支持向量机

在scikit-learn库中针对数据是否线性可分,主要将支持向量机分为以下三种分类模型LinearSVCSVCNuSVC;还有三种回归模型LinearSVRSVRNuSVR

接下来将会讨论上述六者的区别,由于SVC应用场景较为广泛,主要细讲SVC,其他的只讲与SVC的区别。由于是从官方文档翻译而来,翻译会略有偏颇,有兴趣的也可以去scikit-learn官方文档查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.svm

一、SVC

1.1 使用场景

SVC模型基于较为灵活,既可以支持线性可分数据,又可以支持线性不可分数据的分类。

1.2 代码

import numpy as np
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])
from sklearn.svm import SVC
clf = SVC(gamma='auto')
clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)
print(clf.predict([[-0.8, -1]]))
[1]
print(clf.fit_status_)
0

1.3 参数详解

  • C:惩罚系数,float类型。如果C越大,惩罚程度越大,模型泛化能力降低;如果C越小,则容许训练样本中有一些误分类错误样本,泛化能力强,一般噪声较多推荐C小点。默认为1。
  • kernel:核函数,str类型。默认为'rbf',可选核函数有
    • 'linear':线性核函数
    • 'poly':多项式核函数
    • 'rbf':径向核函数(高斯核)
    • 'sigmoid':Sigmoid核函数
    • 'precomputed':核矩阵,即自己不使用核函数的情况下已经计算了核函数矩阵
  • degree:核函数参数,int类型。只有当kernel='poly'时才有用,即表示多项式核函数的阶数,对应核函数中的\(d\)。默认为3。
  • gamma:核函数参数,float类型。只有当kernel={'rbr','poly','sigmoid'}时才有用,对应核函数中的\(\gamma\)。默认为'auto',即表示其值为样本特征数的倒数。
  • coef0:核函数参数,float类型。只有当kernel={'poly','sigmoid'}时才有用,对应核函数中的\(r\)。默认为0。
  • shrinking:启发式收缩,bool类型。是否采用启发式收缩方式。默认为True。
  • probability:概率估计,bool类型。是否启用概率估计,必须得在fit()之前设置为True,会使得fit()速度变慢。默认为False。
  • tol:误差精度,float类型。支持向量机停止训练的误差精度。默认为1e-3。
  • cache_size:缓存大小,float类型。指定训练所需要的内存大小。默认为200,单位为MB。
  • class_weight:样本类别权重,{dict类型,'balanced'}。给每个类别指定不同的权重,'balanced'将自动分配不同类别样本的权重。可选参数。
  • verbose:日志冗长度,int类型。verbose=0,不输出训练过程;verbose=1,输出部分训练过程;verbose>1,输出所有的训练过程。默认为0。
  • max_iter:迭代次数,int类型。算法迭代次数,算法迭代到一定次数会收敛。默认为-1,表示不限制。
  • decision_function_shape:决策函数,str类型。决可选参数'ovo'和'ovr','ovo'表示一对一,'ovr'表示一对多。默认为'ovr'。
  • random_state:随机数种子,int类型。使用后可以保证随机数不会随着时间的变化而变化。默认为None。

1.4 属性

  • support_:array-like类型。所有支持向量的索引。
  • support_vectors_:array-like类型。所有的支持向量。
  • n_support_:array-like类型。每个类有多少个支持向量。
  • dual_coef_:array类型。决策函数中支持向量的系数。
  • coef_:array类型。原始问题中特征的系数,只可用于线性核中。
  • intercept_:array类型。决策函数的截距。
  • fit_status_:int类型。如果训练模型成功返回0,失败返回1并报警。
  • probA_:array类型。
  • probB_:array类型。如果probability=True,则可以估计A和B类各自在决策函数中的概率大小;如果probability=False,则返回空数组。不支持多分类问题的输出打印。

1.5 方法

  • decision_functino(X):求出样本X的决策函数。
  • fit(X,y):把数据放入模型中训练模型。
  • get_params([deep]):返回模型的参数,可以用于Pipeline中。
  • predict(X):预测样本X的分类类别。
  • score(X,y[,sample_weight]):基于报告决定系数\(R^2\)评估模型。
  • set_prams(**params):创建模型参数。

二、LinearSVC

LinearSVC模型即普通的线性可分支持向量机,即对线性不可分的数据不能使用。因为该模型不需要调参,并且速度快,所以如果非常明确数据一定是线性可分的情况下可以使用该模型,否则模型准确度反倒会变得很低,。

三、NuSVC

NuSVC模型基于SVC模型,它增加了nu参数可以控制模型的错误率。

四、LinearSVR

LinearSVR限制了只能使用线性核函数,相比较于LinearSVM不同之处在于损失函数的度量,其中它的损失函数参数loss='epsilon_insensitive'时,为类似于线性支持向量机的有松弛因子的损失度量,损失度量满足

\[-\epsilon-\xi_i\geq{y_i}-\omega\phi(x_i)-b\leq\epsilon+\xi_i
\]

而loss='squared_epsilon_insensitive',为少了松弛因子的损失度量方式,即损失度量满足

\[({y_i}-\omega\phi(x_i)-b)^2\leq\epsilon+\xi_i
\]

一般情况下使用'epsilon_insensitive'足够了。

五、SVR

SVR模型相较于LinearSVR模型可以使用核函数,既可以对线性不可分数据做回归。

六、NuSVR

NuSVR模型相较于SVR模型,增加了nu参数可以控制模型的错误率。

02-35 scikit-learn库之支持向量机的更多相关文章

  1. Scikit Learn: 在python中机器学习

    转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...

  2. scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)

    scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...

  3. 【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用

    [网络爬虫入门02]HTTP客户端库Requests的基本原理与基础应用 广东职业技术学院  欧浩源 1.引言 实现网络爬虫的第一步就是要建立网络连接并向服务器或网页等网络资源发起请求.urllib是 ...

  4. (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探

    一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...

  5. (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探

    目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...

  6. Scikit Learn

    Scikit Learn Scikit-Learn简称sklearn,基于 Python 语言的,简单高效的数据挖掘和数据分析工具,建立在 NumPy,SciPy 和 matplotlib 上.

  7. Python第三方库(模块)"scikit learn"以及其他库的安装

    scikit-learn是一个用于机器学习的 Python 模块. 其主页:http://scikit-learn.org/stable/. GitHub地址: https://github.com/ ...

  8. 【python】版本35 正则-非库-爬虫-读写xlw文件

    #交代:代码凌乱,新手一个,论坛都是高手,我也是鼓了很大勇气,发出来就是被批评和进步的   #需求:需要对某网站的某id子标签批量爬取,每个网页的id在xlw里,爬取完,再批量存取到这xlw里的第6行 ...

  9. Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)

    所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的 ...

随机推荐

  1. 基于GitLab+Jenkins的DevOps赋能实践

    随着微服务.中台架构的兴起,DevOps也变得非常关键,毕竟是一些基础设施层面的建设,如果搞好了对后面的研发工作会有很大的效率提升.关于DevOps本身的概念,网上已经非常多了,在园子里随便搜索一些都 ...

  2. C#开发BIMFACE系列24 服务端API之获取模型数据9:获取单个房间信息

    系列目录     [已更新最新开发文章,点击查看详细] 大厦建筑模型中,基本上包含多个楼层,每个楼层包含多个房间等信息.在<C#开发BIMFACE系列21 服务端API之获取模型数据6:获取单模 ...

  3. 云开发数据库VS传统数据库丨云开发101

    云开发数据库与传统数据库的不同 在小程序·云开发中,最核心的便是三大组件:数据库.云存储和云函数,从今天开始,我们将开始隔日更的专栏文章,云开发101,在第一周,我们将从最最核心的数据库开始说起. 云 ...

  4. GA,RC,Alpha,Beta,Final等软件版本名词释义

    对应上图的表格如下: 名词 说明 Alpha α是希腊字母的第一个,表示最早的版本,内部测试版,一般不向外部发布,bug会比较多,功能也不全,一般只有测试人员使用. Beta β是希腊字母的第二个,公 ...

  5. 【LeetCode】406-根据身高重建队列

    title: 406-根据身高重建队列 date: 2019-04-15 21:13:06 categories: LeetCode tags: Java容器 比较器 贪心思想 题目描述 假设有打乱顺 ...

  6. 实验吧CTF练习题---安全杂项---异性相吸解析

    ---恢复内容开始--- 实验吧安全杂项之异性相吸   地址:http://www.shiyanbar.com/ctf/1855 flag值:nctf{xor_xor_xor_biubiubiu}   ...

  7. System类入门学习

    System类 System类代表系统,系统级的很多属性和控制方法都放置在该类的内部.该类位于java.lang包.其包含一些有用的字段和方法,不能被实例化 system中包含了in.out和err三 ...

  8. Day 25 网络基础

    1:网络的重要性: 所有的系统都有网络! 我们的生活已经离不开网络. 运维生涯50%的生产故障都是网络故障! 2:教室这么多的电脑如何上网的? 网卡(mac地址) 有线(双绞线传播电信号)双向,同时收 ...

  9. Python语法基础之DataFrame

    转载自https://blog.csdn.net/lijinlon/article/details/81676859 Python数据分析首先需要进行数据清洗处理,涉及到很多DataFrame和Ser ...

  10. [Boost库] noncopyable——禁止拷贝的类

    1.noncopyable允许程序轻松地实现一个禁止拷贝的类,在头文件<boost/noncopyable.hpp>中   2.实现原理很简单:noncopyable的实现就是用了C++中 ...