算法原理详细推导与实现(四):支持向量机(上)

【机器学习】算法原理详细推导与实现(四):支持向量机(上)

在之前的文章中,包括线性回归和逻辑回归,都是以线性分界线进行分割划分种类的。而本次介绍一种很强的分类器【支持向量机】,它适用于线性和非线性分界线的分类方法。

函数间隔概念

为了更好的理解非线性分界线,区别两种分界线对于分类的直观理解,第一种直观理解需要考虑 logistic 回归,我们用一个 logistic 回归函数表示当 y=1y=1 时概率表示为 :

p(y=1x;θ)=h(θ)=g(θTx)=g(z) \begin{aligned} p(y=1|x;\theta)&=h(\theta) \\ &=g({\theta}^Tx) \\ &=g(z) \\ \end{aligned}

h(θ)0.5h(\theta) \geq 0.5 时,即θTx0{\theta}^Tx \geq 0y=1y=1;同理当 h(θ)<0.5h(\theta) < 0.5 时,即θTx<0{\theta}^Tx < 0y=0y=0。回顾 logistic 回归的图像如下所示:

算法原理详细推导与实现(四):支持向量机(上)

由上图可以看出:如果 θTx>>0{\theta}^Tx >> 0 时,那么可以相当确定的预测y=1y=1;如果 θTx<<0{\theta}^Tx << 0 时,那么可以相当确定的预测y=0y=0

当我们根据这样的样本拟合logistic 回归得出分类器时,这样的分类器是良好的。即对于所有的 ii ,如果 y(i)=1y^{(i)}=1,那么 θTx(i)>>0{\theta}^Tx^{(i)} >> 0 ;如果 y(i)=0y^{(i)}=0,那么 θTx(i)<<0{\theta}^Tx^{(i)} << 0 。换句话说,如果我们根据训练集找到了合适的参数 θ\theta ,那么我们的学习算法不仅会保证分类结果正确,更会进一步的保证对分类结果的 确定性

假设训练集都是线性可分隔的,即一定有一条直线可以将训练集分开,假设θTx(i)=0{\theta}^Tx^{(i)} =0 代表中间那条分隔线,使得正样本和负样本到这条线的距离最大,即这条线是最优的分隔线:

算法原理详细推导与实现(四):支持向量机(上)

考虑上面3个点 A 、B和C。从图中我们可以确定A是×类别的,然而C我们是不太确定的,B还算能够确定。logistic 回归强调所有的点尽可能的远离中间那条线即可,由此可能造成如上所示,点C可能属于o类别也可能属于×类别,所以我们这里希望找到一个分隔线,使其所有的分类结果有足够的 确定性,这就是logistic 回归和支持向量机的不同点。

间隔器

函数间隔

支持向量机的符号和logistic 回归的符号有点差别。支持向量机的取值范围是 y{1,1}y \in \{-1, 1\},而logistic 回归的取值范围是 y{0,1}y \in \{0, 1\}

logistic 回归的假设函数为:

h(x)=θ0x0+θ1x1+θ2x2+...+θnxn=θTx \begin{aligned} h(x)&=\theta_0x_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n \\ &=\theta^Tx \end{aligned}

其中这里假设 x0=1x_0=1。而支持向量机假设 θ0=b\theta_0=b,即假设函数为:

h(x)=θ0+θ1x1+θ2x2+...+θnxn=b+ω1x1+ω2x2+...+ωnxn=ωTx+b \begin{aligned} h(x)&=\theta_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n \\ &=b+\omega_1x_1+\omega_2x_2+...+\omega_nx_n \\ &=\omega^Tx+b \end{aligned}

即为:

hw,b(x)=g(ωTx+b) h_{w,b}(x)=g(\omega^Tx+b)

将其假设函数映射到 y{1,1}y \in \{-1, 1\} 上:

