本文抛开复杂的公式不谈,仅谈谈对支持向量机的理解,看了一些写的很好的博客,决定把自己的理解也记录下来。
一、支持向量机的引入
在生活中有很多事情一眼就能知道答案,自然不必用牛刀杀鸡。但是有些难题并不是很容易就能得出答案,就拿我们耳熟能详的数据划分来说,对于线性可分的数据,一条直线一个平面就能够很好的完成划分任务。可惜并不是所有的数据都是这么的友好,对于一些非线性可分的数据,要用曲线、折线、双曲线、圆锥曲线、波浪线,以及毫无规律的各种其他曲线来进行数据划分。感知机等等相对简单的模型就搞不定了,但是曲线太多,不便于统一操作,也很难推广到其他情形。支持向量机的出现就很好解决了这些难题,实际上,支持向量机是把线性不可分的数据投影到一个新的空间,转换为在新空间里面线性可分的数据从而来进行分类。
二、支持向量机的分类
通过上面的引入,我觉得支持向量机就是“最大间隔分类器”,其最关键的思想是引入并定义了“间隔”这个概念。如何用数学语言来表达这抽象的几何意义呢?
svm几何意义到数学求解凸优化
书上有些笔记,就直接拍照过来用了,可忽略中间的那个图。总体浏览顺序为从左到右从上到下,注意中间有虚线隔开。
1、硬间隔支持向量机
对于线性可分的数据来说,我们期望找到一条直线将这些数据完美的划分开来。我们不妨假设直线为 y = w*x + b,那么只要所有正分类的点到该直线的距离与所有负分类点到该直线的最小距离之和最大,那么该直线就是最优分类直线。这样就把上述原问题转换为了我们熟悉的约束优化问题,所得到的模型称作硬间隔支持向量机。
2、软间隔支持向量机
我们期望拿到的数据并非一直完美的线性可分,一堆数据中总有那么几颗老鼠屎。总有些误分类的点,去除这些误分类点之后,我们很容易用硬间隔支持向量机的模型来求解问题。但是问题在于我们不知道那些点是误分类的啊。换个角度想想,我们人类面对大量的数据时,会选择性的忽视一小撮错误数据,因为人脑中是可以容忍一些错误的。同样的道理,我们也可以在支持向量机中引入误差的概念,我们美曰其名为“松弛变量”。通过加入松弛变量,在原距离函数中需要加入新的松弛变量所带来的误差,这样,最终的优化目标函数变成了两个部分组成:距离函数和松弛变量误差。这两个部分的重要程度并不是相等的,而是需要依据具体问题而定的,因此,我们加入“惩罚参数C”,将其与目标函数中的松弛变量误差相乘,这样,就可以通过调整C来对二者的系数进行调和。如果我们能够容忍噪声,那就把C调小,让他的权重降下来,从而变得不重要;反之,我们需要很严格的噪声小的模型,则将C调大一点,权重提升上去,变得更加重要。总的来说就是:C值大,松弛变量变小,所允许的误差就小,从而得到尽可能正确分类的样本;C值大,松弛变量大,允许的误差就大,错误分类的样本就多。通过对参数C的调整,可以对模型进行控制,这样得到的模型称作软间隔支持向量机。
3、非线性支持向量机
最令人头疼的数据终于来了,误分类点多到人类都无法容忍,这些数据对上述所提到的两种支持向量机软硬不吃。这时候就到动用我们的核武器了,不,是核函数。我们必须要知道:维度越高,数据线性可分的可能性就越大。因此,对于线性不可分的数据,我们可以将它映射到线性可分的新空间中,然后就可以用刚才说过的硬间隔支持向量机或软间隔支持向量机来进行求解了。实际中,对某个实际问题函数来寻找一个合适的空间进行映射是非常困难的,幸运的是,在计算中发现,我们需要的只是两个向量在新的映射空间中的内积结果,而映射函数到底是怎么样的其实并不需要知道。这一点不太好理解,有人会问,既然不知道映射函数,那怎么能知道映射后在新空间中的内积结果呢?答案其实是可以的。这就是核函数的强大所在了,核函数是这样的一种函数:仍然以二维空间为例,假设对于变量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等核函数来映射到高维,甚至无穷维的空间中而变得线性可分,通过计算间隔和松弛变量等的最大化,可以对问题进行求解,这样得到的模型称作非线性支持向量机。
当然,在求解中,还有一些数学的技巧来简化运算,例如,使用拉格朗日乘子法来将原问题变换为对偶问题,可以简化计算。
对偶转换
对于min(max) >= max(min),可以通过“鸡头凤尾”来形象理解。
对于支持向量机,现在理解的一点点是皮毛中的皮毛,以后再回过头来消化。
网友评论