SVM(Support Vector Machine,支持向量机)是一个十分传统且好用的分类器,在二分类问题上有十分良好的表现。
一、拉格朗日乘子法
拉格朗日乘子法是SVM参数优化的核心,它能够解决多个等式或不等式约束下的最优化问题。
例1,给定x1−x2=2x_1-x_2=2x1−x2=2,如何寻找x12+x22x_1^2+x_2^2x12+x22的最大值,此时x1,x2x_1,x_2x1,x2是多少?
拉格朗日乘子法的核心在于设立一个拉格朗日方程,将目标函数与约束函数的信息融合在一起,然后找寻该函数的最值。以上述情况为例,定义目标函数f(x1,x2)=x12+x22f(x_1,x_2)=x_1^2+x_2^2f(x1,x2)=x12+x22,约束函数g(x1,x2)=x1−x2−2g(x_1,x_2)=x_1-x_2-2g(x1,x2)=x1−x2−2。拉格朗日乘子法顾名思义,就是新设立一个变量乘在约束函数上,然后和目标函数相加。则可定义拉格朗日函数L(x1,x2,λ)L(x_1,x_2,\lambda)L(x1,x2,λ)为:
L(x1,x2,λ)=f(x1,x2)+λg(x1,x2)=x12+x22+λ(x1−x2−2)L(x_1,x_2,\lambda)=f(x_1,x_2)+\lambda g(x_1,x_2)=x_1^2+x_2^2+\lambda(x_1-x_2-2) L(x1,x2,λ)=f(x1,x2)+λg(x1,x2)=x12+x22+λ(x1−x2−2)
要求得上式的最值,需要各个变量的偏导数为零,所以必须满足:
∂L∂x1=∂L∂x2=∂L∂λ=0\frac{\partial L}{\partial x_1}=\frac{\partial L}{\partial x_2}=\frac{\partial L}{\partial \lambda}=0 ∂x1∂L=∂x2∂L=∂λ∂L=0
将上式转换为等式组,有:
2x1+λ=02x2−λ=0x1−x2−2=02x_1+\lambda=0\\2x_2-\lambda=0\\x_1-x_2-2=0 2x1+λ=02x2−λ=0x1−x2−2=0
求解可得当x1=1,x2=−1,λ=−2x_1=1,x_2=-1,\lambda=-2x1=1,x2=−1,λ=−2时,x12+x22x_1^2+x_2^2x12+x22可取到最大值2。
上例是最基本的拉格朗日乘子法的应用场景,下面描述扩展场景。
例2,给定x1−x2=2,x1+x2≥1x_1-x_2=2,x_1+x_2\geq1x1−x2=2,x1+x2≥1,如何寻找x12+x22x_1^2+x_2^2x12+x22的最大值?
已知约束中除了一个等式约束,还引入了一个不等式约束。和等式约束不同,不等式约束需要分情况讨论:
1. 全局最值在约束范围内
由例1可知,在该例中如果撇开不等式约束,最值在x1=1,x2=−1x_1=1,x_2=-1x1=1,x2=−1时成立。所以倘若不等式函数h(x1,x2)>0h(x_1,x_2)>0h(x1,x2)>0在最值情况下成立(比如x1+x2>−1x_1+x_2>-1x1+x2>−1),那么这个约束就等于没有。
2.全局最值在约束范围外
这种情况是例2场景下的情况了,此时不等式约束生效,成为等式约束。即最后的最值点会落在约束条件上(此例为x1+x2≥1x_1+x_2\geq 1x1+x2≥1)。
除了不等式总共有两项约束,因此依然要建立一个方程,将这些信息融合在一起。定义f(x1,x2)=x12+x22f(x_1,x_2)=x_1^2+x_2^2f(x1,x2)=x12+x22,g(x1,x2)=x1−x2−2g(x_1,x_2)=x_1-x_2-2g(x1,x2)=x1−x2−2,h(x1,x2)=x1+x2−1h(x_1,x_2)=x_1+x_2-1h(x1,x2)=x1+x2−1,由于约束比例1多了一个,所以拉格朗日乘子也要多一个。所以该例下拉格朗日函数L(x1,x2,λ,γ)L(x_1,x_2,\lambda,\gamma)L(x1,x2,λ,γ)为:
L(x1,x2,λ,γ)=f(x1,x2)+λg(x1,x2)−γh(x1,x2)=x12+x22+λ(x1−x2−2)+γ(x1+x2−1)L(x_1,x_2,\lambda,\gamma)=f(x_1,x_2)+\lambda g(x_1,x_2) -\gamma h(x_1,x_2)\\=x_1^2+x_2^2+\lambda(x_1-x_2-2)+\gamma(x_1+x_2-1) L(x1,x2,λ,γ)=f(x1,x2)+λg(x1,x2)−γh(x1,x2)=x12+x22+λ(x1−x2−2)+γ(x1