6. 支持向量机(SVM)核函数
1. 感知机原理(Perceptron)
2. 感知机(Perceptron)基本形式和对偶形式实现
3. 支持向量机(SVM)拉格朗日对偶性(KKT)
4. 支持向量机(SVM)原理
5. 支持向量机(SVM)软间隔
6. 支持向量机(SVM)核函数
1. 前言
之前介绍了SVM的原理和SVM的软间隔,它们已经可以很好的解决有异常点的线性问题,但是如果本身是非线性的问题,目前来看SVM还是无法很好的解决的。所以本文介绍SVM的核函数技术,能够顺利的解决非线性的问题。
2. 多项式回归
在线性回归一节中我们有介绍线性回归解决非线性的一个方法就是多项式回归。它的原理是对于二维的不是线性的数据,我们将其映射到了五维以后,就变成了线性的数据,然后套用线性回归,达到了最终对非线性分类的目的。
3. 核函数原理
核函数的原理喝多项式的原理如出一辙,也就是说对于在低维线性不可分的数据,在映射到了高维以后,就变成线性可分的了。也就是说,对于SVM线性不可分的低维特征数据,我们可以将其映射到高维,就能线性可分,此时就可以运用前两篇的线性可分SVM的算法思想了。
我们首先回顾下SVM软间隔的模型公式:
\[
\underbrace{ min }_{\alpha}\frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_j(x_i \bullet x_j) - \sum\limits_{i=1}^{m}\alpha_i
\]
\[
s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0
\]
\[
0 \leq \alpha_i \leq C
\]
注意到上式低维特征仅仅以内积\(x_i \bullet x_j\)的形式出现,如果我们定义一个低维特征空间到高维特征空间的映射\(\phi\),将所有特征映射到一个更高的维度,让数据线性可分,我们就可以继续按前两篇的方法来优化目标函数,求出分离超平面和分类决策函数了。也就是说现在的SVM的优化目标函数变成:
\[
\underbrace{ min }_{\alpha} \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_j(\phi(x_i)\bullet\phi(x_j)) - \sum\limits_{i=1}^{m}\alpha_i
\]
\[
s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0
\]
\[
0 \leq \alpha_i \leq C
\]
看起来似乎这样我们就已经完美解决了线性不可分SVM的问题了,但是事实是不是这样呢?我们看看,假如是一个2维特征的数据,我们可以将其映射到5维来做特征的内积,如果原始空间是三维,可以映射到到19维空间,似乎还可以处理。但是如果我们的低维特征是100个维度,1000个维度呢?那么我们要将其映射到超级高的维度来计算特征的内积。这时候映射成的高维维度是爆炸性增长的,这个计算量实在是太大了,而且如果遇到无穷维的情况,就根本无从计算了。
怎么办?似乎我们刚提出了一种好的解决线性不可分的办法,接着就把自己否决了。
好吧,核函数该隆重出场了!
假设\(\phi\)是一个从低维的输入空间\(\chi\)(欧式空间的子集或者离散集合)到高维的希尔伯特空间的映射。那么如果存在函数\(K(x,z)\),对于任意\(x,z\in\chi\),都有:
\[
K(x, z) = \phi(x)\bullet\phi(z)
\]
\[
K(x, z) = (x \bullet z)^2=(\sum_{i=1}^mx_iz_i)(\sum_{j=1}^mx_jz_j)=\sum_{i=1}^m\sum_{j=1}^mx_ix_jz_iz_j
\]
\[
\phi(x)=\sum_{i=1}^m\sum_{j=1}^mx_ix_j
\]
\[
\phi(z)=\sum_{i=1}^m\sum_{j=1}^mz_iz_j
\]
\[
\phi(x)\bullet\phi(z)=\sum_{i=1}^m\sum_{j=1}^mx_ix_j\sum_{i=1}^m\sum_{j=1}^mz_iz_j=\sum_{i=1}^m\sum_{j=1}^mx_ix_jz_iz_j=K(x, z)
\]
仔细观察上面公式可以发现,\(K(x,z)\)的计算是在低维特征空间来计算的,它避免了在刚才我们提到了在高维维度空间计算内积的恐怖计算量。也就是说,我们可以好好享受在高维特征空间线性可分的红利,却避免了高维特征空间恐怖的内积计算量。
至此,我们总结下线性不可分时核函数的引入过程:
我们遇到线性不可分的样例时,常用做法是把样例特征映射到高维空间中去(如多项式回归)但是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到令人恐怖的。此时,核函数就体现出它的价值了,核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数好在它在低维上进行计算,而将实质上的分类效果(利用了内积)表现在了高维上,这样避免了直接在高维空间中的复杂计算,真正解决了SVM线性不可分的问题。
4. 核函数的介绍
4.1 线性核函数
线性核函数(Linear Kernel)其实就是我们前两篇的线性可分SVM,也就是说,线性可分SVM我们可以和线性不可分SVM归为一类,区别仅仅在于线性可分SVM用的是线性核函数。
\[
K(x, z) = x \bullet z
\]
4.2 多项式核函数
多项式核函数(Polynomial Kernel)是线性不可分SVM常用的核函数之一,公式如下:
\[
K(x,z) = (\gamma x \bullet z+r)^d
\]
4.3 高斯核函数
高斯核函数(Gaussian Kernel),在SVM中也称为径向基核函数(Radial Basis Function,RBF),它是非线性分类SVM最主流的核函数。libsvm默认的核函数就是它。公式如下:
\[
K(x, z) = exp(-\gamma||x-z||^2)
\]
4.4 Sigmoid核函数
Sigmoid核函数(Sigmoid Kernel)也是线性不可分SVM常用的核函数之一,公式如下:
\[
K(x,z) = tanh(\gamma x \bullet z+r)
\]
5. 总结
在真实的环境中,非线性问题比线性问题要多的多,如果SVM只能处理线性问题,那大大局限了它的使用范围。核函数就是这么一把利器,能够把SVM在线性回归里面的整套逻辑无缝的运用到非线性问题上,并且更好的是计算量并没有太多的提升。值得一提的是核函数并不是SVM模型发明出来的,它是一套数学的简化计算的方法原理,只要符合它的使用条件,都可以运用核函数的方式简化运算。
6. 支持向量机(SVM)核函数的更多相关文章
- [白话解析] 深入浅出支持向量机(SVM)之核函数
[白话解析] 深入浅出支持向量机(SVM)之核函数 0x00 摘要 本文在少用数学公式的情况下,尽量仅依靠感性直觉的思考来讲解支持向量机中的核函数概念,并且给大家虚构了一个水浒传的例子来做进一步的通俗 ...
- 【IUML】支持向量机SVM
从1995年Vapnik等人提出一种机器学习的新方法支持向量机(SVM)之后,支持向量机成为继人工神经网络之后又一研究热点,国内外研究都很多.支持向量机方法是建立在统计学习理论的VC维理论和结构风险最 ...
- 机器学习:Python中如何使用支持向量机(SVM)算法
(简单介绍一下支持向量机,详细介绍尤其是算法过程可以查阅其他资) 在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别.分类(异 ...
- 以图像分割为例浅谈支持向量机(SVM)
1. 什么是支持向量机? 在机器学习中,分类问题是一种非常常见也非常重要的问题.常见的分类方法有决策树.聚类方法.贝叶斯分类等等.举一个常见的分类的例子.如下图1所示,在平面直角坐标系中,有一些点 ...
- 机器学习之支持向量机—SVM原理代码实现
支持向量机—SVM原理代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9596898.html 1. 解决 ...
- 支持向量机SVM——专治线性不可分
SVM原理 线性可分与线性不可分 线性可分 线性不可分-------[无论用哪条直线都无法将女生情绪正确分类] SVM的核函数可以帮助我们: 假设‘开心’是轻飘飘的,“不开心”是沉重的 将三维视图还原 ...
- 复习支持向量机(SVM)没空看书时,掌握下面的知识就够了
支持向量机(support vector machines, SVM)是一种二类分类模型.它的基本模型是定义在特征空间上的间隔最大的线性分类器:支持向量机还包括核技巧,这使它成为实质上的非线性分类器. ...
- 一步步教你轻松学支持向量机SVM算法之案例篇2
一步步教你轻松学支持向量机SVM算法之案例篇2 (白宁超 2018年10月22日10:09:07) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...
- 一步步教你轻松学支持向量机SVM算法之理论篇1
一步步教你轻松学支持向量机SVM算法之理论篇1 (白宁超 2018年10月22日10:03:35) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...
- OpenCV支持向量机(SVM)介绍
支持向量机(SVM)介绍 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 CvSVM::train 训练一个SVM分类器, 以及用 CvSVM::predict 测试训练结果. 什么是支持向 ...
随机推荐
- mysql insert if not exists防止插入重复记录的方法(转)
MySQL 当记录不存在时插入(insert if not exists) 在 MySQL 中,插入(insert)一条记录很简单,但是一些特殊应用,在插入记录前,需要检查这条记录是否已经存在,只有当 ...
- 【Struts2】剖析Struts2中的反射技术 ValueStack(值栈)
1,Struts2框架主要组件的处理流程 在说ValueStack之前,笔者先说一说Struts2中常用的组件,struts2中常用组件有strutsPrepareAndExecuteExceptio ...
- windows Maven3.0 服务器配置搭建
搭建nexus私服,原因很简单,不必多说,本文重点说下最新版的Maven 3.0.x系列的安装步骤. 最新版的网上中文资料很少,参考后都没成功.最后在官网的英文资料中得到答案,成功搞定. 1.确定我们 ...
- Sketch Measure
Sketch Measure 让创建规范成为开发者和团队协作的乐趣 http://sketch.im/plugins/1 安装 下载安装包 双击 Sketch Measure.sketchplugin ...
- easyui datagrid加载数据的三种方式
1.加载本地数据 var obj = {"total":2,"rows":[{id:"1",name:"一"},{id: ...
- dbms_monitor开启/关闭会话跟踪
从10g开始,可以使用dbms_monitor开启/关闭会话跟踪. sql> desc dbms_monitor procedure client_id_stat_disable argumen ...
- xtrabackup 源码安装
安装依赖包:这些依赖包必须要先安装好 # yum install cmake libaio-devel ncurses-devel bzip2-devel libxml2-devel libgcryp ...
- git 放弃本地修改(转)
如果在修改时发现修改错误,而要放弃本地修改时, 一, 未使用 git add 缓存代码时. 可以使用 git checkout -- filepathname (比如: git checkout -- ...
- Oozie4.2 安装部署、以及example测试
编译: 使用的环境是:Hadoop2.6.0.Spark1.4.0.Hive0.13.1.Sqoop1.4.4 编译Oozie的命令:./mkdistro.sh -Phadoop-2 -Dhadoop ...
- The superclass "javax.servlet.http.HttpServlet" was not found 问题解决
项目中报" The superclass "javax.servlet.http.HttpServlet" was not found "这个错误,是因为缺少t ...