对SVM的个人理解

对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等核函数来映射到高维,甚至无穷维的空间中而变得线性可分,通过计算间隔和松弛变量等的最大化,可以对问题进行求解。当然,在求解中,还有一些数学的技巧来简化运算,例如,使用拉格朗日乘子来将原问题变换为对偶问题,可以简化计算。这些在实验中用不到,而且数学原理有点困难,就先不讲了。

时间: 2024-11-02 02:10:35

对SVM的个人理解的相关文章

对SVM的个人理解---浅显易懂

原文:http://blog.csdn.net/arthur503/article/details/19966891 之前以为SVM很强大很神秘,自己了解了之后发现原理并不难,不过,“大师的功力在于将idea使用数学定义它,使用物理描述它”,这一点在看SVM的数学部分的时候已经深刻的体会到了,最小二乘法.梯度下降法.拉格朗日乘子.对偶问题等等被搞的焦头烂额.在培乐园听了讲课之后才算比较清晰的了解了整个数学推导的来龙去脉. 1. 为什么一定要研究线性分类? 首先说一下为什么对数据集一定要说线性可分

SVM的新理解

svm导出的原始问题然后利用KKT条件,为何还需要对偶空间? 一方面,实际上KKT条件怎么得到的?KKT条件的推导是:svm原始问题->极大极小问题(先算极小这步,但极小这步中α是有约束的,不好求)->满足某些条件(如凸的等)->极小极大问题(先算极大这步,α约束条件跑到第二步,极大这步没约束)->推导出KKT条件. 另一方面,如果没有对偶空间,对于非线性问题,第一步先映射到线性,第二步再使用最大间隔线性分类.这样的时间花费很大,于是,考虑用核函数.核函数的优点就是将这两步合在一起

OpenCV支持向量机(SVM)介绍

支持向量机(SVM)介绍 目标 本文档尝试解答如下问题: 如何使用OpenCV函数 CvSVM::train 训练一个SVM分类器, 以及用 CvSVM::predict 测试训练结果. 什么是支持向量机(SVM)? 支持向量机 (SVM) 是一个类分类器,正式的定义是一个能够将不同类样本在样本空间分隔的超平面. 换句话说,给定一些标记(label)好的训练样本 (监督式学习), SVM算法输出一个最优化的分隔超平面. 如何来界定一个超平面是不是最优的呢? 考虑如下问题: 假设给定一些分属于两类

[白话解析] 深入浅出支持向量机(SVM)之核函数

[白话解析] 深入浅出支持向量机(SVM)之核函数 0x00 摘要 本文在少用数学公式的情况下,尽量仅依靠感性直觉的思考来讲解支持向量机中的核函数概念,并且给大家虚构了一个水浒传的例子来做进一步的通俗解释. 0x01 问题 在学习核函数的时候,我一直有几个很好奇的问题. Why 为什么线性可分很重要? Why 为什么低维数据升级到高维数据之后,就可以把低维度数据线性可分? What 什么是核函数,其作用是什么? How 如何能够找到核函数? 不知道大家是否和我一样有这些疑问,在后文中, 我将通过

斯坦福2014机器学习笔记九----支持向量机

一.纲要 支持向量机基础及优化目标 支持向量机的直观理解 核函数 二.内容详述 1.支持向量机基础以及优化目标 支持向量机(Support Vector Machine)与逻辑回归和神经网络相比,在学习复杂的非线性方程时提供了一种更为清晰,更为强大的方式.这部分我们就从逻辑回归一点点修改来得到本质上的SVM. 在前面的内容中,我们知道了逻辑回归的代价函数为,逻辑回归的输出函数为,把hθ(x)代入代价函数并将负号放进括号里得到 ,从这个代价函数中我们可以得到y=1和y=0时的结果 图中的曲线表示逻

数据挖掘笔试面试(7)

[校招面经]机器学习与数据挖掘常见面试题整理 part2 2018年07月25日 12:36:40 稻蛙 阅读数:150 三十.随机森林如何评估特征重要性 衡量变量重要性的方法有两种,Decrease GINI 和 Decrease Accuracy: 1) Decrease GINI: 对于回归问题,直接使用argmax(VarVarLeftVarRight)作为评判标准,即当前节点训练集的方差Var减去左节点的方差VarLeft和右节点的方差VarRight. 2) Decrease Acc

SVM(支持向量机)的一点理解

最近有被问到SVM的问题,不懂装懂,羞愧不已.百度有很多深入浅出介绍SVM的文章,我就不赘述了,这里写一点自己肤浅的理解. SVM的核心思想是把求解低维空间上的高维分类器转化为求解高维函数空间上的线性分类器.为了达到这一目的,SVM引入了三大法宝. 第一是支持向量.支持向量相当于样本数据的典型代表(或者临界样本),分类器只依赖于支持向量,简化了其复杂度. 第二是核函数.SVM通过核函数把低维空间上的样本数据的关系转化为高维函数空间的内积关系.把数据从低维空间向高维函数映射,实际上增加了模型的复杂

支持向量机通俗导论(理解SVM的三层境界)

作者:July.pluskid :致谢:白石.JerryLead 出处:结构之法算法之道blog. 前言 动笔写这个支持向量机(support vector machine)是费了不少劲和困难的,原因很简单,一者这个东西本身就并不好懂,要深入学习和研究下去需花费不少时间和精力,二者这个东西也不好讲清楚,尽管网上已经有朋友写得不错了(见文末参考链接),但在描述数学公式的时候还是显得不够.得益于同学白石的数学证明,我还是想尝试写一下,希望本文在兼顾通俗易懂的基础上,真真正正能足以成为一篇完整概括和介

机器学习(二)--- SVM的学习:理论基础理解

SVM是一种应用比较广泛的分类器,全名为Support Vector Machine,即支持向量机,在没有学习SVM之前,我对这个分类器汉字的理解是支持/向量机,学习之后,才知道原名是支持向量/机,我对这个分类器的名字理解是:通过具有稀疏性质的一系列支持向量从而得到一个比较好的分类器,这个分类器在名称里面体现为Machine.下面是我对于学习SVM理论后认为几个需要理解和掌握的知识点 函数间隔(functional margin) and 几何间隔(geometric margin) 支持向量的