支持向量机

SVM(Support Vector Machines,支持向量机)是核变换技术的代表算法之一,是一种具有精度高、运算速度快、泛化能力强等优点的统计学习新算法,其主要思想是将低维空间中的线性不可分问题,经过核变换处理,转换到高维空间,实现准确分类,遥感数据的处理方法中时常见到SVM的身影。其目标是寻找可以准确地将两个类别划分开,并同时使边际(margin)最大的超平面(hyper plane),超平面的定义公式是W^T X+b=0,其中W代表权重向量、X是训练实例、b是bias偏向。SVM最早是由Vladimir N等在1963年提出的,此后得到快速发展并衍生出硬边距的线性SVM(1964年)和软边距的非线性SVM(1995年)。

1 SVM基本概念

分类问题是机器学习的一大任务。如图1展示的是一个二分类问题,图中的黑心点和空心点,事先被标记为两类。SVM的目标是找到一个将其“完美”分类的超平面。

图1 二分类问题示意图
图1所示的二分类问题是可以找到很多个超平面将两个类别分开的,如图1中H1和H2。为了确定一个“完美”分类的超平面,而又没有办法将真实世界中的所有数据都参与测试,因此,在SVM中,提出假设:使 “间隔”最大的超平面就是 “完美”分类,最后建立模型去验证这个假设。这就是SVM的核心思想,即寻找一个使其间隔最大的超平面。

“间隔”的意思是所有数据点中到超平面的最小距离。如图2所示,H1为超平面,H2和H3为间隔边界,黑色箭头为间隔,即虚线上的点到超平面的距离。图中的红点到超平面的距离最小,是这四个点共同决定了超平面的位置,因此它们被称为“支持向量”,“支持向量机”由此而得名。

图2.3 SVM的核心思想演示图

2 线性可分性

给定一组数据{(χ_1,y_1 ),(χ_2,y_2 ),…,(χ_m,y_m )} ,其中x_i=[x_1,…,x_n]∈x ,y∈{-1,1}。若输入数据线性可分,即两类样本数据按正类和负类可以被一个超平面w^T⋅x+b=0线性分开,并且每一个样本数据点到平面的距离都大于等于1:y_i (w^T⋅x_i+b)≥1,则称该分类问题具有线性可分性,参数w,b分别表示超平面的法向量和截距。


图3 SVM 的线性可分性演示图

判别样本分类的间隔边界由两个平行的超平面来表示:

上间隔边界的上方是正类样本,下间隔边界下方是负类样本。它们之间的距离d=2min |w^T⋅x+b|/‖w‖ =2/‖w‖ 叫做边距,被间隔边界线穿过的所有样本点都是SVM的支持向量。

线性SVM的优化目标即为:

3 损失函数

现实生活中,具有线性可分性的实际问题并不是很多,如果继续使用超平面做决策边界会造成一定的分类损失。因为在线性分类中,会存在部分样本点处在两个间隔边界的中间,或者进入到其他分类区域。损失函数就是用来表示产生的分类损失的,按照数学表达的形式可以是0-1损失函数:

因为0-1损失函数不是连续函数,为了问题求解的优化,因此通常会构造代理损失。包括铰链损失函数、logistic损失函数和指数损失函数,SVM中用到的是铰链损失函数:

4 核方法

现实生活中大多数的分类问题都是非线性问题,无法用超平面解决,所以在此引入核函数,构建非线性SVM。如下图4所示,是使用多项式核函数和高斯核函数的SVM模型示意图,两种核函数都能很好的将样本分类。

图4 多项式核函数(左)和高斯核函数(右)分类示意图

核函数的选用是应用SVM的关键,一般在图像处理方面常用的核函数有四个:linear(线性核),RBF(高斯核函数),polynomial(多项式核),sigmoid核函数,如表1所示。
表1 四个核函数的选用比较

sklearn.svm包中的SVC(kernel=”linear“)和LinearSVC的区别

参考:https://stackoverflow.com/questions/45384185/what-is-the-difference-between-linearsvc-and-svckernel-linear

1、LinearSVC使用的是平方hinge loss,SVC使用的是绝对值hinge loss
(我们知道,绝对值hinge loss是非凸的,因而你不能用GD去优化,而平方hinge loss可以)

2、多分类策略:LinearSVC使用的是One-vs-All(也成One-vs-Rest),而SVC使用的是One-vs-One

3、多分类策略决定模型个数:如果分类的数量是N,则LinearSVC适合N模型,而SVC适合N(N-1)/2模型

4、对于二分类问题一般只有其中一个合适,具体问题具体对待

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

6、我们知道SVM解决问题时,问题是分为线性可分和线性不可分问题的,liblinear对线性可分问题做了优化,故在大量数据上收敛速度比libsvm快
(一句话,大规模线性可分问题上LinearSVC更快)

调参

validation_curve: 展示某一个因子,不同取值的算法的得分
通过这种曲线可以更加直观看出改变模型中的参数,有没有出现过拟合

validation_curve(estimator, X, y, param_name, param_range, groups=None, cv=None, scoring=None, n_jobs=1, pre_dispatch=‘all’, verbose=0)
estimator:实现了fit 和 predict 方法的对象
X : 训练的向量
y : 目标相对于X分类或回归
param_name:将被改变的变量名称
param_range:param_name对应的变量的取值
cv:如果传入整数,测试数据将分成对应的分数,其中一份作为cv集,其余n-1作为traning(默认为3份)

