在前面两篇我们讲到了线性可分SVM的硬间隔最大化和软间隔最大化的算法,它们对线性可分的数据有很好的处理,但是对完全线性不可分的数据没有办法。本文我们就来探讨SVM如何处理线性不可分的数据,重点讲述核函数在SVM中处理线性不可分数据的作用。

1.回顾多项式回归

如何将多项式回归转化为线性回归。

比如一个只有两个特征的p次方多项式回归的模型:

我们令x0=1,x1=x1,x2=x2,x3=x21,x4=x22,x5=x1x2 ,这样我们就得到了下式:

可以发现,我们又重新回到了线性回归,这是一个五元线性回归,可以用线性回归的方法来完成算法。对于每个二元样本特征(x1,x2),我们得到一个五元样本特征(1,x1,x2,x21,x22,x1x2),通过这个改进的五元样本特征,我们重新把不是线性回归的函数变回线性回归。

也就是说,对于二维的不是线性的数据,我们将其映射到了五维以后,就变成了线性的数据。

这给了我们启发,也就是说对于在低维线性不可分的数据,在映射到了高维以后,就变成线性可分的了。这个思想我们同样可以运用到SVM的线性不可分数据上。也就是说,对于SVM线性不可分的低维特征数据,我们可以将其映射到高维,就能线性可分,此时就可以运用前两篇的线性可分SVM的算法思想了。

2.核函数的引入

上一节我们讲到线性不可分的低维特征数据,我们可以将其映射到高维,就能线性可分。现在我们将它运用到我们的SVM的算法上。回顾线性可分SVM的优化目标函数:

注意到上式低维特征仅仅以内积xi∙xj的形式出现,如果我们定义一个低维特征空间到高维特征空间的映射ϕ(比如上一节2维到5维的映射),将所有特征映射到一个更高的维度,让数据线性可分,我们就可以继续按前两篇的方法来优化目标函数,求出分离超平面和分类决策函数了。也就是说现在的SVM的优化目标函数变成:

可以看到,和线性可分SVM的优化目标函数的区别仅仅是将内积xi∙xj替换为ϕ(xi)∙ϕ(xj)。

看起来似乎这样我们就已经完美解决了线性不可分SVM的问题了,但是事实是不是这样呢?我们看看,假如是一个2维特征的数据,我们可以将其映射到5维来做特征的内积,如果原始空间是三维,可以映射到到19维空间,似乎还可以处理。但是如果我们的低维特征是100个维度,1000个维度呢?那么我们要将其映射到超级高的维度来计算特征的内积。这时候映射成的高维维度是爆炸性增长的,这个计算量实在是太大了,而且如果遇到无穷维的情况,就根本无从计算了。

怎么办?似乎我们刚提出了一种好的解决线性不可分的办法,接着就把自己否决了。

好吧,核函数该隆重出场了!

假设ϕ是一个从低维的输入空间χ(欧式空间的子集或者离散集合)到高维的希尔伯特空间的H映射。那么如果存在函数K(x,z),对于任意x,z∈χ,都有:

那么我们就称K(x,z)为核函数。

从上面的式子乍一看还是不明白核函数怎么帮我们解决线性不可分的问题的。仔细观察上式可以发现,K(x,z)的计算是在低维特征空间来计算的,它避免了在刚才我们提到了在高维维度空间计算内积的恐怖计算量。也就是说,我们可以好好享受在高维特征空间线性可分的红利,却避免了高维特征空间恐怖的内积计算量。

至此,我们总结下线性不可分时核函数的引入过程:

我们遇到线性不可分的样例时,常用做法是把样例特征映射到高维空间中去(如上一节的多项式回归)但是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到令人恐怖的。此时,核函数就体现出它的价值了,核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数好在它在低维上进行计算,而将实质上的分类效果(利用了内积)表现在了高维上,这样避免了直接在高维空间中的复杂计算,真正解决了SVM线性不可分的问题。

