原理

分类学习最基本的思想就是基于训练集

在样本空间中找到一个划分超平面,将不同类别的样本区分开。但是事实上,能将训练样本划分开的超平面可能有很多,如下图所示,我们的任务就是寻找到最优的划分超平面。

划分超平面的线性方程可以表达为:

其中

为法向量,决定了超平面的方向;
为位移项,决定了超平面与原点之间的距离。划分超平面可由法向量
和位移项
确定,我们将其记为

样本空间中任意点

到超平面的

的距离可写为:

假设划分超平面能将样本正确分类,那么即位于超平面两侧的分别为正例和负例,即:

我们构建如下模型:

其中距离超平面最近的几个训练点正好使上式等号成立,它们被称为“支持向量”support vector,任意两个异类支持向量到超平面的距离之和为:

它也被称为“间隔”margin。支持向量与间隔的含义如下图所示:

支持向量机模型

为了找到合适的划分超平面使得产生的分类结果是最鲁棒的(即对未见示例的泛化能力最强),我们令划分超平面的“间隔”最大化:

等价于:

参数求解

对上式使用拉格朗日乘子法可以得到:

求偏导为零后:

将求完偏导后的值代入原方程后可以消去

,得到对偶问题:

通过对偶问题解出

后,求出
的值即可得到模型:

上述过程需要满足KKT(Karush-Kuhn-Tucker)条件,即要求:

从而对于任意的训练样本

总有
或者
。若
,则模型中不会出现该样本,也就不会对
有影响;若
,则必然有
,所对应的样本点正好在最大间隔边界上,是一个支持向量。

这说明:训练完成后,大部分的训练样本不需要保留,最终模型只与支持向量有关

SMO算法

上面我们得到支持向量机的对偶问题:

这本身是一个二次规划问题,可以利用通用的二次规划算法来求解。但是因为该问题的规模正比于训练样本数,这会在实际任务中造成很大的开销。为此人们通过利用问题本身的特性,提出了SMO(Sequential Minimal Optimization)算法:

SMO算法:基本思路是固定

之外的所有参数,然后求
上的极值。由于存在约束,因此如果固定
之外的其他参数,那么
可直接由其他参数导出。因此

SMO每次选择两个变量

并固定其他参数,在参数初始化后不断执行如下两个步骤直至收敛:
  1. 选取一对需更新的

  2. 固定
    以外的其他参数,求解规划问题获得更新后的

核函数

在前面的推导过程中,我们假设训练样本是线性可分的,即存在一个划分超平面能将训练样本正确分类,但在现实任务中,原始样本空间可能并不存在一个能正确划分两类样本的超平面。如下图左侧的图就是非线性可分的。
假若我们能将样本从原始空间映射到一个更高纬度的特征空间,使得样本在该特征空间内线性可分,那么支持向量机就可以继续使用。比如下图右侧的图就是将原始的二维空间映射到一个合适的三维空间,从而找到了合适的划分超平面。

映射到高维度的支持向量机模型可以表示为:

其对偶问题是:

其中

是样本
映射到高维空间后的内积。直接计算高维空间的内积是比较困难的,为了避开这个障碍,我们可以设想这么一个函数在原始样本空间即可计算在高维特征空间的内积。

最终的模型可以写成:

上述我们提到的

就是核函数

kernel function
我们希望样本在特征空间中是线性可分的,因此合适的特征空间对支持向量机的性能至关重要,然后在不知道特征映射的形式时,我们并不知道什么样的核函数是最合适的,而核函数也仅是隐式地定义了这个特征空间。因此核函数的选择是支持向量机模型的最大影响因素。
常用的核函数包括了线性核、多项式核、高斯核、拉普拉斯核和Sigmoid核等。如下表所示:

另外,不同核函数经过组合后也可形成新的核函数,比如:

  1. 为核函数,则对于任意正数
    ,其线性组合
    也是核函数
  2. 为核函数,则核函数的直积也是核函数
  3. 为核函数,则对于任意函数
    ,
    也是核函数

软间隔与正则化

前面我们讨论的支持向量机模型都是假设存在一个超平面能将不同类别的训练样本完全分割开的,然而现实中很难确定合适的核函数是的训练样本在特征空间中完全线性可分。即使恰好找到了某个核函数使得训练集在特征空间中线性可分,也很难断定这个结果不是由过拟合所造成的。
解决该问题的方法即允许支持向量机在一些样本上出错。为此,要引入“软间隔”soft margin的概念,如下图所示:

软间隔允许某些样本不满足约束:

在最大化间隔的时候,不满足约束的样本应该尽可能的少,于是优化目标可以改写为:

其中

