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 测试训练结果. 什么是支持向 ...
随机推荐
- iOS-获取当前View所在的控制器
用一个分类,具体: .h #import <UIKit/UIKit.h> @interface UIView (CurrentController) /** 获取当前View的控制器对象 ...
- easyui combobox 动态加载的两种方法
reload 方法 javascript代码 //指定id 和 text 否则始终选择第一个 $('#contact_city').combobox({ valueField:'id', textFi ...
- Android 自定义可拖拽View,界面渲染刷新后不会自动回到起始位置
以自定义ImageView为例: /** * 可拖拽ImageView * Created by admin on 2017/2/21. */ public class FloatingImageVi ...
- [转] Java DecimalFormat 用法
我们经常要将数字进行格式化,比如取2位小数,这是最常见的.Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样子.下面是一个例子: importjava.text. ...
- 基础003_V7-Memory Resources
一.综述 参考ug473.pdf. 常用Memory 资源: 在IP核中,Block memory(distributed memory为CLB中的资源): 通常选用Native,而不用AXI接口: ...
- PHP文件锁定写入实例分享
PHP文件锁定写入实例解析. 原文地址:http://www.jbxue.com/article/23118.html PHP文件写入方法,以应对多线程写入,具体代码: function file_w ...
- Atitti 住房部建设指南
Atitti 住房部建设指南 1. 住房部建设的重要意义2 2. 房屋选址::首要核心要素,环境环境环境!!!2 2.1. 价格要素与地段..2 2.2. 与工作地距离,一般是半小时到一个半小时为好3 ...
- Atitit Seed-Filling种子填充算法attilax总结
Atitit Seed-Filling种子填充算法attilax总结 种子填充的原理,4联通与8联通区域的选择.. 三个队列 waitProcessPixList tempPixList Proces ...
- spring(三) spring事务操作
前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTem ...
- [svc]ansible自动化模块
ansible命令执行模块 - command模块 [执行远程命令] $ ansible n1 -m command -a 'uname -n' - raw模块 [类似于command模块.支持管道传 ...