3.核函数的介绍

事实上,核函数的研究非常的早,要比SVM出现早得多,当然,将它引入SVM中是最近二十多年的事情。对于从低维到高维的映射,核函数不止一个。那么什么样的函数才可以当做核函数呢?这是一个有些复杂的数学问题。这里不多介绍。由于一般我们说的核函数都是正定核函数,这里我们直说明正定核函数的充分必要条件。一个函数要想成为正定核函数,必须满足他里面任何点的集合形成的Gram矩阵是半正定的。也就是说,对于任意的xi∈χ,i=1,2,3...m, K(xi,xj)对应的Gram矩阵K=[K(xi,xj)] 是半正定矩阵,则K(x,z)是正定核函数。 

从上面的定理看,它要求任意的集合都满足Gram矩阵半正定,所以自己去找一个核函数还是很难的,怎么办呢?还好牛人们已经帮我们找到了很多的核函数,而常用的核函数也仅仅只有那么几个。下面我们来看看常见的核函数, 选择这几个核函数介绍是因为scikit-learn中默认可选的就是下面几个核函数。

3.1 线性核函数

线性核函数(Linear Kernel)其实就是我们前两篇的线性可分SVM,表达式为:

也就是说,线性可分SVM我们可以和线性不可分SVM归为一类,区别仅仅在于线性可分SVM用的是线性核函数。

3.2 多项式核函数

多项式核函数(Polynomial Kernel)是线性不可分SVM常用的核函数之一,表达式为:

其中,γ,r,d都需要自己调参定义。

3.3 高斯核函数

高斯核函数(Gaussian Kernel),在SVM中也称为径向基核函数(Radial Basis Function,RBF),它是非线性分类SVM最主流的核函数。libsvm默认的核函数就是它。表达式为:

其中,γ大于0,需要自己调参定义。

3.4 Sigmoid核函数

Sigmoid核函数(Sigmoid Kernel)也是线性不可分SVM常用的核函数之一,表达式为:

其中,γ,r都需要自己调参定义。

4. 分类SVM算法总结

引入了核函数后,我们的SVM算法才算是比较完整了。现在我们对分类SVM的算法过程做一个总结。不再区别是否线性可分。

输入是m个样本(x1,y1),(x2,y2),...,(xm,ym),,其中x为n维特征向量。y为二元输出,值为1,或者-1.

输出是分离超平面的参数w∗和b∗和分类决策函数。

算法过程如下:

至此,我们的分类SVM算是总结完毕,唯一的漏网之鱼是SMO算法,这个算法关系到,我们如何求出优化函数极小化时候的α∗,进而求出w,b,我们将在下一篇讨论这个问题。

支持原创:支持向量机原理(三)线性不可分支持向量机与核函数

