对SVM的个人理解
之前以为SVM很强大很神秘,自己了解了之后发现原理并不难,不过,“大师的功力在于将idea使用数学定义它,使用物理描述它”,这一点在看SVM的数学部分的时候已经深刻的体会到了,最小二乘法、梯度下降法、拉格朗日乘子、对偶问题等等被搞的焦头烂额。在培乐园听了讲课之后才算比较清晰的了解了整个数学推导的来龙去脉。
1. 为什么一定要研究线性分类?
首先说一下为什么对数据集一定要说线性可分或线性不可分,难道不可以非线性分开吗?想要非线性分开当然可以,实际上SVM只是把原来线性不可分的数据点映射到一个新的空间,转换为在新空间中线性可分数据来进行分类的。如果返回到原来数据的空间中,其实还是非线性分开的。但是,那为什么不直接在原数据空间中进行非线性分开,而是非要转到新的空间进行线性分开呢?首先,非线性分开比线性分开要复杂很多。线性分开只要一条直线或一个平面之类的就可以了,可以说是曲线中最简单的表现形式。而非线性分开的情况就多了去了。仅就二维空间而言,曲线、折线、双曲线、圆锥曲线、波浪线,以及毫无规律的各种其他曲线太多,没有办法进行统一的处理。即便能够针对某一个具体问题处理得到了非线性分类结果,也无法很好的推广到其他情形,这样,每针对一个具体问题就要数学家专门来建个曲线模型,太麻烦而且也没有那么多时间精力。因此,采用线性分类一是因为它简单,性质很容易研究透彻;二是因为它推广能力强,研究透了之后,其他所有问题都迎刃而解,无需建立其他模型。所以,虽然SVM多了将原始数据映射到新空间这一步骤,看起来增加了工作量,而且如何去寻找新的映射空间看着也不是很容易,但是,总体来说,研究透了之后就会比其他方法省很多力气。
2. SVM的思想是什么?
2.1 硬间隔支持向量机
SVM中最关键的思想之一就是引入和定义了“间隔”这个概念。这个概念本身很简单,以二维空间为例,就是点到分类直线之间的距离。假设直线为y=wx+b,那么只要使所有正分类点到该直线的距离与所有负分类点到该直线的距离的总和达到最大,这条直线就是最优分类直线。这样,原问题就转化为一个约束优化问题,可以直接求解。这叫做硬间隔最大化,得到的SVM模型称作硬间隔支持向量机。
2.2 软间隔支持向量机
但是新问题出现了,在实际应用中,我们得到的数据并不总是完美的线性可分的,其中可能会有个别噪声点,他们错误的被分类到了其他类中。如果将这些特异的噪点去除后,可以很容易的线性可分。但是,我们对于数据集中哪些是噪声点却是不知道的,如果以之前的方法进行求解,会无法进行线性分开。是不是就没办法了呢?假设在y=x+1直线上下分为两类,若两类中各有对方的几个噪点,在人的眼中,仍然是可以将两类分开的。这是因为在人脑中是可以容忍一定的误差的,仍然使用y=x+1直线分类,可以在最小误差的情况下进行最优的分类。同样的道理,我们在SVM中引入误差的概念,将其称作“松弛变量”。通过加入松弛变量,在原距离函数中需要加入新的松弛变量带来的误差,这样,最终的优化目标函数变成了两个部分组成:距离函数和松弛变量误差。这两个部分的重要程度并不是相等的,而是需要依据具体问题而定的,因此,我们加入权重参数C,将其与目标函数中的松弛变量误差相乘,这样,就可以通过调整C来对二者的系数进行调和。如果我们能够容忍噪声,那就把C调小,让他的权重降下来,从而变得不重要;反之,我们需要很严格的噪声小的模型,则将C调大一点,权重提升上去,变得更加重要。通过对参数C的调整,可以对模型进行控制。这叫做软间隔最大化,得到的SVM称作软间隔支持向量机。
2.3 非线性支持向量机
之前的硬间隔支持向量机和软间隔支持向量机都是解决线性可分数据集或近似线性可分数据集的问题的。但是如果噪点很多,甚至会造成数据变成了线性不可分的,那该怎么办?最常见的例子是在二维平面笛卡尔坐标系下,以原点(0,0)为圆心,以1为半径画圆,则圆内的点和圆外的点在二维空间中是肯定无法线性分开的。但是,学过初中几何就知道,对于圆圈内(含圆圈)的点:x^2+y^2≤1,圆圈外的则x^2+y^2>1。我们假设第三个维度:z=x^2+y^2,那么在第三维空间中,可以通过z是否大于1来判断该点是否在圆内还是圆外。这样,在二维空间中线性不可分的数据在第三维空间很容易的线性可分了。这就是非线性支持向量机。
这是SVM非常重要的思想。对于在N维空间中线性不可分的数据,在N+1维以上的空间会有更大到可能变成线性可分的(但并不是一定会在N+1维上线性可分。维度越高,线性可分的可能性越大,但并不完全确保)。因此,对于线性不可分的数据,我们可以将它映射到线性可分的新空间中,之后就可以用刚才说过的硬间隔支持向量机或软间隔支持向量机来进行求解了。这样,我们将原问题变成了如何对原始数据进行映射,才能使其在新空间中线性可分。在上面的例子中,通过观察可以使用圆的方程来进行映射,但在实际数据中肯定没有这么简单。如果都可以观察出规律来,那就不需要机器来做SVM了。。
实际中,对某个实际问题函数来寻找一个合适的空间进行映射是非常困难的,幸运的是,在计算中发现,我们需要的只是两个向量在新的映射空间中的内积结果,而映射函数到底是怎么样的其实并不需要知道。这一点不太好理解,有人会问,既然不知道映射函数,那怎么能知道映射后在新空间中的内积结果呢?答案其实是可以的。这就需要引入了核函数的概念。核函数是这样的一种函数:仍然以二维空间为例,假设对于变量x和y,将其映射到新空间的映射函数为φ,则在新空间中,二者分别对应φ(x)和φ(y),他们的内积则为<φ(x),φ(y)>。我们令函数Kernel(x,y)=<φ(x),φ(y)>=k(x,y),可以看出,函数Kernel(x,y)是一个关于x和y的函数!而与φ无关!这是一个多么好的性质!我们再也不用管φ具体是什么映射关系了,只需要最后计算Kernel(x,y)就可以得到他们在高维空间中的内积,这样就可以直接带入之前的支持向量机中计算!真是妈妈再也不用担心我的学习了。。
得到这个令人欢欣鼓舞的函数之后,我们还需要冷静一下,问问:这个Kernel函数从哪来?他又是怎么得到的?真的可以解决所有映射到高维空间的问题吗?
这个问题我试着回答一下,如果我理解对的话。核函数不是很好找到,一般是由数学家反向推导出来或拼凑出来的。现在知道的有多项式核函数、高斯核函数、字符串核函数等。其中,高斯核函数对应的支持向量机是高斯径向基函数(RBF),是最常用的核函数。
RBF核函数可以将维度扩展到无穷维的空间,因此,理论上讲可以满足一切映射的需求。为什么会是无穷维呢?我以前都不太明白这一点。后来老师讲到,RBF对应的是泰勒级数展开,在泰勒级数中,一个函数可以分解为无穷多个项的加和,其中,每一个项可以看做是对应的一个维度,这样,原函数就可以看做是映射到了无穷维的空间中。这样,在实际应用中,RBF是相对最好的一个选择。当然,如果有研究的话,还可以选用其他核函数,可能会在某些问题上表现更好。但是,RBF是在对问题不了解的情况下,对最广泛问题效果都很不错的核函数。因此,使用范围也最广。
这样,对于线性不可分的数据,也可以通过RBF等核函数来映射到高维,甚至无穷维的空间中而变得线性可分,通过计算间隔和松弛变量等的最大化,可以对问题进行求解。当然,在求解中,还有一些数学的技巧来简化运算,例如,使用拉格朗日乘子来将原问题变换为对偶问题,可以简化计算。这些在实验中用不到,而且数学原理有点困难,就先不讲了。
对SVM的个人理解的更多相关文章
- SVM问题再理解与分析——我的角度
SVM问题再理解与分析--我的角度 欢迎关注我的博客:http://www.cnblogs.com/xujianqing/ 支持向量机问题 问题先按照几何间隔最大化的原则引出他的问题为 上面的约束条件 ...
- 对SVM的个人理解---浅显易懂
原文:http://blog.csdn.net/arthur503/article/details/19966891 之前以为SVM很强大很神秘,自己了解了之后发现原理并不难,不过,“大师的功力在于将 ...
- 机器学习:SVM(基础理解)
一.基础理解 1)简介 SVM(Support Vector Machine):支撑向量机,既可以解决分类问题,又可以解决回归问题: SVM 算法可分为:Hard Margin SVM.Soft Ma ...
- 菜鸟之路——机器学习之SVM分类器学习理解以及Python实现
SVM分类器里面的东西好多呀,碾压前两个.怪不得称之为深度学习出现之前表现最好的算法. 今天学到的也应该只是冰山一角,懂了SVM的一些原理.还得继续深入学习理解呢. 一些关键词: 超平面(hyper ...
- SVM: 直观上理解大间距分类器
在SVM中,增加安全的间距因子 那么增加了这个间距因子后,会出现什么样的结果呢,我们将C设置为很大(C=100000) SVM决策边界 当我们将C设置得很大进,要想SVM的cost function最 ...
- svm核函数的理解和选择
https://blog.csdn.net/leonis_v/article/details/50688766 特征空间的隐式映射:核函数 咱们首先给出核函数的来头:在上文中,我们已经了解到了S ...
- SVM的新理解
svm导出的原始问题然后利用KKT条件,为何还需要对偶空间? 一方面,实际上KKT条件怎么得到的?KKT条件的推导是:svm原始问题->极大极小问题(先算极小这步,但极小这步中α是有约束的,不好 ...
- SVM的推导和理解
主要记录了SVM思想的理解,关键环节的推导过程,主要是作为准备面试的需要. 1.准备知识-点到直线距离 点\(x_0\)到超平面(直线)\(w^Tx+b=0\)的距离,可通过如下公式计算: \[ d ...
- 一步步教你轻松学支持向量机SVM算法之理论篇1
一步步教你轻松学支持向量机SVM算法之理论篇1 (白宁超 2018年10月22日10:03:35) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...
随机推荐
- CountDownLatch(倒计时计数器)使用说明
方法说明: public void countDown() 递减锁存器的计数,如果计数到达零,则释放所有等待的线程.如果当前计数大于零,则将计数减少.如果新的计数为零,出于线程调度目的, ...
- 四种方式写按钮点击事件和Android 中常用的布局
1.匿名内部类的方式 2.创建一个类实现onClickListener,实现onClick方法,设置控件点击时传一个类的对象 3.让当前类实现onClickListener,设置控件点击事件时传递一个 ...
- 移动端rem布局的适配mixin【转藏】
/*================================================================ 以下为基于ip5 宽度320做的适配,标准html{font-si ...
- C#垃圾回收机制详解
一.托管代码/非托管代码 C#代码通过C#编译器编译成程序集,程序集由微软中间语言组成,CLR会为程序集开辟一个应用程序域,程序集就是运行在这个应用程序域里面的,应用程序域是相互独立的,互不影响. 托 ...
- Think in java浏览一
Think in java作为java语言的圣经书籍之一,几乎成为每个java程序员必看的书籍,不看都不好意思说自己是java程序员,不过一般也不说自己认真看了,就说自己翻了翻.作为写安卓的,当然也要 ...
- 在 APK 中找不到对应的 securityguard***.so 文件或者 so 文件载入出错
1.解压查看你的apk是不是将so打进去了,如果没有打进入查看自己的jnilibs是否指定 2.查看手机是否是64的手机.因为百川的安全包没有64的支持,所以目前是以兼容包的形式给的包.如果第三方有6 ...
- springmvc中url-pattern的大坑
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springfr ...
- rc4加密
function RC4(Expression, Password: string): string; var RB : array[0..255] of Integer; X, Y, Z: long ...
- 在 ServiceModel 客户端配置部分中,找不到引用协定“PmWs.PmWebServiceSoap”的默认终结点元素
System.Exception: ConfigManager.LoadConfigurationFromDb ServiceFactory.GetPmWebService 在 ServiceMode ...
- 一、Maven环境搭建(windows 环境)
所需工具 : JDK 1.7 java 环境 Maven 3.3.9 下载最新版本 Windows 7 注 Maven 3.2 要求 JDK 1.6 或以上版本, 而 Maven 3.0/3. ...