支持向量机(support vector machines, SVM)是一种二分分类模型。他的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别与别的感知机;支持向量机还包括核技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划(convex quadratic programming)的问题,也等价于正则化的合页损失函数最小化问题。支持向量机的学习算法是求解凸二次规划的最优算法。
注:凸二次规划中,局部最优解就是全局最优解。
支持向量机学习方法包含构建由简至繁的模型:线性可分支持向量机(linear support vector machine in linear separable case)、线性支持向量机(linear support vector machine)及非线性支持向量机(non-liner support vector machine).
简单模型是复杂模型的基础和特殊情况。当训练数据线性可分时,通过硬间隔最大化(hard margin maximization),学习一个线性分类器,即线性可分支持向量机,又成为硬间隔支持向量机;
当训练数据近似线性可分时,通过软间隔最大化(soft margin maximization),也学习一个线性分类,即线性支持向量机,又称为软间隔支持向量机;
当训练模型线性不可分是,通过核技巧(kernel trick)及软间隔最大化,学习分线性支持向量机。
当输入空间为欧式空间或离散集合、特征空间为希伯特空间时,核函数(kernel function)表示将输入从输入空间映射到特征空间得到的 特征向量之间的内积 。通过核函数可以学习非线性支持向量机,等价于隐式地在高维特征空间中学习线性支持向量机。这样的方法成为核技巧,核技巧(kernel method)是比支持向量机更为一般的机器学习方法。
线性可分支持向量机与硬间隔最大
线性可分支持向量机
一般地,当训练数据集线性可分时,存在无穷个分离超平面可将两类数据正确分开。感知机利用误分类最小策略,求得分离超平面,不过这时的解有无穷多个。线性可分支持向量机利用间隔最大化求最优分离超平面,这时,解是唯一的。
定义 (线性可分支持向量机) 给定线性可分训练数据集,通过间隔最大化或等价地求解相应的凸二次规划问题学习得到的分离超平面为
$$w^*x+b^*=0 \qquad (7.1)$$
以及相应的分类决策函数
$$f(x)=sign(w^*x+b^*) \qquad (7.2)$$
称为线性可分支持向量机
函数间隔和几何间隔
一般来说,一个点距离分的远近可以表示分类预测的确信程度。在超平面$w \\centerdot x +b =0 $确定的情况下,$|w \\centerdot x +b|$能够相对地表示点x距离超平面的远近。而$w \\centerdot x +b $的符号与类标记y的符号是否一致能够表示分类是否正确。所以可以用量$y(w \\centerdot x+ b)$来表示分类的正确性与确信度,这就是函数间隔(functional margin)的概念。
函数间隔
对于给定的训练数据集T和超平面(w,b)定义超平面(w,b)关于样本点$(x_{i},y_{i})$的函数间隔为
$$\hat{ \gamma_{i}}=y_{i}(w \cdot x_{i} +b)$$
定义超平面(w,b)关于训练集T的函数间隔为超平面(w,b),定义超平面(w,b)关于T中所有样本点$(x_{i},y_{i})$的函数间隔之最小值,即
$$\hat{\gamma=y_{i}(w \cdot x_{i}+b)}$$
定义超平面$(w,b)$关于样本点$(x_{i},y_{i})$的函数间隔为
$$\hat{\gamma}=\min_{i=1,\dots,N} \hat{\gamma_{i}}$$
函数间隔可以表示为分类预测的正确性及确信度。但是选择分离平面时,只有函数间隔还不够。因为只要成比例地改变w和b,超平面没有变化,函数间隔却城北变化。所以我们可以对分离超平面的法向量w加某些约束,如规范化,$||w||=1$,使得间隔是确定的。这时函数间隔成为几何间隔(geometric margin)。
几何间隔
对于给定的训练集T和超平面(w,b),定义超平面(w,b)关于样本点$(x_{i},y_{i})$的几何间隔为
$$\gamma_{i} = y_{i}(\frac{w}{||w|| }\cdot x_{i}+\frac{b}{||w||})$$
定义超平面(w,b)关于训练集T的几何间隔为超平面(w,b)关于T中所有样本点$(x_{i},y_{i})$的几何间隔最小值
$$\gamma=\min_{i=1,\dots,N} \gamma_{i}$$
间隔最大化
支持向量机学习的基本思想就是求解能够正确划分训练集并且几何间隔最大的分离超平面。
间隔最大化意味着不仅将正负实例点分开,而且对最难分的实例点(离超平面最近的点)也有足够的确信度将它们分开。这样的超平面应该对未知的新实例有很好的分类预测能力。
间隔最大分离超平面
可以将求解几何间隔最大化问题表示为以下的约束最优化问题:
$$\max_{w,b} \qquad \gamma$$
$$s.t. \qquad y_{i}\left(\frac{w}{||w||} \cdot x_{i} + \frac{b}{||w||}\right) \ge \gamma , \quad i = 1,2,\dots,N$$
即我们希望最大化超平面(w,b)关于训练集的几何间隔$\\gamma$,约束条件表示的是超平面(w,b)关于每个训练样本点的几何间隔至少是$\\gamma$。
考虑几何间隔和函数间隔的关系式,可将这个问题改写为
$$\max_{w,b} \qquad \frac{\hat{\gamma}}{||w||}$$
$$s.t. \qquad y_{i}(w \cdot x_{i} + b) \ge \hat{\gamma} , \quad i = 1,2,\dots,N$$
函数间隔$\\gamma$的取值并不影响最优化问题的解,也就是说,可以产生一个等价的最优化问题。这样,可以取$\\hat{\\gamma}=1$,于是就得到线性可分支持向量机学习的最优化问题(最大化$\\frac{1}{||w||}$和最小化$\\frac{1}{2}||w||^2$是等价的):
$$\min_{w,b} \qquad \frac{1}{2}||w||^2 \qquad$$
$$s.t. \qquad y_{i}(w \cdot x_{i} + b)-1 \ge 0 , \quad i = 1,2,\dots,N \qquad (7.14)$$
这是一个凸二次规划(convex quadratic programming)问题
凸优化问题是指优化问题
$$\min_{w} f(w)$$
$$s.t. \qquad g_{i} \le 0, i = 1,2,\cdots , k$$
$$\qquad h_{i}(w)=0 , i=1,2,\cdots,l$$
其中,目标函数$f(w)$和约束函数$g_{i}(w)$都是$R^{n}$上的连续可微的凸函数,约束函数$h_{i}(w)$是$R^n$上的仿射函数。
$f(x)$称为仿射函数,如果它满足$f(x)=a \\cdot x+b ,a \\in R^n, b \\in R, x \\in R^n.$
当目标函数$f(x)$是二次函数且约束函数$g_{i}(w)$是仿射函数时,上述凸最优化问题成为凸二次规划问题。
最大间隔分离超平面存在的唯一性
线性可分数据集的最大间隔分离超平面是存在且唯一的。
(1)存在性
(2)唯一性
证明略,详见《统计学习方法》
支持向量和间隔边界
在线性可分情况下,训练数据集的样本点中与分离超平面距离最近的样本点的实例称为支持向量。支持向量是使约束条件式(7.14)等号成立的点。
$$s.t. \qquad y_{i}(w \cdot x_{i} + b)-1 \ge 0 , \quad i = 1,2,\dots,N \qquad (7.14)$$
即
$$y_{i}(w \cdot x_{i} + b)-1 = 0 $$
对$y_{i}=+1$的正例点,支持向量在超平面
$$H_{1}:w \cdot x + b =1$$
上,对$y_{i}=-1$的负实例点,支持向量在超平面
$$H_{2}:w \cdot x + b =-1$$
上。
注意到$H_{1}$和$H_{2}$平行,并且没有实例点落在它们中间。在$H_{1}$和$H_{2}$之间形成一条长带,分离超平面与它们平行且位于它们中央。长带的宽度,即$H_{1}$和$H_{2}$之间的距离成为间隔(margin). 间隔依赖于分离超平面的法向量w,等于$\\frac{2}{||w||}$.$H_{1}$和$H_{2}$成为间隔边界。
在决定分离超平面时只有支持向量起作用,而其他实例点并不起作用。如果移动支持向量将改变所求的解;
由于支持向量在确定分离超平面中起着决定性作用,所以将这种分类模型称为支持向量机。支持向量一般很少,所以支持向量机由很少的“重要的”的训练样本确定。## 学习的对偶算法
为了求解线性可分支持向量机的最优化问题(7.13)-(7.14),将它作为原始最优化问题,应用拉格朗日对偶性,通过求解对偶(dual problem)问题得到原始问题(primal problem)的最优解,这就是线性可分支持向量机的对偶算法(dual algorithm)。这样做的优点,一是对偶问题往往更容易求解;而是自然引入核函数,进而推广到非线性分类问题。
KKT条件
$$\bigtriangledown_{w} L(w^*,b^*,\alpha^*)=w^*-\sum_{i=1}^{N}\alpha_{i}^*y_{i}x_{i}=0$$
$$\bigtriangledown_{b}L(w^*,b^*,\alpha^*)=-\sum_{i=1}^{N}\alpha_{i}^*y_{i}=0$$
$$\alpha_{i}^*(y_{i}(w^*\cdot x_{i}+b^*)-1=0, \qquad i=1,2,\cdots,N$$
$$y_{i}(w^*\cdot x_{i}+b^*)-1 \ge 0, \qquad i=1,2,\cdots,N$$
$$\alpha^*_{i}\ge 0, i=1,2,\cdots,N$$
算法 线性可分支持向量机学习算法
输入: 线性可分训练集T,$y={-1,+1},i=1,2,\\cdots,N$
输出: 分离超平面和分类决策函数
(1)构造并求解约束最优化问题
$$\min_{\alpha} \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}(x_{i}\cdot x_{j})-\sum_{i=1}^{N}\alpha_{i}$$
$$ \sum_{i=1}^{N}\alpha_{i}y_{i}=0$$
$$\alpha_{i} \ge 0,i=1,2,\cdots,N$$
求得最优解$$\alpha^*=(\alpha_{1}^*,\alpha_{2}^*,\cdots,\alpha_{N}^*)^T$$
$\\alpha$是拉格朗日乘子向量。
(2)计算
$$w^*=\sum_{i=1}^{N}\alpha_{i}^*y_{i}x_{i}$$
并选择$\\alpha^*$的一个正分量$\\alpha_{j}^*>0$,计算
$$b^*=y_{j}-\sum_{i=1}^{N}\alpha_{i}^*y_{i}(x_{i}\cdot x_{j})$$
(3)求得分离超平面
$$w^*\cdot x + b^*=0$$
分类决策函数:
$$f(x)=sign(w^* \cdot x +b ^*)$$
$w^*$和$b^*$只依赖于训练数据集中对应$\\alpha_{i}^*>0$的样本点$(x_{i},y_{i})$,而其他样本点对$w^*$和$b^*$没有影响。我们将训练数据中对应于$\\alpha_{i}^*>0$的实例点$x_{i}\\in R^n$称为支持向量。
支持向量一定在间隔边界上。
$$\alpha_{i}^*(y_{i}(w^* \cdot x_{i} +b^*)-1)=0, \qquad i=1,2,\cdots,N$$
或
$$w^* \cdot x_{i} +b ^*= \pm 1$$
即$x_{i}$一定在间隔边界上.这里的支持向量的定义与前面给出的支持向量的定义是一致的。
对于线性可分问题,上述线性可分支持向量机的学习(硬间隔最大化)算法是完美的。但是,训练集线性可分是理想的情形。在现实问题中,训练数据集往往是线性不可分的。即在样本中出现噪声或离群点。此时,有更一般的学习算法。
讨论:为什么要用对偶算法?
1) 不等式约束一直是优化问题中的难题,求解对偶问题可以将支持向量机原问题约束中的不等式约束转化为等式约束;参看KKT条件2) 支持向量机中用到了高维映射,但是映射函数的具体形式几乎完全不可确定,而求解对偶问题之后,可以使用核函数来解决这个问题。
线性支持向量机与软间隔最大化
线性可分问题的支持向量学习方法,对线性不可分数据是不适用的,因为这时上述方法中的不等式约束并不都能成立。这就需要修改硬间隔最大化,使其成为软间隔最大化。
线性不可分意味着某些样本点$(x_{i},y_{i})$不能满足函数间隔大于等于1的约束条件。为了解决这个问题,可以对每个样本点$(x_{i},y_{i})$引进一个松弛变量$\\xi_{i} \\ge 0$,使函数间隔加上松弛变量大于等于1.这样约束条件变为
$$y_{i}(w \cdot x_{i} +b) \ge 1- \xi_{i}$$
同时,对每个松弛变量$\\xi_{i}$,支付一个代价$\\xi_{i}$,目标函数由原来的$\\frac{1}{2}||w||^2$变成
$$\frac{1}{2}||w||^2+C \sum_{i=1}^{N} \xi_{i}$$
这里,C>0称为惩罚参数,一般由应用问题决定,C值大时对误分类的惩罚增大,C值小时对误分类的惩罚减小。最小化目标函数包含两层含义:使$\\frac{1}{2}||w||^2$尽量小即间隔尽量大,同时使误分类点的个数尽量小,C是调和二者的系数。
有了松弛变量和惩罚,我们就可以用处理线性可分数据的思路来处理线性不可分数据。但相对于硬间隔可分的绝对分割,我们称这种方法为软间隔最大化。
线性不可分的支持向量机的学习问题变成凸二次规划(convex quadratic programming)问题(原始问题):
算法 线性支持向量机学习算法
输入: 线性可分训练集T,$y={-1,+1},i=1,2,\\cdots,N$
输出: 分离超平面和分类决策函数
(1)选择惩罚参数C>0,构造并求解凸二次规划问题
$$\min_{\alpha} \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}(x_{i}\cdot x_{j})-\sum_{i=1}^{N}\alpha_{i}$$
$$ \sum_{i=1}^{N}\alpha_{i}y_{i}=0$$
$$0 \le \alpha_{i} \le C,i=1,2, \qquad \cdots,N$$
求得最优解$$\alpha^*=(\alpha_{1}^*,\alpha_{2}^*,\cdots,\alpha_{N}^*)^T$$
$\\alpha$是拉格朗日乘子向量。
(2)计算
$$w^*=\sum_{i=1}^{N}\alpha_{i}^*y_{i}x_{i}$$
并选择$\\alpha^*$的一个正分量$0 \\le \\alpha_{j}^* \\le C$,计算
$$b^*=y_{j}-\sum_{i=1}^{N}\alpha_{i}^*y_{i}(x_{i}\cdot x_{j})$$
(3)求得分离超平面
$$w^*\cdot x + b^*=0$$
分类决策函数:
$$f(x)=sign(w^* \cdot x +b ^*)$$
支持向量
软间隔的支持向量$x_{i}$在间隔边界上($\\alpha_{i}^*<C,\\xi_{i}=0$)或者在间隔边界与超平面之间($\\alpha_{i}^*=C,0 < \\xi_{i}<1$),在超平面上(($\\alpha_{i}^*=C,\\xi_{i}=1$)),甚至在分离超平面误分的一侧($\\alpha_{i}^*=C,\\xi_{i}>1$)。
合页损失函数
对于线性支持向量机来说,还有另外一种解释,就是最小化以下目标函数:
$$ \sum_{i=1}^{N}[1-y_{i}(w \cdot x_{i} + b )_{+} + \lambda ||w||^2]$$
目标函数的第一项是经验损失或经验风险函数,第二项是正则项。
$$L(y(w \cdot x + b))=[1-y(w \cdot w +b)]_{+}$$
称为合页损失函数(hinge loss function)。下标"+"表示以下取正值的函数。
$$[z]_{+}= \lbrace_{z, \quad z \le 0}^{0, \quad z >0}$$
就是说,当样本点$(x_{i},y_{i})$被正确分类且函数间隔(确信度)$$y_{i}(w \cdot x_{i} +b)$$大于1时,损失是0,否者损失是$1-y_{i}(w \\cdot x_{i} +b)$。
合页损失函数横轴是函数间隔,纵轴是损失。由于其函数形状像一个合页,故名合页损失函数。
可以认为他是二分类问题真正的损失函数,而合页损失函数是0-1损失函数的上界,但0-1损失函数不是连续可导的,直接优化尤其构成的目标函数比较困难,可以认为线性支持向量机优化0-1损失函数的上界构成的目标函数。这时的上界损失函数又称为代理损失函数(surrogate loss function)。# 非线性支持向量机与核函数
核技巧
非线性问题往往不好求解,所以希望能用解线性分类问题的方法解决这个问题。所采取的方法是进行一个非线性变换,将非线性问题变换为线性问题,通过解变换后的线性问题的方法求解原来的非线性问题。
核技巧应用到支持向量机,其基本想法就是通过一个非线性变换将输入空间(欧式空间$R^n$或离散集合)对应一个特征空间(希尔伯特空间$\\mathcal{H}$),使得在输入空间$R^n$中的超平面模型对应于特征空间$\\mathcal{H}$中的超平面模型(支持向量)。这样,分类问题的学习任务通过在特征空间中求解线性支持向量机的任务就可以完成。
核函数
设 $\\mathcal{X}$是输入空间(欧式空间$R^n$的子集或离散集合),又设$\\mathcal{H}$是特征空间(希尔伯特空间),如果存在一个从$\\mathcal{X}$到$\\mathcal{H}$的映射$\\phi (x): \\mathcal{X} \\rightarrow \\mathcal{H}$
使得对所有$x,z \\in \\mathcal{X}$,函数$$K(x,z)=\phi (x) \cdot \phi(z)$$
则成K(x,z)为核函数,$\\phi(x)$为映射函数,式中$\\phi(x) \\cdot \\phi(z)$为$\\phi(x)$和$\\phi(z)$的内积。
核技巧的想法是,在学习与预测中定义核函数K(x,z),而不是显示地定义映射函数。因为计算核函数更容易。
常用核函数
- 多项式核函数 (polynomial kernl function)
$$K(x, z)=(x \cdot z +1)^p$$
对应的支持向量机是一个p次多项式分类器。在此情形下,分类决策函数成为 $f(x)=sign( \\sum_{i=1}{N_{s}} a_{i}^* y_{i}(x_{i} \\dot x +1)^p + b^*)$
- 高斯核函数(Gaussian kernel function)
$$K(x,z)=exp(- \frac{||x-z||^2}{2 \sigma})$$
对应的支持向量机是高斯径向基核函数(radial basis function)分类器。在此情形下,分类决策函数成为
$$f(x)=sign(\sum_{i=1}^{N_{s}}a_{i}^*y_{i}exp(-\frac{||x-z||^2}{2 \sigma ^2})+b)$$
讨论:如何选择核函数
n=特征数,m=训练样本数目如果n相对m比较大,使用逻辑回归或者线性SVM,例如n=10000,m=10-1000
如果n比较小,m数值适中,使用高斯核的SVM,例如n=1-1000,m=10-10000
如果n比较小,m很大,构建更多特征,然后使用逻辑回归或者线性SVM参考阅读:
支持向量机SVM http://www.cnblogs.com/jerryl...
机器学习与数据挖掘-支持向量机(SVM) https://wizardforcel.gitbooks...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。