机器学习算法总结之支持向量机(三)相关推荐

  1. Python机器学习算法入门教程(三)

    Python机器学习算法入门教程(三) 构建线性回归模型 一次函数 构建线性模型 假设函数图像 梯度下降求极值 导数 偏导数 梯度下降 sklearn应用线性回归算法 实现线性回归算法 准备数据 线性 ...

  2. 机器学习算法总结之支持向量机(五)

    在前四篇里面我们讲到了SVM的线性分类和非线性分类,以及在分类时用到的算法.这些都关注与SVM的分类问题.实际上SVM也可以用于回归模型,本篇就对如何将SVM用于回归模型做一个总结.重点关注SVM分类 ...

  3. #Python sklearn UCI-CTG数据做机器学习算法之GBDT(三分类)

    接触CTG数据很久了,今天突然想起来之前刚入门的时候几乎所有的机器学习模型用的数据集都是iris.horse,现在就用CTG的数据来跑一下吧,就当是帮助一些医学类机器学习算法的人提前入门. CTG的数 ...

  4. 机器学习算法总结之支持向量机(二)

    有时候不能线性可分的原因是线性数据集里面多了少量的异常点,由于这些异常点导致了数据集不能线性可分,本篇就对线性支持向量机如何处理这些异常点的原理方法做一个总结. 1.线性分SVM面临的问题 有时候本来 ...

  5. 机器学习算法实战项目—支持向量机(2)—完整版的SMO算法

    2.完整版的SMO算法 在几百个点组成的小规模数据集上,简化版SMO算法的运行是没有什么问题的,但是在更大的数据集上的运行速度就会变慢. 刚才已经讨论了简化版SMO算法,下面我们就讨论完整版的Plat ...

  6. 机器学习算法总结之支持向量机(四)

    在SVM的前三篇里,我们优化的目标函数最终都是一个关于α向量的函数.而怎么极小化这个函数,求出对应的α向量,进而求出分离超平面我们没有讲.本篇就对优化这个关于α向量的函数的SMO算法做一个总结. 1. ...

  7. 机器学习算法总结之支持向量机(一)

    1.回顾感知机模型 在感知机原理小结中,我们讲到了感知机的分类原理,感知机的模型就是尝试找到一条直线,能够把二元数据隔离开.放到三维空间或者更高维的空间,感知机的模型就是尝试找到一个超平面,能够把所有 ...

  8. 机器学习算法SVM(支持向量机)

    ①线性模型 现在来让我们做一个二分类任务假定在样本空间中可以找到一个超平面把不同类别的样本分开 //横轴是 x 1 x_1 x1​,纵轴是 x 2 x_2 x2​. x 1 x_1 x1​, x 2 ...

  9. [当人工智能遇上安全] 5.基于机器学习算法的主机恶意代码识别研究

    您或许知道,作者后续分享网络安全的文章会越来越少.但如果您想学习人工智能和安全结合的应用,您就有福利了,作者将重新打造一个<当人工智能遇上安全>系列博客,详细介绍人工智能与安全相关的论文. ...

最新文章

  1. .Net转Java自学之路—Hibernate框架篇三(查询方式)
  2. 绘图中的drawRect
  3. Hibernate中Entity实体类的写法
  4. Linux下计划任务:crontab 命令的权限说明
  5. SAP Spartacus Org Unit明细页面的工具栏按钮设计
  6. 葡萄城报表V11 SP2新版本震撼发布!
  7. JavaFX 8的弹出式编辑器
  8. NVIDIA DLI 深度学习培训 | 北京站年后即将开班
  9. hdoj 1728 逃离迷宫
  10. 3步教你学会cocos creator 物理引擎
  11. SQL Server 2005“错误1706。安装程序找不到需要的文件。请检查……”的处理办法
  12. Ardunio开发实例-ADS1115模数转换器
  13. Dexpot 虚拟桌面软件(推荐)
  14. 《正面管教》读后感_20171219
  15. 阿里邮箱备份,引发的小小插曲--2018年6月21日
  16. 支付宝支付-当面付和App支付
  17. 3t服务器装linux系统如何分区,Linux 分区、格式化3T大容量存储分区
  18. jQuery 鼠标悬停时放大图片的效果
  19. 手机android的文件怎么恢复,安卓手机office文件怎么恢复?
  20. Qt的主窗口背景设置

热门文章

  1. 百行征信大揭秘,字段中间找关系
  2. Hive中Map数据类型转String类型,其中具体内容不变
  3. 存量客户管理之提额降息
  4. [ 转载 ] Java线程面试题 Top 50 (转载)
  5. Anaconda多环境多版本python配置笔记
  6. 如何爬取了知乎用户信息,并做了简单的分析
  7. Hi!怂程见证我开博。
  8. js 去除字符串左右两边的空格
  9. Smart ORM v0.3发布(完全面向对象的轻量级ORM工具)
  10. iOS-关于一些手势冲突问题(scrollView 嵌套 tableView)