第1关:支持向量机简介
相关知识
为了完成本关任务,你需要掌握:1.什么是支持向量机2.什么是最大化间隔,3.分类器求解最大化间隔
支持向量机简介
SVM(支持向量机,英文全名:(Support Vector Machines
,SVM
)是分类器的一种,SVM有很多种实现,但是我们只讲最流行的一种实现,即序列最小优化算法Sequential Minimal Optimization
,即SMO算法。 在正式介绍SVM之前,先解释几个概念考虑图6-1中个方框中的数据点分布,能否画出一条直线将圆形点和方形点分开?
再考虑一张图片,看一看图6-2A中的两组数据
这张图中的数据已经分的够开了,所以很容易在图中画出一条直线将两组数据点分开,在这种情况下,这种数据被称为线性可分数据。 上述将数据集分隔开来的直线称为分隔超平面(separatinghyperplane
)。在上面给出的例子中,由于数据点都在二维平面上,所以此时分隔超平面就只是一条直线。但是,如果所给的数据 集是三维的,那么此时用来分隔数据的就是一个平面。显而易见,更高维的情况可以依此类推。如果数据集是1024维的,那么就需要一个1023维的某某对象来对数据进行分隔。这个1023维的某某对象到底应该叫什么? n-1维呢?该对象被称为超平面(hyperplane
) ,也就是分类的决策边界。分布在超平面一侧的所有数据都属于某个类别,而分布在另一侧的所有数据则属于另一个类别。 我们希望能采用这种方式来构建分类器,即如果数据点离决策边界越远,那么其最后的预测结果也就越可信。考虑图6-2框B到框D的三条直线,它们都能将数据分隔开,但是其中哪一条最好呢?是否应该最小化数据点到分隔超平面的平均距离?来求最佳直线如果是那样,图6-2的B和C框中的直线是否真的就比D框中的直线好呢?如果这样做,是不是有点寻找最拟合直线的感觉?我们希望找到离分隔超平面最近的点,确保它们离分隔面的距离尽可能远。这里点到分隔面的距离被称为间隔。我们希望间隔尽可能地大,这是因为如果我们犯错或者在有限数据上训练分类器的话,我们希望分类器尽可能健壮。 支持向量(Support vector
)就是离分割超平面最近的那些点。我们接下来要最大化支持向量到分割面的距离,需要找到此问题的优化求解方法。
寻找最大间隔
如图6-3,分隔超平面的形式可以写
,要计算点八到分隔超平面的距离,就必须给出点到分隔面的法线或垂线的长度,该值为
。这里的常数b类似于Logisti
回归中的截距W,这里的向量w和常数b一起描述了所给数据的分隔线或超平面。
分类器求解最大化间隔
前面已经提到了分类器,但还没有介绍它的工作原理。理解其工作原理将有助于理解基于优化问题的分类器求解过程。输人数据给分类器会输出一个类别标签,这相当于一个类似于Sigmoid函数在作用。现在的目标就是找出分类器定义中的w和b为此,我们必须找到具有最小间隔的数据点,而 这些数据点也就是前面提到的支持向量。一旦找到具有最小间隔的数据点,我们就需要对该间隔最大化。这就可以写作:
如果令所有支持向量的
都等于1,只有那些离分割超平面最近的点得到的值才为1,离超平面越远的数据点,其
的值也就越大。 约束条件为:
有的时候,数据可能不太干净,这时可以引入松弛变量,来允许有些数据点可以处于分隔面的错误一侧。这样我们的优化目标就能保持仍然不变,但是此时新的约束条件则变为:
,常数C用于控制最大化间隔和保证大部分点的函数小于1.0,这两个目标的权重。在优化算法的实现代码中,常数0是一个参数,因此我们就可以通过调节该参数得到不同的结果。求出所有α
,那么分割超平面就可以通过这α
来表达,SVM主要工作就是求解这些α
,也就是求分割超平面。 SVM的一般框架: ⑴收集数据:可以使用任意方法。 (2)准备数据:需要数值型数据。 (3)分析数据:有助于可视化分隔超平面。 (4)训练算法:SVM的大部分时间都源自训练,该过程主要实现两个参数的调优。 (5)测试算法:十分简单的计算过程就可以实现。 (6)使用算法:几乎所有分类问题都可以使用SVM,值得一提的是,SVM本身是一个二类分类器,对多类问题应用SVM需要对代码做一些修改。
编程要求
根据提示,做完本节的选择题。