一个大于
的常数,
是“
”损失函数,但是该损失函数数学性质不佳(非凸,非连续),下面我们给出常用的三种替代损失函数:

Reference

[1] 机器学习

支持向量所在超平面方程_深入浅出机器学习算法:支持向量机相关推荐

  1. 支持向量所在超平面方程_支持向量机通俗导论:理解SVM的三层境界(一)

    前言 动笔写这个支持向量机(support vector machine)是费了不少劲和困难的,原因很简单,一者这个东西本身就并不好懂,要深入学习和研究下去需花费不少时间和精力,二者这个东西也不好讲清 ...

  2. 支持向量所在超平面方程_如何用python绘制超平面支持向量机?

    一个完整的例子 import numpy as np import matplotlib.pyplot as plt def __intersect(rect, line): l = [] xmin, ...

  3. [机器学习算法]支持向量机SVM原理简介

    一.问题和超平面描述 给定训练集 分类学习最基本的想法就是基于训练集在样本空间中找到一个划分超平面,将不同类别的样本分开,但能将训练样本分开的划分超平面可能有很多,如下图所示: 直观来看,应该去找位于 ...

  4. 支持向量回归预测怎么做_机器学习如何在油气开发预测中发挥作用?

    机器学习主要作用是分类.回归.降维和聚类.在开发指标预测中主要是回归和降维.机器学习的主要理论基础就是使目标函数最小化,而目标函数主要由经验风险和结构风险组成.经验风险就是预测值和真实观测值的差异,结 ...

  5. etc的常见算法_运用机器学习算法研究城市形态与户外温度之间的相关性

    随着城市化进程以及气候变化的加剧,城市正经历着频率更高.强度更大.持续时间更长的热浪天气.目前学者提出许多研究不同尺度气候问题的方法,其中最常用的是参数回归方法,如最小二乘法回归模型(OLS,ordi ...

  6. 机器学习 线性回归算法_探索机器学习算法简单线性回归

    机器学习 线性回归算法 As we dive into the world of Machine Learning and Data Science, one of the easiest and f ...

  7. 机器学习算法如何应用于控制_将机器学习算法应用于NBA MVP数据

    机器学习算法如何应用于控制 A step-by-step tutorial in R R中的分步教程 1引言 (1 Introduction) This blog makes up the Machi ...

  8. 机器学习经典算法实践_服务机器学习算法的系统设计-不同环境下管道的最佳实践

    机器学习经典算法实践 "Eureka"! While working on a persistently difficult-to-solve problem, you disco ...

  9. python 支持向量机预测结果相同_Python机器学习算法 — 支持向量机(SVM)

    SVM--简介 支持向量机(Support Vector Machines)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题来求解. 在 ...

最新文章

  1. 解决Ubuntu安装依赖问题
  2. 【37.38%】【codeforces 722C】Destroying Array
  3. a=a+b与a+=b有什么区别吗?
  4. KB929828:在Vista中使用Sysprep /generalize时出错
  5. Go 语言的%d,%p,%v等占位符的使用
  6. VueX的store的简单使用心结
  7. php mysql 排名_mysql中如何实现排名
  8. 2021-2025年中国电影行业市场供需与战略研究报告
  9. 如何批量下载《大数据分析实用技术案例》的学习视频
  10. SpringBoot学习---SpringSecurity与Shiro
  11. springboot开发者工具包,自动监听内容改变,自动更新重启
  12. wps带阴影的边框怎么设置_win7系统下wps阴影边框如何设置
  13. 使用Sbo用户自定义业务对象
  14. Gos —— 加载内核
  15. 欢迎火狐FireFox正式进入中国
  16. 计算机硬件组装什,计算机硬件组装的步骤详解
  17. Openwrt Lede koolshare固件下屏蔽固定MAC地址以及屏蔽某些网站
  18. 《俊红的数据分析之路》笔记
  19. C#的ListBox加入隐含对象处理手法与Delphi的对比
  20. 第一章测试概述04-软件质量

热门文章

  1. 问题处理:qt.qpa.plugin: Could not find the Qt platform plugin “cocoa“ in ““
  2. cusparseScsrsv_analysis函数导致内存暴涨问题
  3. ASN.1编解码:asn1c、enber和unber
  4. Linux内核:VFIO 内核文档 (实例,API,bus驱动API)
  5. python time库_python--time库的使用
  6. Flink的窗口聚合操作(Time\Count Window)
  7. python的基础 杂项(十四)
  8. oracle生成顺序编号,Oracle排序以及序号的输出 | 学步园
  9. java开发技术心得_Java开发核心技术面试心得分析
  10. win10 mysql5.7.21_win10下mysql5.7.21解压版安装教程