support vector machine
Representation
支持向量机,因其英文名为support vector machine,故一般简称SVM,通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略(即评价)便是间隔最大化,最终可转化为一个凸二次规划问题的求解(即优化)。
记住remember此模型:SVM的基本想法就是求解能正确划分训练样本并且其几何间隔最大化的超平面。
SVM的超平面:
分类决策函数是:
其与logistic regression的区别在于,logistic regression需要学习到,使得正例的特征远大于0,负例的特征远小于0,强调在全部训练实例上达到这个目标,而SVM更关心靠近中间分割线上的点,不要求在所有点上达到最优。在形式上,SVM使用代替,由于,所以得到。
训练数据集的样本点中与分离超平面距离最近的样本点的实例称为支持向量。
支持向量机一共分为三种情况:
线性可分支持向量机:针对训练数据线性可分
硬间隔最大化 (hard margin maximization)
线性支持向量机:针对训练数据近似线性可分
软间隔最大化 (soft margin maximization)
非线性支持向量机:针对训练数据线性不可分
核函数 (kernel function)
Evalution
函数间隔代表我们认为特征是正例还是反例的确信度。
定义超平面关于样本点的函数间隔为
定义超平面关于训练数据集的函数间隔为
几何间隔:如果超平面将与按比例变为和,这时函数间隔变为,可是超平面并没有改变,因此为了求解方便,我们定义不随之改变的几何间隔。
定义超平面关于样本点的几何间隔为
定义超平面关于训练数据集的几何间隔为
学习策略为间隔最大化。此处为线性可分支持向量机的目标函数,给此函数做优化才叫学习算法。其他两个则是在该基础上进行变化,因此记住remember该公式推导。
求几何间隔最大的分离超平面:
换成函数间隔最大的分离超平面:
函数间隔的取值不影响最优化问题的解,因为其与与有关,因此我们可以取,从而将问题转换为与的问题。
等价于最终要求解的凸二次规划问题,求解最优解
Optimization
线性可分支持向量机的对偶算法:为了求解线性可分支持向量机的最优化问题,将它作为原始最优化问题,应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解。记住remember该优化过程。
注意:引入对偶问题的原因在于:对偶问题往往更加容易求解(结合拉格朗日和kkt条件);可以很自然的引用核函数(拉格朗日表达式里面有内积,而核函数也是通过内积进行映射的)。
构造拉格朗日函数:
其中, 拉格朗日乘子向量为
原问题(primal problem)为
原问题的对偶问题(dual problem)为
先对求偏导: 得到
将上面两式代入拉格朗日函数后,再求对的极大,J利用SMO算法来求该拉格朗日算子,但这里不深究,有必要再学习。
存在,是对偶问题的最优解, 此时是原问题的最优解。 , 关于的隐含条件是,即可以通过式子求得。表示为如果一个样本是支持向量,则其对应的拉格朗日系数非零;如果一个样本不是支持向量,则其对应的拉格朗日系数一定为0。由此可知大多数拉格朗日系数都是0。具体推导过程这里不列出。
最大分离超平面:,即:
分类决策函数为 说明分类决策函数只依赖于输入和训练样本输入的内积,此外由KKT条件可知,因为若为0,就表示该样本是在边界上,就表示是支持向量,所以支持向量的大于0,其他的等于0(设想为了满足KKT,只能这项为0,才能保证乘积为0),不用计算内积。
若训练数据是线性不可分(不存在任何线性分类器可以将其正确分类),或者数据存在噪声。 线性不可分意味着某些样本点不能满足函数间隔大于等于1的约束条件。引入松弛变量使得错分样本得到惩罚。 其他推导过程和线性可分差不多,暂时记住remember下面公式。其中C值称为惩罚参数,大于0,其值大时对误分类的惩罚增大,其值小时对误分类的惩罚减小,即表示使得尽量小即间隔尽量大,同时使误分类点的个数尽量小,是调和两者的系数。
其等价于最优化问题:
非线性分类问题是指通过利用非线性模型才能很好地进行分类的问题。我们无法用直线(线性模型)将正负例正确分开,但可以用一条椭圆曲线(非线性模型)将他们正确分开。核函数的作用:首先使用变换将原空间的数据映射到新空间;然后在新空间用线性分类学习方法从雪莲数据中学习分类模型。
假设存在一个从输入空间到特征空间的映射,使得对所有,函数满足条件:,则称为核函数,为映射函数。
只需将线性支持向量机(即是线性不可分的情况,但是我这里公式写的蛮烦了就没有写出来,可以参照线性可分支持向量机的加一个负号换成即可,形式上是一样的)对偶形式中的内积换成核函数即可。记住remember核函数的优化。
得到最终的分类决策函数:
常用核函数
多项式核函数
高斯核函数
字符串核函数:用于字符串处理中。
拉格朗日对偶性:在约束最优化问题中,我们经常使用拉格朗日对偶性(Lagrange Duality)将原始问题转换为其对偶问题,通过解对偶问题而得到原始问题的解。称此约束最优化问题为原始最优化问题或原始问题。
原始问题:假设是定义在上的连续可微函数,则约束最优化问题表述如下
广义拉格朗日函数:
这里,是拉格朗日乘子, 。
从而我们考虑的函数:,这里的表示原始问题。
由约束条件可知,下面公式右侧的广义拉格朗日函数的极小极大问题与原始问题是等价的:
定义原始问题的最优值为:
对偶问题,下面公式右侧称为广义拉格朗日函数的极大极小问题
定义对偶问题的最优值为:
原始问题与对偶问题的关系:若满足Karush-Kuhn-Tucker(KKT)条件,则原始问题和对偶问题的最优值相等。
$$\begin{gather} \nabla_x L(x^\ast, \alpha^\ast, \beta^\ast) = 0 \
\nabla\alpha L(x^\ast, \alpha^\ast, \beta^\ast) = 0\ \nabla\beta L(x^\ast, \alpha^\ast, \beta^\ast) = 0\ \alpha_i^\ast c_i(x^\ast) = 0, \quad i = 1,2,\cdots,k\ c_i(x^\ast) \leq 0, \quad i = 1,2,\cdots,k\ \alpha_i^\ast \geq 0, \quad i = 1,2,\cdots,k\ h_j(x^\ast) = 0, \quad j = 1,2,\cdots,l \end{gather}$$
Code
在sklearn中,svm.svc()不需要设置参数,直接使用即可。这个svc函数对应线性支持向量机,即第二种情况加入惩罚参数;初始化时通过选项kernel指定用什么核。具体可参加sklearn的官方文档。因为很多网上教程都是照搬翻译官方文档的。
Reference
Last updated
Was this helpful?