在浏览本篇博客之前,最好先查看一下我写的还有一篇文章机器学习之初识SVM(点击可查阅哦)。这样能够更好地为了结以下内容做铺垫!
支持向量机学习方法包括构建由简至繁的模型:线性可分支持向量机、线性支持向量机及非线性支持向量机。当训练数据线性可分时。通过硬间隔最大化,学习一个线性的分类器,即线性可分支持向量机。又称为硬间隔支持向量机;当训练数据近似线性可分时。通过软间隔最大化,也学习一个线性的分类器,即线性支持向量机,又称为软间隔支持向量机;当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。
给定训练样本集
可是正例如以下图所看到的。能将训练样本分开的超平面可能有非常多。那我们应该选择哪一个呢?
直观上看,我们应该去找位于两类训练样本“正中间”的超平面,也就是样本点与直线的距离最大那条直线。由于该超平面对训练样本局部扰动的容忍性最好。
在样本空间中,超平面可用例如以下方程来描写叙述:
当中
显然超平面可由法向量w和位移b唯一确定。
一般来说,一个点距离超平面的距离d的大小能够表示分类预測的确信程度。在超平面
当中。
当点A表示某一实例
当点A表示某一实例
点A与超平面的距离记作
一般地。点
公式(4)也被称为超平面关于样本点
最大间隔分离超平面
如上图所看到的,距离超平面近期的这几个训练样本点被称为支持向量。两个异类支持向量(即分别位于超平面两側的点)到超平面的距离之和为
上面(5)的d称为间隔(margin)。
要求得最大间隔(即最大化
显然。为了最大化间隔,仅需最大化
这就是支持向量机的基本模型。
由于如今的目标函数是二次的。约束条件是线性的。所以它是一个凸二次规划问题。这个问题能够用现成的QP (Quadratic Programming) 优化包进行求解。
一言以蔽之:在一定的约束条件下,目标最优,损失最小。
此外,由于这个问题的特殊结构,还能够通过拉格朗日对偶性(Lagrange Duality)变换到对偶变量 (dual variable) 的优化问题,即通过求解与原问题等价的对偶问题(dual problem)得到原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法,这样做的长处在于:一者对偶问题往往更easy求解。二者能够自然的引入核函数,进而推广到非线性分类问题。
那什么是拉格朗日对偶性呢?简单来讲,通过给每一个约束条件加上一个拉格朗日乘子(Lagrange multiplier)。定义拉格朗日函数(通过拉格朗日函数将约束条件融合到目标函数里去,从而仅仅用一个函数表达式便能清楚的表达出我们的问题):
然后令
easy验证,当某个约束条件不满足时,比如
因此,在要求约束条件得到满足的情况下最小化
详细写出来,目标函数变成了:
这里用表示
交换以后的新问题是原始问题的对偶问题,这个新问题的最优值用
并且有
换言之。之所以从minmax的原始问题
以下能够先求L 对w、b的极小,再求L 对的极大。
对偶问题求解的3个步骤:
1)、首先固定,要让 L 关于 w 和 b 最小化,我们分别对w,b求偏导数。即令 ∂L/∂w 和 ∂L/∂b 等于零:
将以上结果代入之前的L:
得到:
有读者可能会问上述推导过程怎样而来?说实话,其详细推导过程是比較复杂的。例如以下图所看到的:
最后,得到:
“倒数第4步”推导到“倒数第3步”使用了线性代数的转置运算,由于
“倒数第3步”推导到“倒数第2步”使用了(a+b+c+…)(a+b+c+…)=aa+ab+ac+ba+bb+bc+…的乘法运算法则。最后一步是上一步的顺序调整。
从上面的最后一个式子,我们能够看出,此时的拉格朗日函数仅仅包括了一个变量,那就是
2)求对
这样,求出了
3)在求得L(w, b, a) 关于 w 和 b 最小化。以及对
线性支持向量机以及软间隔最大化
假设给定一个特征空间上的训练数据集
假设训练数据集不是线性可分的。通常情况是。训练数据中有一些特异点,将这些特异点去除以后。剩下的大部分的样本点组成的集合是线性可分的。
线性不可分意味着某些样本点
同一时候。对于每一个松弛变量
这里,C>0称为惩处參数,一般由应用问题决定,C值大时对误分类的惩处增大。
C值小时对误分类的惩处减小。此时。最小化目标函数有两层含义:使
有了上面的思路,上面问题变成例如以下凸二次规划问题(原始优化问题):
上面的对偶问题是:
原始优化问题的拉格朗日函数是:
到眼下为止,我们的 SVM 还比較弱,仅仅能处理线性的情况。以下我们将引入核函数,进而推广到非线性分类问题。
非线性支持向量机和核函数
非线性分类问题是指通过利用非线性模型才干非常好地进行分类的问题。先看一个样例:
由上图可见。无法用直线(线性模型)将正负实例正确分开。可是我们却能够用一条椭圆双曲线(非线性模型)将他们正确分开。
非线性问题往往不好求解,我们能够将样本从原始空间映射到一个更高维的特征空间。使得样本在这个特征空间内线性可分。
正如上面的样例。通过将原始的二维空间映射到一个合适的三维空间,就能找到一个合适的超平面。
上面的样例说明,用线性分类方法求解非线性分类问题分为两步:首先使用一个变换将原来的空间的数据映射到新空间;然后在新空间里用线性分类学习方法从训练数据集中学习分类模型。核技巧就是属于这个方案。
令
相似地,可得到:
其对偶问题是:
我们注意到上面式子的计算涉及到了就算
然后用上面的式子。我们就不必直接去计算高维甚至无穷维特征空间的内积,于是,我们能够将公式改写成例如以下:
求解后,得到
这里的
那么经常使用的核函数都有什么呢?
1、线性核是最简单的核函数,核函数的数学公式例如以下:
2、多项式核实一种非标准核函数,它非常适合于正交归一化后的数据,其详细形式例如以下:
这个核函数是比較好用的,就是參数比較多,可是还算稳定。
3、这里说一种经典的鲁棒径向基核。即高斯核函数,鲁棒径向基核对于数据中的噪音有着较好的抗干扰能力。其參数决定了函数作用范围。超过了这个范围,数据的作用就“基本消失”。
高斯核函数是这一族核函数的优秀代表,也是必须尝试的核函数。其数学形式例如以下:
尽管被广泛使用。可是这个核函数的性能对參数十分敏感,以至于有一大把的文献专门对这种核函数展开研究,相同。高斯核函数也有了非常多的变种,如指数核,拉普拉斯核等。
4、指数核函数就是高斯核函数的变种,它仅仅是将向量之间的L2距离调整为L1距离,这样修改会对參数的依赖性减少,可是适用范围相对狭窄。其数学形式例如以下:
5、拉普拉斯核全然等价于指数核,唯一的差别在于前者对參数的敏感性减少。也是一种径向基核函数。
6、Sigmoid 核来源于神经网络,如今已经大量应用于深度学习,是当今机器学习的宠儿,它是S型的,所以被用作于“激活函数”。关于这个函数的性质能够说好几篇文献,大家能够随便找一篇深度学习的文章看看。
7、 二次有理核完全然全是作为高斯核的替代品出现。假设你认为高斯核函数非常耗时,那么最好还是尝试一下这个核函数,顺便说一下,这个核函数作用域虽广,可是对參数十分敏感,慎用!
。。。
此外,还可通过函数组合得到,比如:
1.若
也是核函数;
2.若
也是核函数。
3.若
也是核函数;
核函数的选择
线性核:主要用于线性可分的情形。參数少,速度快,对于一般数据,分类效果已经非常理想了。
高斯核:主要用于线性不可分的情形。參数多。分类结果非常依赖于參数。
有非常多人是通过训练数据的交叉验证来寻找合适的參数,只是这个过程比較耗时。
我个人的体会是:使用libsvm,默认參数,RBF核比Linear核效果稍差。
通过进行大量參数的尝试,一般能找到比linear核更好的效果。
至于究竟该採用哪种核,要依据详细问题,有的数据是线性可分的,有的不可分。须要多尝试不同核不同參数。假设特征的提取的好,包括的信息量足够大,非常多问题都是线性可分的。当然,假设有足够的时间去寻找RBF核參数,应该能达到更好的效果。
參考资料:
2、李航 - <<统计学习方法>>
3、周志华 - <<机器学习>>
相关博客:
1、机器学习系列之机器学习之决策树(Decision Tree)及其Python代码实现
2、机器学习系列之机器学习之Validation(验证,模型选择)
3、机器学习系列之机器学习之Logistic回归(逻辑蒂斯回归)
4、机器学习系列之机器学习之拉格朗日乘数法