《机器学习》- 支持向量机SVM
来源:互联网 发布:淘宝客挣钱 编辑:程序博客网 时间:2024/05/27 20:35
重新学了一遍周志华老师《机器学习》中的支持向量机,这一章数学公式特别多,不容易弄明白,但只要深入学习后,你就会发现了数学是真的很美,推导其中公式后得到的结论实在是太棒了,下面让我们一起见证奇迹吧(讲解顺序和书中一致,但是有些有疑问的或者涉及公式推导的地方,我会详细讲解,小伙伴们最好拿起笔和纸和我一起动手推导)。
SVM引入
给定训练样本集
划分超平面的求解
既然知道了SVM的目的,那么下面就讲解如何求出这个能最大程度分离训练样本的划分超平面。
在样本空间中,划分超平面可通过如下线性方程描述:
其中,
假设超平面
如图,距离超平面最近的这几个训练样本使得式(3)的等号成立,它们被称为“支持向量”(support vector)
两个异类支持向量到超平面的距离之和为
则它被称为“间隔”(margin)
SVM的目的就是要找到具有“最大间隔”的划分超平面,即找到能满足式(3)中约束的参数
显然,上述最优化问题可以转化为:
对偶问题
在讲解如何求解(6)中优化问题之前,先叙述下什么是对偶问题:
对于下列优化问题:
引入拉格朗日乘子
那么,可引入求(8)中的最优解的KKT条件为:
(KKT条件是满足强对偶条件的优化问题的必要条件,可以这样理解:我们要求min f(x), L(a, b, x) = f(x) + a*g(x) + b*h(x),a>=0,我们可以把f(x)写为:max_{a,b} L(a,b,x),为什么呢?因为h(x)=0, g(x)<=0,现在是取L(a,b,x)的最大值,a*g(x)是<=0,所以L(a,b,x)只有在a*g(x) = 0的情况下才能取得最大值,否则,就不满足约束条件,因此max_{a,b} L(a,b,x)在满足约束条件的情况下就是f(x),因此我们的目标函数可以写为 min_x max_{a,b} L(a,b,x),如果用对偶表达式: max_{a,b} min_x L(a,b,x),由于我们的优化是满足强对偶的(强对偶就是说对偶式子的最优值是等于原问题的最优值的),所以在取得最优值x0的条件下,它满足 f(x0) = max_{a,b} min_x L(a,b,x) = min_x max_{a,b} L(a,b,x) =f(x0))
该优化问题可以从两个角度来考察,即“主问题”和对偶问题。对主问题(7),基于式(8),其拉格朗日“对偶函数”
拉格朗日对偶函数就是把拉格朗日函数看成x的函数所找到的最小值。若
进而有
若主问题(7)的最优解为p^{*},则对任意
即对偶函数给出了主问题最优解的下界,显然,这个下界取决于
式(14)就是主问题(7)的对偶问题。在推导对偶问题时,常通过将拉格朗日乘子
回归求解式(6)中的优化问题,首先,对式(6)使用拉格朗日乘子法:
其中,
由于
且向量积对列向量
所以,
令
将(19)带到(15)中,就得到式(15)的拉格朗日对偶函数为
则,主问题(6)的对偶问题为:
在解出
从对偶问题(21)中解出的
(KKT条件解释:如果
则,对于任意训练样本
只有支持向量才会影响最终模型,其他训练样本都不需要保留!
SMO求解对偶问题
虽然到此,我们已经得到了SVM重要的结论,但是还有一个问题没有解决,就是如何求解(21)中的对偶问题。SMO就是一个非常著名求解这类问题的高效算法,下面开始讲解如何利用SMO进行求解:
SMO的基本思路是先固定
- 选取一对需要更新的变量
αi 和αj ; - 固定
αi 和αj 之外的的参数,求解式(21)获得更新后的αi 和αj 。
注意到,只要所选取的
SMO算法之所以高效,恰由于在固定其他参数后,仅优化两个参数的过程能做到非常高效。具体来说,仅考虑
其中,
用式(24)消去(21)中的变量
那么,如何确定偏移项
其中
到此,利用SVM求解线性可分的问题就讲解完了。但现实生活中,训练样本也许并不是线性可分的,那么我们可以将样本从原始空间映射到一个更高维的特征空间中,使得样本在这个特征空间内线性可分。接下来的思路跟上述求解线性问题一样了。
前面我们一直假定训练样本在样本空间中是能被完全分开的,但是,现实生活中,往往很难做到这点,所以解决该问题的一个办法就是允许支持向量机在一些样本上犯错,从而引入了“软间隔”的概念,即,允许某些样本不满足约束条件
这两类现实中的情况,在这里就不细说了,就按照线性可分的思路,都可以弄明白。
另外,由于SVM一般用于解决分类问题,那么对于回归问题,我们引入了SVR,即支持向量回归算法。给定训练样本
如图所示,这相当于以
所以,我们要做的是使得损失尽可能小,则SVR问题可形式化为
其中,
则该问题的求解思路依然和线性可分的求解思路一致了。
好了,到此,SVM的所有内容基本上已经讲解完了。
- 机器学习 支持向量机(SVM)
- Stanford机器学习--- 支持向量机SVM
- 机器学习之支持向量机(svm)
- 【机器学习】支持向量机SVM
- 机器学习:支持向量机(SVM)
- 机器学习---支持向量机(SVM)
- 机器学习--SVM支持向量机
- 机器学习之支持向量机(SVM)
- 机器学习:支持向量机(SVM)
- Stanford机器学习---支持向量机SVM
- 机器学习之支持向量机SVM
- 《机器学习》- 支持向量机SVM
- 机器学习-支持向量机(SVM)
- 【机器学习】支持向量机SVM总结
- 机器学习(支持向量机-SVM)
- 支持向量机SVM-机器学习ML
- 【机器学习】支持向量机SVM学习(1)
- 【机器学习】支持向量机SVM学习(2)
- POJ1904-强连通
- 断言2
- C++动态内存管理
- ORA-30013: undo tablespace 'UNDOTBS1' is currently in use
- C++引用的总结
- 《机器学习》- 支持向量机SVM
- 二维数组的初始化
- 分块算法
- 提问与回答 VS2017中C#控制台编程的调试基础示例
- 学习RecyclerView
- 简单粗暴地理解js原型链–js面向对象编程
- linux
- js url传参中文乱码
- MyBatis魔法堂:Insert操作详解(返回主键、批量插入)