前言
学习前几章很顺利,然后就觉得机器学习也不过如此,但学到这章时,发现如果没有一点理论基础,是看不懂的(如果不想看懂理论,可直接使用MLiA书上例子,只要知道怎么把数据组织成算法支持的数据类型即可),回想起看前几章为什么能这么顺利,原因是之前看过一堆相关视频和书籍。
所以,从本章开始,会先给出相关的理论,然后再举例并进行源码分析。如果想看算法的效果,可直接上代码,这样会有一个直观的认识,会加深后续对理论的理解。
学SVM这个知识点卡了我好久了,离上次机器学习相关的博客都已经三个多月了,虽然SVM还有好多知识点没弄明白,但是先进行下去,到时候再回来弄清楚每个知识点。
SVM所需要的背景知识
- 拉格朗日乘数法,可参考《高等数学 第7版》同济大学下册 第九章“多元函数微分法”第八节多元函数的极值及其求法中和拉格朗日乘数法相关的内容。
- 凸优化
-
支持向量机
间隔与支持向量
MLiA书上说,有些人认为SVM是最好的现成的(指分类器不加修改即可直接使用)分类器。SVM有很多实现,如SMO(Sequential Minimal Optimization, 序列最小优化)算法和kernel(核函数)算法。
要把给定的数据分隔开就需要一个分隔超平面,二维数据的分隔超平面就是一条线,三维的就是面,总之分隔超平面的维度就是所给定的数据维度减一维。我们的目标是找到离分隔超平面最近的点,确保它们离分隔超平面的距离尽可能远。这里点到分隔超平面的距离被称为间隔。支持向量(support vector)就是离分隔超平面最近的那些点。
分隔超平面可通过如下线性方程描述:
其中 w=(w1;w2;…;wd) w = ( w 1 ; w 2 ; … ; w d ) 为法向量,决定了超平面的方向; b b 为位移项,决定了超平面与点之间的距离。显然,分隔超平面可由法向量 和位移 b b 确定。(摘至西瓜书P121底部)
要计算点
到分隔超平面的距离,就需要给出点到分隔面的法线或垂线的长度,该值为:
在Logistic回归一节介绍过分类函数Sigmoid,这里也需要一个类似Sigmoid的分类函数f(),将这个分类函数作用于 wTx+b w T x + b 得到 f(u)=f(wTx+b) f ( u ) = f ( w T x + b ) ,当 u<0 u < 0 时输出-1,反之输出+1,。和Logistic有所不同,那里得到的类别是0或1。令