什么是SVM?
支持向量机( Support Vector Machine),第一次看到这个算法名字的时候,内心只有一个感觉,好变态,导致我刚开始一直都不敢去学习这个算法,总觉得自己学不会,可是真鼓起勇气接触一段时间后,发现 一个普通的SVM就是一条直线罢了,用来完美划分线性可分的两类。但这又不是一条普通的直线,这是无数条可以分类的直线当中最完美的,它的完美就在于它恰好在两个类的中间,距离两个类的点都一样远,我们称这条线为决策边界,而所谓的支持向量Support vector就是这些离分界线最近的『点』…
支持向量机学习模型包括:
1、线性可分支持向量机
这是一类最简单的支持向量机模型,它要求训练数据集是线性可分的,如上图中给出的训练数据集就是线性可分的。
2、线性支持向量机
这类模型不要求训练数据集线性可分,但还是通过第1类的方法来做。
3、非线性支持向量机
这是最复杂的支持向量机,它的训练数据集本身是非线性的,但是通过线性变换,我们可以将这个数据集投射到另外一个特征空间,在新的特征空间中训练数据集变为线性可分。而这其中使用了一个非常重要的概念,叫做核技巧(Kernel Trick)。
1、线性可分支持向量机
要解决的问题:什么样的决策边界才是最好的呢?
接下来我们将进行推导:
1.1 决策边界:选出来离雷区最远的(雷区就是边界上的点,要Large Margin,不要Small Margin)
1.2 距离计算
看上图,假设决策平面为w.x+b=0.,x’,x”都是决策平面上的点,那么w为该决策平面的一个法向量,那么点x到决策平面的距离为:
distance = w’ (x’ - x) / || w ||(一个向量在另一个向量上的投影)
又因为:
w’x’ + b = 0
则 distance = | (w’x +b) | / ||w||
数据标签定义:
数据集:(X1,Y1)(X2,Y2)… (Xn,Yn)
Y为样本的类别: 当X为正例时候 Y = +1 当X为负例时候 Y = -1
决策方程: (其中 是对数据做了变换,后面继续说)