scoring文档:https://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter

分类问题常用算法之支持向量机SVM相关推荐

  1. 【SVM分类】基于matlab哈里斯鹰算法优化支持向量机SVM分类【含Matlab源码 2243期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[SVM分类]基于matlab哈里斯鹰算法优化支持向量机SVM分类[含Matlab源码 2243期] 获取代码方式2: 付费专栏Matla ...

  2. 机器学习算法の03 支持向量机SVM

    机器学习算法の03 支持向量机SVM SVM的基本概念 线性可分支持向量机 非线性支持向量机和核函数 线性支持向量机与松弛变量 LR与SVM的区别与联系 SVM的基本概念 基本概念: 支持向量机(su ...

  3. 算法模型---支持向量机(SVM)

    来源:JerryLead 支持向量机的特点 支持向量机的用途 SVM一般是用来分类的(一般先分为两类,再向多类推广) 支持向量机的适用范围 数据类型 自变量可以数值型和标称型数据 因变量是二分类,通过 ...

  4. 机器学习算法 08 —— 支持向量机SVM算法(核函数、手写数字识别案例)

    文章目录 系列文章 支持向量机SVM算法 1 SVM算法简介 1.1 引入 1.2 算法定义 2 SVM算法原理 2.1 线性可分支持向量机 2.2 SVM计算过程与算法步骤(有点难,我也没理解透,建 ...

  5. 【SVM时序预测】基于matlab鲸鱼算法优化支持向量机SVM时序数据预测【含Matlab源码 2250期】

    ⛄一.鲸鱼算法优化支持向量机SVM 1 鲸鱼优化算法 WOA是由Mirjalili和Lewis在2016年提出的一种较为新颖的元启发式群体智能优化算法,该算法模仿座头鲸的"螺旋气泡网&quo ...

  6. 【SVM分类】基于人工蜂群算法优化支持向量机SVM实现数据分类附Matlab代码

    1 简介 为确定合理的底板防水煤岩柱尺寸,减少底板突水安全事故的发生,利用支持向量机(SVM)与人工蜂群算法(ABCA)综合研究底板破坏深度问题.由于SVM训练参数惩罚因子C和核函数宽度g的选择对预测 ...

  7. 报童问题求解最大利润_第3章 第2节 处理分类问题常用算法(二)

    ●   分层抽样的适用范围 参考回答: 分层抽样利用事先掌握的信息,充分考虑了保持样本结构和总体结构的一致性,当总体由差异明显的几部分组成的时候,适合用分层抽样. ●   LR的损失函数 参考回答: ...

  8. 【SVM预测】基于人工蜂群算法优化支持向量机SVM实现数据预测附Matlab代码

    1 简介 为确定合理的底板防水煤岩柱尺寸,减少底板突水安全事故的发生,利用支持向量机(SVM)与人工蜂群算法(ABCA)综合研究底板破坏深度问题.由于SVM训练参数惩罚因子C和核函数宽度g的选择对预测 ...

  9. 【SVM分类】基于matlab鸽群算法优化支持向量机SVM分类【含Matlab源码 2242期】

    ⛄一.鸽群算法简介 基于鸽群在归巢过程中的特殊导航行为,Duan等提出了一种仿生群体智能优化算法---鸽群优化算法.在这个算法中,通过模仿鸽子在寻找目标的不同阶段使用不同导航工具这一机制,提出了2种不 ...

最新文章

  1. 玩转oracle 11g(2):创建数据库
  2. Android多线程优劣,Android 开发中用到的几个多线程解析
  3. Python入门基础教程(儿童版) [分享一本入门级教程]
  4. 【DP】LeetCode 85. Maximal Rectangle
  5. 开源html5游戏-少年行
  6. 你是如何抵制百度系列产品的?
  7. hibernate映射(学生-科目-成绩)
  8. 解决删除文件时出现“无法读取源文件或磁盘”的办法
  9. PHP利用SMTP发送邮件,测试ok
  10. 第四讲 Linux常用命令
  11. 如何在华为交换机上查询光模块DDM信息?
  12. [Excel函数] SUM函数 | SUMIF函数 | SUMIFS函数
  13. Exception 异常和自定义异常
  14. undefined reference to `timersub‘ 错误处理
  15. SpringBoot+OAuth2+Google关联登录
  16. python signal模块_Python signal 信号模块和进程
  17. 计算机系微电子专业大学排名,2017微电子专业大学排名
  18. 每日算法刷题Day7-比较字符串大小,去掉多余的空格,单词替换
  19. Unity3D播放音频数组的问题
  20. freeSWITCH + WebRTC 音视频会议

热门文章

  1. 电脑通过TCP/IP连接打印机
  2. 2.凯撒密码加密解密(C)
  3. git 本次提交合并到上次提交信息上
  4. 在Navicat中执行sql语句
  5. 20个视频播放器界面欣赏及点评
  6. 新闻集团高群耀:移动APP统治下一个十年
  7. Python 进制转化问题
  8. [转]md语法|LaTex数学公式
  9. 工具人在Excel使用中经常遇到的几个问题及解决方法的分享
  10. <DataWhale>- 语义分割 - RLE编码