g(z)={1, 01,z<0 g(z)= \begin{cases} 1, & \text{z $\geq$ 0} \\ -1, & \text{z<0} \end{cases}

给定一个训练样本 (x(i),y(i))(x^{(i)}, y^{(i)}),那么定义支持向量机的间隔函数为:

γ^(i)=y(i)(ωTx+b) \hat{\gamma}^{(i)}=y^{(i)}(\omega^Tx+b)

对于这个式子的理解是:

如果 y(i)=1y^{(i)}=1,为了获得较大的函数间隔,你需要令(ωTx+b)(\omega^Tx+b) 取得较大值,即(ωTx+b)>>0(\omega^Tx+b) >> 0,得到的γ^(i)\hat{\gamma}^{(i)}是一个大正数
如果 y(i)=1y^{(i)}=-1,为了获得较大的函数间隔,那么唯一使其获得较大值的方式是,令(ωTx+b)<<0(\omega^Tx+b) << 0 ,得到的γ^(i)\hat{\gamma}^{(i)}是一个大负数

这个定义捕捉到了我们之前对于函数间隔的直观理解的特点,在之前logistic 回归的直观理解中,如果y(i)=1y^{(i)}=1,我们希望(ωTx+b)(\omega^Tx+b)取较大的值;如果y(i)=1y^{(i)}=-1,我们希望(ωTx+b)(\omega^Tx+b)取较小的值,这个定义用一个公式捕捉到了,我们希望函数间隔去较大值的两种情况。

上面定义的某一个样本的函数间隔为:γ^(i)=y(i)(ωTx+b)\hat{\gamma}^{(i)}=y^{(i)}(\omega^Tx+b),那么针对全局样本得到的一个超平面的函数间隔定义为:

γ^=minγ^(i),(i=1,2,...,m) \hat{\gamma}=min\hat{\gamma}^{(i)},(i=1,2,...,m)

代表在全部的训练样本上,以分类正例和负例置信度最低的那个函数间隔为准,即 函数间隔是最差的情况,也要能很好的分类正负

实际上,这种直观理解存在一个小问题,要使函数间隔取较大的值是非常容易的,比如说:如果我们的参数是ω\omegabb,那么我们可以将ω\omega变为原来的2倍,将bb也变为原来的2倍:

ω2ωb2b \omega \to 2\omega,b \to 2b

那么根据函数间隔的定义:

γ^(i)=y(i)(ωTx+b) \hat{\gamma}^{(i)}=y^{(i)}(\omega^Tx+b)

如果把ω\omegabb变为原来的2倍,那么我可以很容易的使函数间隔加倍。所以单纯的以最大化函数间隔为目标是没有多大意义的,因为通过对参数翻倍就可以使函数间隔获得任意大的值,也许我们可以解决这个问题。通过添加一个正规化条件,使得ω\omega的长度为1,即ω=1||\omega||=1

几何间隔

分类器的确定边界会由平面给出,假设存在一个BB点在分割面上,其他任何一点,比如AA点到分割面的距离,这就是几何间隔

算法原理详细推导与实现(四):支持向量机(上)

那么上图的AA点和分割面成90°90°夹角,即法向量表示为ωω\frac{\omega}{||\omega||}AA点到分割面的距离为γ{\gamma}(没有帽子的是几何间隔,有帽子的是函数间隔γ^\hat{\gamma}),假设AA点的坐标为(x(i),y(i))(x^{(i)},y^{(i)})BB点的坐标为(x,y),那么可以得到x=x(i)γ(i)ωωx=x^{(i)}-{\gamma}^{(i)}\frac{\omega}{||\omega||}(利用初中的几何知识),因为ωω\frac{\omega}{||\omega||}是长度为1且与超平面垂直的单位向量,用点x(i)x^{(i)}减掉γ(i)ωω{\gamma}^{(i)}\frac{\omega}{||\omega||}就是超平面上面点BBxx坐标了。因为分割面上面的点都满足ωTx+b=0\omega^Tx+b=0,而点B在分割面上,所以也满足ωTx+b=0\omega^Tx+b=0,,即:

ωT(x(i)γ(i)ωω)+b=0 \omega^T(x^{(i)}-{\gamma}^{(i)}\frac{\omega}{||\omega||})+b=0

进一步化简得到:

γ(i)=ωTx(i)+bω=(ωω)Tx(i)+bω {\gamma}^{(i)}=\frac{\omega^Tx^{(i)}+b}{||\omega||}=(\frac{\omega}{||\omega||})^Tx^{(i)}+\frac{b}{||\omega||}

上述是假设已经对样本分好了正确的类别,那么如果点AA是样本,即很多个类似于点AA的样本(x(i),y(i))(x^{(i)},y^{(i)}),那么上述公式转化为:

γ(i)=y(i)((ωω)Tx(i)+bω) {\gamma}^{(i)}=y^{(i)}((\frac{\omega}{||\omega||})^Tx^{(i)}+\frac{b}{||\omega||})

现在这样子的形式和之前的函数间隔形式非常相似,除了在这里我们对向量ω\omega进行了标准化。所以像之前一样,我们希望几何间隔取较大的值,也就是意味着如果我们对训练样本进行了正确的分类,那么这些样本在分类正确的一面距离分割面的距离越大越好,这里用乘上y(i)y^{(i)}来判断样本正负分类的方向。

这里有几个非常容易得到的结论:

  1. 如果ω=1||\omega||=1,那么函数间隔等于几何间隔
  2. 几何间隔=函数间隔 / ω||\omega||

同样,如果同时扩大 ω\omegabb,那么ω||\omega||也会相应的扩大,结果无影响。所以针对全局样本得到的一个超平面的函数间隔定义为:

γ=minγ(i),(i=1,2,...,m) \gamma=min \gamma ^{(i)},(i=1,2,...,m)

最优间隔分类器

最优间隔分类器是指选择合适的γ\gammaω\omegabb,使得间隔最大,也就是说满足函数:

maxγ,ω,b>γ max_{\gamma,\omega,b}->\gamma

y(i)(ωTx+b)γ,(ω=1) y^{(i)}(\omega^Tx+b) \geq \gamma,(||\omega||=1)

虑几何间隔和函数间隔的关系,即γ=γ^ω\gamma=\frac{\hat{\gamma}}{||\omega||},那么上面可以转化为:

maxγ,ω,b>γ^ω max_{\gamma,\omega,b}->\frac{\hat{\gamma}}{||\omega||}

y(i)(ωTx+b)γ^ y^{(i)}(\omega^Tx+b) \geq \hat{\gamma}

这样子就取消了ω=1||\omega||=1的约束了,但是目标函数目前不是凸函数,无法求得最优值,没发直接带入优化算法里面去计算,所以这里还是需要改写一下。前面说到同时扩大ω\omegabb对结果没有影响,但我们最后要求的仍然是ω\omegabb的确定值,不是他们的一组倍数值,因此,我们需要对γ^\hat{\gamma}做一些限制,以保证我们解是唯一的。这里为了简便取γ^=1\hat{\gamma}=1,这样的意义是将全局的函数间隔定义为 1 ,也即是将离超平面最近的点的距离定义为1ω\frac{1}{||\omega||}。这里解释一下为什么这么定义,因为求解1ω\frac{1}{||\omega||}的最大值相当于求12ω2\frac{1}{2}||\omega||^2的最小值,因此改写的结果为:

minγ,ω,b>12ω2 min_{\gamma,\omega,b}->\frac{1}{2}||\omega||^2

y(i)(ωTx+b)1 y^{(i)}(\omega^Tx+b) \geq 1

这下定义变成只有线性约束了,而且是个典型的二次规划问题(目标函数是自变量的二次函数),利用算法可以轻松求解。

拉格朗日对偶

含有等式约束形式的求解最值

这里需要用到微积分知识中的拉格朗日乘子法,它可以用来求解像这样的优化问题,例如在满足一定数量的约束条件的前提下,求解最小化、最大化问题,在这里先简要的介绍一下它的一种一般化的形式。拉格朗日乘子法是这样的:假设有一个函数f(ω)f(\omega),你想使他最大化或者最小化,与此同时需要满足一些约束条件:

minω>f(ω) min_{\omega}->f(\omega)

对于每个 ii,必须保证约束函数的值为0:

hi(ω)=0,i=1,2,...,l h_i(\omega)=0,i=1,2,...,l

给定这些约束,我可以写成向量的形式,将整个向量表示成h(ω)h(\omega)

[h1(ω)h2(ω)...hl(ω)]=0 \begin{bmatrix} h_1(\omega) \\ h_2(\omega) \\ ... \\ h_l(\omega) \\ \end{bmatrix} = \overrightarrow{0}

上面表示所有的元素都是 00 向量。如果像求解这个最优化问题,利用拉格朗日乘子法,首先应该创建一个拉格朗日算子:

Γ(ω,β)=f(ω)+i=1lβihi(ω) \Gamma(\omega,\beta)=f(\omega)+\sum_{i=1}^l\beta_ih_i(\omega)

它应该等于原始的目标函数加上这些限制函数的线性组合,这些参数βi\beta_i被称为拉格朗日算子,然后解决这个问题的方法是,对每一个原始值求偏导之后将其设为0:

Γωi=0;Γβi=0 \frac{\partial_{\Gamma}}{\partial_{\omega_i}}=0;\frac{\partial_{\Gamma}}{\partial_{\beta_i}}=0

分别对ω\omegaβ\beta求偏导,使其偏导数等于0,理论上可以解出一个ww^*最优解,是这个最优解的必要条件是:存在β\beta^*使得这些偏导数的值为0。所以根据这个结论,求解的过程是:

  1. 用拉格朗日乘子法创建一个拉格朗日算子
  2. 之后相对于原始参数ω\omega和拉格朗日算子β\beta求偏导数,并令偏导数等于0
  3. 之后对方程组进行求解,最后检查下得到的解是否确实为一个最小值

至于为什么引入拉格朗日乘子法可以求出极值,原因是f(ω)f(\omega)dωd_{\omega}变化方向受其他不等式的约束,dωd_{\omega}的变化方向与f(ω)f(\omega)的梯度垂直时才能获得极值,而且在极值处,f(ω)f(\omega)的梯度与其他等式梯度的线性组合平行,因此他们之间存在线性关系。(kkt条件)

含不等式约束形式的求解最值

然后我们探讨有不等式约束的极值问题求法 ,假设不仅仅存在约束条件hi(ω)=0h_i(\omega)=0,还存在约束条件gi(ω)0g_i(\omega)\leq 0,问题如下所示 :

minω>f(ω) min_{\omega}->f(\omega)

对于每个 ii,必须保证约束函数h(ω)h(\omega)的值为0:

hi(ω)=0,i=1,2,...,l h_i(\omega)=0,i=1,2,...,l

对于每个 ii,必须保证约束函数g(ω)g(\omega)的值小于等于0:

gi(ω)0,i=1,2,...,k g_i(\omega)\leq 0,i=1,2,...,k

给定这些约束,我可以写成向量的形式,可以用向量表示成:

[h1(ω)h2(ω)...hl(ω)]=0 \begin{bmatrix} h_1(\omega) \\ h_2(\omega) \\ ... \\ h_l(\omega) \\ \end{bmatrix} = \overrightarrow{0}

[g1(ω)g2(ω)...gk(ω)]0 \begin{bmatrix} g_1(\omega) \\ g_2(\omega) \\ ... \\ g_k(\omega) \\ \end{bmatrix} \leq \overrightarrow{0}

在这种情况下,既有等式约束条件也有不等式约束条件,那么利用拉格朗日乘子法,首先应该创建两个拉格朗日算子:

Γ(ω,α,β)=f(ω)+i=1kαigi(ω)+i=1lβihi(ω) \Gamma(\omega,\alpha,\beta)=f(\omega)+\sum_{i=1}^k\alpha_ig_i(\omega)+\sum_{i=1}^l\beta_ih_i(\omega)

这里的αi\alpha_iβi\beta_i都是拉格朗日算子。如果按这个公式和之前的方法求解,即求解最小值minf(ω)min f(\omega)会出现问题。因为我们求解的是最小值,而这里的gi(ω)0g_i(\omega) \leq 0,我们可以将αi\alpha_i调整成很大的正值,来使最后的函数结果是负无穷。因此我们需要排除这种情况, 即需要定义下面的函数:

θP(ω)=max(α,β:αi0)Γ(ω,α,β) \theta_P(\omega)=max_{(\alpha,\beta:\alpha_i \geq 0)} \Gamma(\omega,\alpha,\beta)

以上公式,假设gi(ω)0g_i(\omega) \geq 0或者hi(ω)0h_i(\omega) \neq 0,那么可以调整参数αi\alpha_iβi\beta_i使得θP(ω)\theta_P(\omega)的最大值为正无穷。

但是当gi(ω)g_i(\omega)hi(ω)h_i(\omega)满足约束条件gi(ω)0g_i(\omega)\leq 0hi(ω)=0h_i(\omega)=0时,θp(ω)\theta_p(\omega)的最大值为f(ω)f(\omega)。所以上面式子可知,当gi(ω)0,hi(ω)0g_i(\omega) \geq 0,h_i(\omega) \neq 0θP(ω)=\theta_P(\omega)=\infty,当gi(ω)0,hi(ω)=0g_i(\omega)\leq 0,h_i(\omega)=0θP(ω)=f(ω)\theta_P(\omega)=f(\omega)

θP(ω)={f(ω),gi(ω)0,hi(ω)=0,gi(ω)0,hi(ω)0 \theta_P(\omega)= \begin{cases} f(\omega), & g_i(\omega)\leq 0,h_i(\omega)=0 \\ \infty, & g_i(\omega) \geq 0,h_i(\omega) \neq 0 \end{cases}

这样原来要求的minf(ω)min f(\omega)可以转换成求minθP(ω)min \theta_P(\omega),因为θP(ω)\theta_P(\omega)的最小值为f(ω)f(\omega)f(ω)f(\omega)越小则θP(ω)\theta_P(\omega)越小,即求minf(ω)min f(\omega)等于求minθP(ω)min \theta_P(\omega)

minωθP(ω)=minωmax(α,β:αi0)Γ(ω,α,β) min_{\omega} \theta_P(\omega)=min_{\omega} max_{(\alpha,\beta:\alpha_i \geq 0)} \Gamma(\omega,\alpha,\beta)

拉格朗日对偶步骤

下面使用pp^*来表示minωθP(ω)min_{\omega} \theta_P(\omega),如果直接求解,首先面对的是两个参数α,β\alpha,\beta,这个过程不容易求解。因此这里引入拉格朗日对偶,即函数θP\theta_P的对偶函数θD\theta_D,它是一个以α\alphaβ\beta为变量的函数:

θD(α,β)=minωΓ(ω,α,β) \theta_D(\alpha,\beta)=min_{\omega} \Gamma(\omega,\alpha,\beta)

由求解θP(ω)\theta_P(\omega)的最小值minωθP(ω)min_{\omega} \theta_P(\omega)的推理步骤可知,θD(α,β)\theta_D(\alpha,\beta)求解最大值的函数为

max(α,β:αi0)θD(α,β)=max(α,β:αi0)minωΓ(ω,α,β) max_{(\alpha,\beta:\alpha_i \geq 0)} \theta_D(\alpha,\beta)=max_{(\alpha,\beta:\alpha_i \geq 0)} min_{\omega} \Gamma(\omega,\alpha,\beta)

这个问题是原问题的对偶问题,相对于原问题只是更换了maxmaxminmin的顺序,而一般更换maxmaxminmin顺序总有如下式子成立:

max(min(x))min(max(x)) max (min(x)) \leq min (max(x))

所以有:

dp d^* \leq p^*

d=max(α,β:αi0)(minωΓ(ω,α,β))minω(max(α,β:αi0)Γ(ω,α,β))=p d^*=max_{(\alpha,\beta:\alpha_i \geq 0)} (min_{\omega} \Gamma(\omega,\alpha,\beta)) \leq min_{\omega} (max_{(\alpha,\beta:\alpha_i \geq 0)} \Gamma(\omega,\alpha,\beta))=p^*

下面会解释在什么条件下两者会相等d=pd^*=p^*

假设f(ω)f(\omega)gi(ω)g_i(\omega)都是凸函数,hi(ω)=αiTω+bih_i(\omega)=\alpha_i^T\omega+b_i,并且存在ω\omega使得所有的ii都有gi(ω)<0g_i(\omega)<0。在这种假设下,一定存在ω,α,β\omega^*,\alpha^*,\beta^*使得ω\omega^*是原问题pp^*的解,α,β\alpha^*,\beta^*是对偶问题dd^*的解,以及d=p=Γ(ω,α,β)d^*=p^*=\Gamma(\omega^*,\alpha^*,\beta^*),这时ω,α,β\omega^*,\alpha^*,\beta^*满足kkt条件:

Γ(ω,α,β)ωi=0,i=1,2,...,n \frac{\partial_{\Gamma(\omega^*,\alpha^*,\beta^*)}}{\partial_{\omega_i}}=0,i=1,2,...,n

Γ(ω,α,β)βi=0,i=1,2,...,l \frac{\partial_{\Gamma(\omega^*,\alpha^*,\beta^*)}}{\partial_{\beta_i}}=0,i=1,2,...,l

αigi(ω)=0,i=1,2,...,k \alpha_i^*g_i(\omega^*)=0,i=1,2,...,k

gi(ω)0,i=1,2,...,k g_i(\omega^*) \leq 0,i=1,2,...,k

α0,i=1,2,...,k \alpha^* \geq 0,i=1,2,...,k

如果ω,α,β\omega^*,\alpha^*,\beta^*满足了kkt条件,那么他们就是原问题和对偶问题的解。而αigi(ω)=0,i=1,2,...,k\alpha_i^*g_i(\omega^*)=0,i=1,2,...,k被称作是kkt条件,这个条件隐含了如果α>0\alpha^*>0,那么gi(ω)=0g_i(\omega^*)=0。也就是说,gi(ω)=0g_i(\omega^*)=0时,ω\omega处于边界上,而当α=0\alpha^*=0时,其gi(ω)0g_i(\omega^*) \leq 0,即ω\omega不在边界上在可行域内。

最优函数间隔器

重新回到 svm 的优化问题,在上面我们需要优化的问题是:

minγ,ω,b>12ω2 min_{\gamma,\omega,b}->\frac{1}{2}||\omega||^2

y(i)(ωTx(i)+b)1,i=1,2,...,m y^{(i)}(\omega^Tx^{(i)}+b) \geq 1 ,i=1,2,...,m

这里将约束条件改成:

gi(ω,b)=y(i)(ωTx(i)+b)+10,i=1,2,...,m g_i(\omega,b)=-y^{(i)}(\omega^Tx^{(i)}+b)+1 \leq 0 ,i=1,2,...,m

kkt条件可知,如果αi>0\alpha_i > 0就 一定意味着gi(ω,b)=0g_i(\omega,b)=0(因为 αigi(ω)=0,i=1,2,...,k\alpha_i^*g_i(\omega^*)=0,i=1,2,...,k ),也就是存在训练样本(xi,yi)(x_i,y_i)使得函数间隔为1,即gi(ω,b)=y(i)(ωTx(i)+b)+1=0g_i(\omega,b)=-y^{(i)}(\omega^Tx^{(i)}+b)+1=0。它到底表示了什么可以用图展示一下:

算法原理详细推导与实现(四):支持向量机(上)

你有一些训练样本和一个分隔超平面,根据上面的假设αi>0\alpha_i > 0(换个说法是αi0\alpha_i \neq 0)就一定会有函数间隔为1的样本,即上图中虚线部分,这些里超平面最近的样本。在这个用图展示的例子中,所有离超平面较远样本的函数间隔都大于1。

从上面图形可以看出:通常情况下,可以发现只有很少数量的训练样本函数间隔等于1,在上面的图中只有3个样本的函数间隔等于1,只有少量的样本到超平面的距离是最小距离,这些样本我们称之为支持向量,支持向量机的支持向量就是这个意思

支持向量的数量一般都会很少,即大多数情况下拉格朗日算子αi=0\alpha_i =0,如果αi=0\alpha_i = 0,那么其对应的样本就可能不是支持向量(gi(ω)0g_i(\omega) \leq 0)。

回到上面的优化问题,由于只有gi(ω)g_i(\omega),所以上面的拉格朗日函数:

Γ(ω,α,β)=f(ω)+i=1kαigi(ω)+i=1lβihi(ω) \Gamma(\omega,\alpha,\beta)=f(\omega)+\sum_{i=1}^k\alpha_ig_i(\omega)+\sum_{i=1}^l\beta_ih_i(\omega)

变成:

Γ(ω,α)=f(ω)+i=1mαigi(ω) \Gamma(\omega,\alpha)=f(\omega)+\sum_{i=1}^m\alpha_ig_i(\omega)

    \implies

Γ(ω,b,α)=12ω2i=1mαi[y(i)(ωTx(i)+b)1] \Gamma(\omega,b,\alpha)=\frac{1}{2}||\omega||^2-\sum_{i=1}^m\alpha_i[y^{(i)}(\omega^Tx^{(i)}+b)-1]

注意到这里只有 αi\alpha_i 没有 βi\beta_i 是因为原问题中没有等式约束,只有不等式约束。

下面按照对偶问题的求解步骤,即需要定义下面的函数::

d=max(α,β:αi0)minωΓ(ω,α,β) d^*=max_{(\alpha,\beta:\alpha_i \geq 0)} min_{\omega} \Gamma(\omega,\alpha,\beta)

首先求解最小值minωΓ(ω,α,β)min_{\omega} \Gamma(\omega,\alpha,\beta),对于固定的αi\alpha_iΓ(ω,α,β)\Gamma(\omega,\alpha,\beta)的最小值只与ω\omegabb有关。所以分别对ω\omegabb求偏导:

ωΓ(ω,b,α)=ωi=1mαiy(i)x(i)=0 \nabla_{\omega}\Gamma(\omega,b,\alpha)=\omega-\sum^m_{i=1}\alpha_iy^{(i)}x^{(i)}=0

    \implies

ω=i=1mαiy(i)x(i) \omega=\sum^m_{i=1}\alpha_iy^{(i)}x^{(i)}

上面得到Γ(ω,α,β)\Gamma(\omega,\alpha,\beta)最小值时ω\omega的取值。

bb求偏导得到:

Γ(ω,b,α)bi=i=1mαiy(i)=0 \frac{\partial_{\Gamma(\omega,b,\alpha)}}{\partial_{b_i}}=\sum^m_{i=1}\alpha_iy^{(i)}=0

将上面求偏导得到的两个式子,即代入到如下拉格朗日的函数中:

Γ(ω,b,α)=12ω2i=1mαi[y(i)(ωTx(i)+b)1]=12ωTωi=1mαiy(i)ωTx(i)i=1mαiy(i)b+i=1mαi=12ωTi=1mαiy(i)x(i)i=1mαiy(i)ωTx(i)i=1mαiy(i)b+i=1mαi=12ωTi=1mαiy(i)x(i)ωTi=1mαiy(i)x(i)i=1mαiy(i)b+i=1mαi=12ωTi=1mαiy(i)x(i)i=1mαiy(i)b+i=1mαi=12(i=1mαiy(i)x(i))Ti=1mαiy(i)x(i)bi=1mαiy(i)+i=1mαi=12i=1mαiy(i)(x(i))Ti=1mαiy(i)x(i)bi=1mαiy(i)+i=1mαi=12i=1,j=1mαiy(i)(x(i))Tαjy(j)x(j)bi=1mαiy(i)+i=1mαi=i=1mαi12i=1,j=1mαiαjy(i)y(j)(x(i))Tx(j)bi=1mαiy(i) \begin{aligned} \Gamma(\omega,b,\alpha)&=\frac{1}{2}||\omega||^2-\sum_{i=1}^m\alpha_i[y^{(i)}(\omega^Tx^{(i)}+b)-1] \\ &=\frac{1}{2}\omega^T\omega-\sum_{i=1}^m\alpha_iy^{(i)}\omega^Tx^{(i)}-\sum_{i=1}^m\alpha_iy^{(i)}b+\sum_{i=1}^m\alpha_i \\ &=\frac{1}{2}\omega^T\sum^m_{i=1}\alpha_iy^{(i)}x^{(i)}-\sum_{i=1}^m\alpha_iy^{(i)}\omega^Tx^{(i)}-\sum_{i=1}^m\alpha_iy^{(i)}b+\sum_{i=1}^m\alpha_i \\ &=\frac{1}{2}\omega^T\sum^m_{i=1}\alpha_iy^{(i)}x^{(i)}-\omega^T\sum_{i=1}^m\alpha_iy^{(i)}x^{(i)}-\sum_{i=1}^m\alpha_iy^{(i)}b+\sum_{i=1}^m\alpha_i \\ &=-\frac{1}{2}\omega^T\sum^m_{i=1}\alpha_iy^{(i)}x^{(i)}-\sum_{i=1}^m\alpha_iy^{(i)}b+\sum_{i=1}^m\alpha_i \\ &=-\frac{1}{2}(\sum^m_{i=1}\alpha_iy^{(i)}x^{(i)})^T\sum^m_{i=1}\alpha_iy^{(i)}x^{(i)}-b\sum_{i=1}^m\alpha_iy^{(i)}+\sum_{i=1}^m\alpha_i \\ &=-\frac{1}{2}\sum^m_{i=1}\alpha_iy^{(i)}(x^{(i)})^T\sum^m_{i=1}\alpha_iy^{(i)}x^{(i)}-b\sum_{i=1}^m\alpha_iy^{(i)}+\sum_{i=1}^m\alpha_i \\ &=-\frac{1}{2}\sum^m_{i=1,j=1}\alpha_iy^{(i)}(x^{(i)})^T\alpha_jy^{(j)}x^{(j)}-b\sum_{i=1}^m\alpha_iy^{(i)}+\sum_{i=1}^m\alpha_i \\ &=\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum^m_{i=1,j=1}\alpha_i\alpha_jy^{(i)}y^{(j)}(x^{(i)})^Tx^{(j)}-b\sum_{i=1}^m\alpha_iy^{(i)} \end{aligned}

最后得到:

Γ(ω,b,α)=i=1mαi12i=1,j=1mαiαjy(i)y(j)(x(i))Tx(j)bi=1mαiy(i) \Gamma(\omega,b,\alpha)=\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum^m_{i=1,j=1}\alpha_i\alpha_jy^{(i)}y^{(j)}(x^{(i)})^Tx^{(j)}-b\sum_{i=1}^m\alpha_iy^{(i)}

(x(i))Tx(j)(x^{(i)})^Tx^{(j)} 即为向量内积,简化表达为<x(i),x(j)><x^{(i)},x^{(j)}>

由于前面知道,对bb求偏导时i=1mαiy(i)=0\sum_{i=1}^m\alpha_iy^{(i)}=0时可以使bb取得最小值,所以最后一项bi=1mαiy(i)b\sum_{i=1}^m\alpha_iy^{(i)}的值为0,最小值minωΓ(ω,α,β)min_{\omega} \Gamma(\omega,\alpha,\beta)的式子转化为:

Γ(ω,b,α)=i=1mαi12i=1,j=1mαiαjy(i)y(j)<x(i),x(j)> \Gamma(\omega,b,\alpha)=\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum^m_{i=1,j=1}\alpha_i\alpha_jy^{(i)}y^{(j)}<x^{(i)},x^{(j)}>

该式子只剩下α\alpha是未知变量,现在利用拉格朗日对偶函数求解未知函数α\alpha

而对于原有拉格朗日对偶函数:

d=max(α,β:αi0)minωΓ(ω,α,β) d^*=max_{(\alpha,\beta:\alpha_i \geq 0)} min_{\omega} \Gamma(\omega,\alpha,\beta)

所以原有对偶问题可以定义为:

maxαΓ(ω,b,α)=i=1mαi12i=1,j=1mαiαjy(i)y(j)<x(i),x(j)> max_{\alpha}\Gamma(\omega,b,\alpha)=\sum_{i=1}^m\alpha_i-\frac{1}{2}\sum^m_{i=1,j=1}\alpha_i\alpha_jy^{(i)}y^{(j)}<x^{(i)},x^{(j)}>

αi0,i=1,2,...,m \alpha_i \geq 0,i=1,2,...,m

i=1mαiy(i)=0 \sum_{i=1}^m\alpha_iy^{(i)}=0

综上所述,只要求出α\alpha,就可以根据公式:

ω=i=1mαiy(i)x(i) \omega=\sum^m_{i=1}\alpha_iy^{(i)}x^{(i)}

求得ω\omega,一旦求出了α\alphaω\omega,就可以很容易的求出bb,如下图所示,已知ω\omega可以确定超平面的方向,如下所示:

算法原理详细推导与实现(四):支持向量机(上)

但是上图只有一个超平面,实际上在没确定参数bb之前,图中可能存在很多个超平面:

算法原理详细推导与实现(四):支持向量机(上)

只要知道是哪个超平面,就能求解bb的值,所以一旦确定α\alphaω\omega,就能很容易的求解出bb的值。

α\alphaω\omega带入原始优化问题中求解bb:

b=maxi:y(i)=1ωTx(i)+mini:y(i)=1ωTx(i)2 b=\frac{max_{i:y^{(i)}=-1}\omega^Tx^{(i)}+min_{i:y^{(i)}=1}\omega^Tx^{(i)}}{2}

对于这个公式的直观理解是,找到分类效果最差的正样本和分类效果最差最差的负样本,即离超平面最近的正样本和负样本,即分类效果最差,即如下的两条虚线:

算法原理详细推导与实现(四):支持向量机(上)

虚线除以2就能得到正确的分类超平面。

而前面所有的出发点都是ωTx+b\omega^Tx+b,根据求解得到αi\alpha_i,如果将:

ω=i=1mαiy(i)x(i) \omega=\sum^m_{i=1}\alpha_iy^{(i)}x^{(i)}

带入ωTx+b\omega^Tx+b可以得到:

ωTx+b=(i=1mαiy(i)x(i))Tx+b=i=1mαiy(i)<x(i),x>+b \begin{aligned} \omega^Tx+b&=(\sum^m_{i=1}\alpha_iy^{(i)}x^{(i)})^Tx+b \\ &=\sum^m_{i=1}\alpha_iy^{(i)}<x^{(i)},x>+b \end{aligned}

也就是说,以前新来的样本要分类,要首先根据ω\omegabb做一次线性运算来判断是正样本还是负样本。现在有了αi\alpha_i,就不需要先计算ω\omega,而是只需将信赖的样本和训练数据里面的所有样本做一次内积和即可。

且由kkt条件可知,只有αi>0\alpha_i>0的时候,也就是支持向量的时候才需要计算,αi=0\alpha_i=0的时候都是0,所以就是新样本只需要和所有的支持向量计算内积即可。

总结步骤

  1. 先确定间隔器,这里svm一般默认是几何间隔
  2. 由间隔器确定间隔函数
  3. 从间隔函数查看是否包含不等式约束形式
  4. 根据拉格朗日对偶步骤计算得到参数w、b

根据以上对偶问题的求解,需要在下一篇里面利用核函数解释。

数据和代码下载请关注公众号【 机器学习和大数据挖掘 】,后台回复【 机器学习 】即可获取