支持向量机(SVM)(一)
SVM
是机器学习中常见的分类方法之一,其本质为一个二类分类器,目的是寻找一个分界超平面(对于二维,所以只是一条线,如果数据是三维的就是平面,如果是三维以上就是超平面)把这两类完全分开。而所谓的Support vector
就是这些离分界线最近的『点』。如果去掉这些点,直线多半是要改变位置的。再加入新的样本点时,预测可能出现偏差。
支持向量机是机器学习中处理二类分类问题的一种模型,根据数据是完全线性可分还是近似线性可分,分为线性可分SVM和线性SVM,后者包含前者,适用范围更广。如果数据不能线性可分,可以通过核技巧
,把原特征映射到更高维度度的特征空间
,再在新的特征空间上用线性SVM的方法学习非线性SVM。
因为有些分类是可以在高维是可以很好分别出来的。
SVM可以分别下面三种
利用硬间隔最大化学习的线性可分支持向量机(linear support vector machine in linearly separable case),
利用软间隔最大化学习的线性支持向量机(linear support vector machine)
利用核技巧和软间隔最大化学习的非线性支持向量机(nonlinear support vector machine)。
这次讲解的就是最普通的SVM,对于复杂的SVM将在以后讲到
1.定义
opencv
对SVM
的定义是这样的
A Support Vector Machine (SVM) is a discriminative classifier formally defined by a separating hyperplane
. In other words, given labeled training data (supervised learning), the algorithm outputs an optimal hyperplane which categorizes new examples.
对于只有两个labels
的分类,我们可以利用简单的直线进行分割,但是我们看出下图实际上有很多直线是可以很好的把两种类别分出来的,我们没有办法判断哪一种最好,应此有必要引入判断标准:当线很接近点时我们就认为这条线不太好,因为这样的线范化能力
极差,为了找到范化能力
极好的,我们自然而然想到了找一条线使得其距离两边的点最远。好了,这样我们就可以进行数学计算了。
2.推导
我们的目的现在就是找到离训练集最远的hyperplane
,而平面可以用
f(x)=ωTx+b
来表示,
训练集上的点
x0
到超平面
的距离可以定义为:
这里需要注意的是这个距离是高维度的,不是简单的欧式距离,考虑到为二分类器,结果只能为-1和1,我们先考虑一侧,可以做如下简化:
另外一侧也是一样的结果,这样 r 间隔(margin)就是
我们可以把方程倒一下,从求解最大值变成求解最小值问题,即我们的目标函数为:
yi 指的是训练样本的
labels
.
要求解目标函数,可以引入拉格朗日乘子法
αi
(method of lagrange multiplier),利用求导可以对我们的方程进行简化,
这个方程等价于之前的目标函数,也就是说方程要满足两个
约束条件
- 最小化
L
- 最大化
拉氏乘子
下一步需要求解方程出参数使得L最小了,做法很简单,对
ω
和b求导,令导数等于0:
求导相信大家都没有问题吧!算完后带入拉氏方程,可以得到:
上述过程需满足KKT(Karush-Kuhn-Tucker) 条件,式(1)为二次规划问题,可利用SMO算法进行求解,具体证明见 SVM支持向量机二
参考: