前言
最近发现自己的基础知识不够扎实,面对别人的问题总是“知其然不知其所以然”。出现这个问题的朋友周围有很多,大多数人都是“拿来主义”,想着“有了开源库,有了函数包,只要会用就行,在遇到具体问题的时候再去寻找相应的解决办法”,这种“非系统”的学习思想其实殆害无穷,在自己想要踏实做一个工程时,会出现眼界窄,能力不足的问题,有时候为解决一个问题千方百计地找到了一个非常好用的函数,而这个函数自己根本没听过。如果自己深入专研这方面的话,第一反应就是使用最便捷的方法了,这便是“扎实”的基本功带来的好处。
在简书、知乎、CSDN上有许多前辈已经总结了好的学习资料,自己也从中获益良多,但每次不论文章写得多好,过段时间还是忘了,反思了一下还是没有将其“私有化”,因此现在用自己的话总结一些基础知识,如果在学习记录的同时,可以给大家理解枯燥的理论知识带来一点点帮助,不胜荣幸。
1 面试中考察SVM的必要性
其一:面试官便于了解面试者的基础知识,数学基本功,学习态度,可以通过一些基础模型来看出这个面试者是否能够胜任该岗位。
其二:由于机器学习范畴大,流派多,面试官懂的可能你不懂,你懂的可能面试官没有提前准备,索性来个大家都应该懂的——SVM、LR等。
因此,面试前准备一些基础知识的理解和推导是对本次面试最起码的态度(面试官把最基本的题都告诉你了,如果连这些你都答不上来,那不好意思了)。
2 基本介绍
SVM最初是为解决二元分类问题而设计的,假设我们在桌面(二维平面下)上有两种颜色的球,我们需要用一条直线把它们分成两类。如果在平面上我们没法用一条直线把它们分成两类,我们就采取猛拍桌子(核技巧)的方法,把球振到空中(多维空间下),迅速扔出一张纸,将两个颜色的球在空间中分隔开。我们把这些球叫做 「data」(数据源),把直线叫做 「classifier」(分类器), 拍桌子叫做「kernelling」(建立核函数), 那张纸叫做「hyperplane」(超平面)。
来自wikipedia
3 SVM的推导(线性可分的情况)
给定样本集
式0
其中x为1*m维的向量(有m个属性的一条训练数据)。
目的:寻找一个最优(泛化能力最强)的超平面,将不同类别的样本分开。
超平面可用
式1
描述,其中w为法向量,b为位移项。w和b其实就是模型的参数。
任意点x到超平面(w,b)的距离为
式2
如果超平面将样本成功分类,则下式成立
式3
使等号成立的几个样本点称为“支持向量”,两个异类支持向量到超平面的距离之和为
式4
其被称为“间隔”。
我们要找到具有“最大间隔”的超平面,即
式5
可以知道,最大化
等价于最小化
PS:使用平方L2范数的原因是 将式5重写为 式6
式6为SVM的“基本型”。
求解式6来得到模型
对式6中的每条约束加上拉格朗日乘子 αi(αi大于等于0),得到
式8
令L分别对w和b的偏导为0,得
式9
式10
代入式8中,得到式6的对偶问题(线性规划有一个有趣的特性,就是任何一个求极大的问题都有一个与其匹配的求极小的线性规划问题。)
式11
求w(即求α)和b,得模型
式12
上述过程需满足KKT条件
使用SMO算法来求取α,使支持向量的性质来求b。
这里应该指出,每一个理论的每一个介绍者给出的介绍都可能不尽符合你,或多或少会出现不好理解的情况,原因在于每个人(包括介绍者和学习者)的思维习惯、知识基础、问题背景都不尽相同。自己在学习时总结的经验就是“集成学习”(即取各家之所长),多看几个优秀介绍者的介绍。比如SVM的就充分借鉴了《机器学习》(周志华)等人的介绍。
参考
1.《机器学习》(周志华)
在简书中输入Letax公式请参考
搞定简书中公式编辑问题:插入Letax公式
转载请注明如下内容:
文章来自简书,作者:For_freedom
原文链接:【机器学习】SVM理解及推导
网友评论