简介
这里引用李航老师《统计学习方法》里的介绍。
支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。
SVM就是寻找可以区分两个类别并且能使边际(margin)最大的超平面(hyper plane),即划分超平面。**而边际(margin)是什么呢?**边际就是某一条线距离它两侧最近的点的距离之和,这条线就是下面两张图中的实心线,两条虚线构成的带状区域就是 margin,虚线是由距离中央实线最近的两个点所确定出来的。从图中可以看出,第二张图的margin大于第一张图,更加接近我们的目标。
一、svm分类
1、线性可分支持向量机(或称硬间隔支持向量机)
这个用括号里的叫法更加容易理解,就是需要保证所有的点都被分到margin之外,不能出现的margin内。但是这样的硬性条件,要求训练时所有的点都分类在margin外,却让模型容易出现过拟合问题。
2、线性支持向量机(或称软间隔支持向量机)
这个是为了解决硬间隔支持向量机过拟合问题,而进一步优化的模型。就是通过松弛硬条件,在训练时,允许有些点落在margin区域内,也即允许犯错误,只是回对犯的错误做惩罚,那么要怎么做呢?这个在下面会进一步用数学推导说明。
3、非线性支持向量机
当训练数据不能用线性分类时,那么就需要将数据映射到高维空间中,然后再用超平面分类,如下图所示。
但是,如果我们将数据映射到高维空间中,将会带来两个方面的时间复杂度的增加。
(1)数据映射过程中,会增加时间复杂度。
(2)映射到高维空间中,例如原来的数据向量是10维的,现在映射到1000的维度上,那么在分类时将会带来100倍的计算量的增加。
所以,为了解决时间复杂度增加的问题,我们需要使用到核技巧(kernel trick)。
二、线性可分支持向量机(或称硬间隔支持向量机)
假设给定一个特征空间上的训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T={
(x1,y1),(x2,y2),...,(xN,yN)}其中, x i ∈ R n x_i\in\R^n xi∈Rn, y i ∈ { + 1 , − 1 } y_i\in\{+1,-1\} yi∈{
+1,−1}, i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N, x i x_i xi为第i个样本, y i y_i yi为 x i x_i xi的类标记。至于为什么 y i ∈ { + 1 , − 1 } y_i\in\{+1,-1\} yi∈{
+1,−1}呢?这个只是两个类别的类标记,也可以像one-hot那样标记为{1,0},也可以标记为{10,-10},最终我们要学习的是w,b,也可由w,b调整。再通俗讲的话,在 w ∗ x + b = y w*x+b=y w∗x+b=y中,x是样本,是已知的,y是什么可由w,b来调整,只是现在我们限定了y的值,从而来学习出符合目标的w,b值。
这里提供另一个角度的解释博客:https://blog.youkuaiyun.com/v_JULY_v/article/details/7624837
所以,我们可以得到以下公式: w T ∗ x + b = 1 (1) w^T*x+b=1 \tag{1} wT∗x+b=1(1) w T ∗ x + b = − 1 (2) w^T*x+b=-1 \tag{2} wT∗x+b=−1(2) w T ∗ x + b = 0 (3) w^T*x+b=0 \tag{3} wT∗x+b=0(3) w T ∗ x + b = 0 w^T*x+b=0 wT∗x+b=0为超平面。假设在超平面上有两个点 x 1 , x 2 x_1,x_2 x1,x2,得: w ∗ x 1 + b = 0 (4) w*x_1+b=0 \tag{4} w∗x1+b=0(4) w ∗ x 2 + b = 0 (5) w*x_2+b=0 \tag{5} w∗x2+b=0(5)所以,公式(4)减公式(5)得: w ( x 1 − x 2 ) = 0 (6) w(x_1-x_2)=0 \tag{6} w(x1−x2)=0(6)所以 w ⊥ ( x 1 − x 2 ) w\bot(x_1-x_2) w⊥(x1−x2)
假设在 w T ∗ x + b = 1 、 w T ∗ x + b = − 1 w^T*x+b=1、w^T*x+b=-1 wT∗x+b=1、wT∗x+b=−1上分别有两个点 x + , x _ x_+,x\_ x+,x_,且 x + , x _ x_+,x\_ x+,x_的连线垂直于超平面,即 ∣ x + − x _ ∣ = m a r g i n |x_+-x\_|=margin ∣x+−x_∣=margin,则得: w T ∗ x _ + b = 1 (7) w^T*x\_+b=1 \tag{7} wT∗x_+b=1(7) w T ∗ x _ + b = − 1 (8) w^T*x\_+b=-1 \tag{8} wT∗x_+b=−1(8) x + = x _ + λ w (9) x_+=x\_+\lambda w \tag{9} x+=x_+λw(9)这是由于前面得出的w垂直于超平面得出。
将公式(9)代入公式(7),得: w T ( x _ + λ w ) + b = 1 (10) w^T(x\_+\lambda w)+b=1 \tag{10} wT(x_+λw)+b=1(10) w T ∗ x _ + λ w T w + b = 1 (11) w^T*x\_+\lambda w^Tw+b=1 \tag{11} wT∗x_+λwTw+b=1(1