核函数

  在上文中我们已经了解到使用SVM处理线性可分的数据,而对于非线性数据需要引入核函数的概念它通过将数据映射到高维空间来实现线性可分。在线性不可分的情况下,支持向量机通过某种事先选择的非线性映射(核函数)将输入变量映射到一个高维特征空间,在这个空间中构造最优分类超平面。我们使用SVM进行数据集分类工作的过程首先是同预先选定的一些非线性映射将输入空间映射到高维特征空间(下图很清晰的表达了通过映射到高维特征空间,而把平面上本身不好分的非线性数据分了开来)

只要给出φ,计算出φ(x)和φ(z),再求他们的内积我们能够很容易的计算出K(X,Z),但是这样做的计算复杂度非常高,达到O(n2),我们可以得出一个φ但不去直接的计算它。

例如:其中x和z都是n维向量

  通过公式可以发现求x,z内积的平方与映射后求内积的结果是一样的,而最终的复杂度降到了O(n)。

  我们直观看这个核函数,假设φ(x)与φ(z)夹角较小,则核函数k(x,z)会比较大,相反如果φ(x)与φ(z)夹角较大,则核函数k(x,z)会比较小,比如φ(x)与φ(z)正交,则相应核函数为0,所以核函数一定程度上是φ(x)与φ(z)相似度的度量,。

  下面来介绍一种径向基函数(Radial Basis Function 简称RBF),也称作高斯核函数(Gaussian kernel)如下:

  

  如果x与z相近,则核函数趋近与1,反之x与z差值很大,则核函数趋近于0.这个核函数叫做高斯核函数,能把特征值映射到无穷维。

  进一步讨论,如果给出一个核函数,我们怎么证明他是个有效的核函数呢?

  假设我们已经给出了一个有效的核函数K,给定一个含有m个点的训练集{x1,x2,x3……xm},我们使用Kij来表示(Ki,Kj),这样组成一个核函数矩阵(kernel matrix), 显然可以得到矩阵K是一个对称矩阵:

  

  而且我们发现对于任意向量z,

  

通过公式我们了解到如果K是一个有效的核函数则对应的核函数矩阵是对称半正定矩阵(K>=0)。这是一个必要条件。而通过mercer定理它也是一个充分条件。Mercer定理表明为了证明K是有效的核函数,那么我们不用去寻找,而只需要在训练集上求出各个,然后判断矩阵K是否是半正定即可。

软间隔

  SVM算法是假定数据是线性可分的,把数据映射到高维通常能够增加线性可分的可能性,但我们不能保证这总是有效的,而由于噪声值的存在,我们也不能保证计算出来的超平面是我们想要得到的,举个例子如左图展示了一个最优间隔超平面,但是当加上噪声值后,超平面有了比较大幅度的倾斜,得到了一个间隔小很多的超平面。

为了解决线性不可分的数据,我们需要重构最优化模型如下:

  

  我们允许函数间隔小于1,而对于函数间隔小于等于1-ξ的点我们在目标函数上加上一个惩罚函数,C称作惩罚因子,称作损失函数,C代表着超平面对于噪声值的权重,保证大多数的点函数间隔大于1,C越大表明离群点对目标函数影响越大,也就是越不希望看到离群点。

  同时要调整的还有拉格朗日公式

  

  这里的都是拉格朗日乘子,然后将其看作是变量w和b的函数,分别对其求偏导,得到w和b的表达式。然后代入公式中,求带入后公式的极大值。整个推导过程比较复杂,最后得出模型的对偶形式:

  

  此时,我们发现没有了参数,与之前模型唯一不同在于又多了的限制条件。根据KKT推导出下列结论,在求拉格朗日乘子是需要使用到(SMO算法)。

  至此SVM纯原理部分介绍完毕,接下来会结合实际应用来理解SVM算法。

SVM核函数与软间隔的更多相关文章

  1. SVM中的软间隔最大化与硬间隔最大化

    参考文献:https://blog.csdn.net/Dominic_S/article/details/83002153 1.硬间隔最大化 对于以上的KKT条件可以看出,对于任意的训练样本总有ai= ...

  2. SVM支持向量机——核函数、软间隔

    支持向量机的目的是寻找一个能讲两类样本正确分类的超平面,很多时候这些样本并不是线性分布的. 由此,可以将原始特征空间映射到更高维的特征空间,使其线性可分.而且,如果原始空间是有限维,即属性数量有限, ...

  3. 支持向量机 (二): 软间隔 svm 与 核函数

    软间隔最大化(线性不可分类svm) 上一篇求解出来的间隔被称为 "硬间隔(hard margin)",其可以将所有样本点划分正确且都在间隔边界之外,即所有样本点都满足 \(y_{i ...

  4. 支持向量机(SVM)必备概念(凸集和凸函数,凸优化问题,软间隔,核函数,拉格朗日乘子法,对偶问题,slater条件、KKT条件)

    SVM目前被认为是最好的现成的分类器,SVM整个原理的推导过程也很是复杂啊,其中涉及到很多概念,如:凸集和凸函数,凸优化问题,软间隔,核函数,拉格朗日乘子法,对偶问题,slater条件.KKT条件还有 ...

  5. 支持向量机(SVM)的推导(线性SVM、软间隔SVM、Kernel Trick)

    线性可分支持向量机 给定线性可分的训练数据集,通过间隔最大化或等价地求解相应的凸二次规划问题学习到的分离超平面为 \[w^{\ast }x+b^{\ast }=0\] 以及相应的决策函数 \[f\le ...

  6. 5. 支持向量机(SVM)软间隔

    1. 感知机原理(Perceptron) 2. 感知机(Perceptron)基本形式和对偶形式实现 3. 支持向量机(SVM)拉格朗日对偶性(KKT) 4. 支持向量机(SVM)原理 5. 支持向量 ...

  7. 线性可分支持向量机与软间隔最大化--SVM(2)

    线性可分支持向量机与软间隔最大化--SVM 给定线性可分的数据集 假设输入空间(特征向量)为,输出空间为. 输入 表示实例的特征向量,对应于输入空间的点: 输出 表示示例的类别. 我们说可以通过间隔最 ...

  8. 机器学习,详解SVM软间隔与对偶问题

    今天是机器学习专题的第34篇文章,我们继续来聊聊SVM模型. 我们在上一篇文章当中推导了SVM模型在硬间隔的原理以及公式,最后我们消去了所有的变量,只剩下了\(\alpha\).在硬间隔模型当中,样本 ...

  9. 软间隔分类——SVM

    引入:1. 数据线性不可分:2. 映射到高维依然不是线性可分3. 出现噪声.如图: 对原始问题变形得到#2: 进行拉格朗日转换: 其中α和r是拉格朗日因子,均有不小于0的约束.按照之前的对偶问题的推导 ...

随机推荐

  1. ios开发图片点击放大

    图片点击放大,再次点击返回原视图.完美封装,一个类一句代码即可调用.IOS完美实现 创建了一个专门用于放大图片的类,以下为.h文件 #import <Foundation/Foundation. ...

  2. Arcgis Engine最短路径分析

    ArcEngine 最短路径分析(源码)   using System; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Geometry; using ESRI ...

  3. iOS Objective-C对象模型及应用

    前言 原创文章,转载请注明出自唐巧的技术博客. 本文主要介绍Objective-C对象模型的实现细节,以及Objective-C语言对象模型中对isa swizzling和method swizzli ...

  4. 确认某端口占用情况并结束相应进程(Windows)

    (1)确认某端口是否被占用 (2)通过查找对应的PID号,定位是哪一个进程在使用该端口 (3)通过PID号结束该进程 # 查找端口2000是否被占用C:\Users\tdcqma>netstat ...

  5. CMake学习(1)---简单程序与库

    cmake是linux平台下重要的工具,可以方便的组织makefile.之前一直在windows平台下进行软件开发,在vs2010的IDE里,只要一点run程序就能跑出结果.但是程序的编译并没有那么简 ...

  6. Learning Lua Programming (2) Lua编程基础

    开始学习Lua编程,首先从一些简单的语法开始. 一.编辑环境 下面推荐一个Lua编程的IDE,感觉是很强大的.ZeroBrane Studio,windows平台,mac平台都有.点击打开链接  官方 ...

  7. java23中设计模式

    原文来自:http://zz563143188.iteye.com/blog/1847029 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design patt ...

  8. bzoj3747

    经典题,记录每个位置对应数下次出现的位置next[i] 每个位置维护当前左端点下到这个位置的和 随着左端点的右移一位到i+1,对[i+1,next[i]-1] 的影响是-a[i], [next[i], ...

  9. bzoj3413

    SAM好题,显然我们不能与每个后缀都去算LCP 考虑对询问串每一位算贡献,先构建出逆序构建自动机,这样我们得到了原串的后缀树(parent树) 根据parent树的定义,一个节点对应字符串出现的位置对 ...

  10. ios-cocos2d游戏开发基础-CCLayer和Touch事件-开发笔记

    有时候在同一个场景里你需要多个CCLayer.你可以参照以下代码生成这样的场景 +(id) scene { CCScene* scene = [CCScene node]; CCLayer* back ...