编程语言
首页 > 编程语言> > Python手撸机器学习系列(九):硬间隔SVM对偶形式求解

Python手撸机器学习系列(九):硬间隔SVM对偶形式求解

作者:互联网

硬间隔SVM对偶形式求解

原始形式梯度下降法求解请参考我的上一篇博客:硬间隔SVM原始形式梯度下降法求解

1、对偶形式求解原理

引入拉格朗日乘子法
L ( w , b , λ ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 N λ i ( 1 − y i ( w T x i + b ) ) L(w,b,\lambda) = \frac{1}{2}||w||^2+\displaystyle\sum_{i=1}^N\lambda_i(1-y_i(w^Tx_i+b)) L(w,b,λ)=21​∣∣w∣∣2+i=1∑N​λi​(1−yi​(wTxi​+b))
则原问题可以写作:
min ⁡ w , b   max ⁡ λ   L ( w , b , λ ) s . t . λ i ≥ 0 \min\limits_{w,b}\ \max\limits_{\lambda} \ L(w,b,\lambda) \\s.t. \lambda_i\geq 0 w,bmin​ λmax​ L(w,b,λ)s.t.λi​≥0
这样写的好处在于:任取一点 ( x i , y i ) (x_i,y_i) (xi​,yi​)

当 1 − y i ( w T x i + b ) > 0 1-y_i(w^Tx_i+b)>0 1−yi​(wTxi​+b)>0时, max ⁡ λ   L ( w , b , λ ) = + ∞ \max\limits_{\lambda}\ L(w,b,\lambda) = +\infin λmax​ L(w,b,λ)=+∞,而当当 1 − y i ( w T x i + b ) < = 0 1-y_i(w^Tx_i+b)<=0 1−yi​(wTxi​+b)<=0时, max ⁡ λ   L ( w , b , λ ) = 1 2 ∣ ∣ w ∣ ∣ 2 \max\limits_{\lambda}\ L(w,b,\lambda) = \frac{1}{2}||w||^2 λmax​ L(w,b,λ)=21​∣∣w∣∣2

这样 min ⁡ w , b   max ⁡ λ   L ( w , b , λ ) = min ⁡ w , b ( + ∞ , 1 2 ∣ ∣ w ∣ ∣ 2 ) = min ⁡ w , b 1 2 ∣ ∣ w ∣ ∣ 2 \min\limits_{w,b}\ \max\limits_{\lambda} \ L(w,b,\lambda) = \min\limits_{w,b} (+\infin,\frac{1}{2}||w||^2) = \min\limits_{w,b}\frac{1}{2}||w||^2 w,bmin​ λmax​ L(w,b,λ)=w,bmin​(+∞,21​∣∣w∣∣2)=w,bmin​21​∣∣w∣∣2

相当于把不符合条件的点给筛除,而且将约束条件写在了 L L L里,把带约束的原问题变为无约束的原问题

但现,我们首先就要面对带有需要求解的参数 w , b w,b w,b的方程,而 λ \lambda λ又是不等式约束,这个求解过程不好做。所以,我们需要使用拉格朗日函数对偶性,将最小和最大的位置交换一下,这样就变成了:
max ⁡ λ   min ⁡ w , b   L ( w , b , λ ) s . t . λ i ≥ 0 \max\limits_{\lambda}\ \min\limits_{w,b}\ L(w,b,\lambda) \\s.t. \lambda_i\geq 0 λmax​ w,bmin​ L(w,b,λ)s.t.λi​≥0
要实现这样的转化,需要满足两个条件:

  1. 是凸优化问题
  2. 满足KKT条件

显然我们以及满足了第一个条件,而要满足第二个条件,即要求:
{ ∂ L ∂ w = 0   ,   ∂ L ∂ b = 0 λ i ( 1 − y i ( w T x i + b ) ) = 0 λ i ≥ 0 1 − y i ( w T x i + b ) ≤ 0 \large\begin{cases}\large\frac{\partial L}{\partial w}=0\ ,\ \frac{\partial L}{\partial b }=0 \\ \lambda_i(1-y_i(w^Tx_i+b))=0 \\\lambda_i\geq0\\1-y_i(w^Tx_i+b)\leq0\end{cases} ⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧​∂w∂L​=0 , ∂b∂L​=0λi​(1−yi​(wTxi​+b))=0λi​≥01−yi​(wTxi​+b)≤0​
让我们重新回到原问题,对于 w , b w,b w,b而言, min ⁡ w , b L ( w , b , λ ) \min\limits_{w,b}L(w,b,\lambda) w,bmin​L(w,b,λ)是一个无约束问题,那么对他两求偏导就好了:

对 b b b求偏导, ∂ L ∂ b = ∑ i = 1 N λ i y i = 0 \frac{\partial L}{\partial b} = \displaystyle\sum_{i=1}^N\lambda_iy_i = 0 ∂b∂L​=i=1∑N​λi​yi​=0,其中( ∣ ∣ w ∣ ∣ 2 ||w||^2 ∣∣w∣∣2可以写作 w T w w^Tw wTw)

带入 L ( w , b , λ ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 N λ i ( 1 − y i ( w T x i + b ) ) L(w,b,\lambda) = \frac{1}{2}||w||^2+\displaystyle\sum_{i=1}^N\lambda_i(1-y_i(w^Tx_i+b)) L(w,b,λ)=21​∣∣w∣∣2+i=1∑N​λi​(1−yi​(wTxi​+b)),得:
L ( w , b , λ ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 N λ i − ∑ i = 1 N λ i y i w T x i L(w,b,\lambda) = \frac{1}{2}||w||^2+\displaystyle\sum_{i=1}^N\lambda_i-\displaystyle\sum_{i=1}^N\lambda_iy_iw^Tx_i L(w,b,λ)=21​∣∣w∣∣2+i=1∑N​λi​−i=1∑N​λi​yi​wTxi​
再对 w w w求导, ∂ L ∂ w = w − ∑ i = 1 N λ i y i x i = 0 \large\frac{\partial L}{\partial w} =w-\displaystyle\sum_{i=1}^N\lambda_iy_ix_i = 0 ∂w∂L​=w−i=1∑N​λi​yi​xi​=0,可得 w = ∑ i = 1 N λ i y i x i w = \displaystyle\sum_{i=1}^N\lambda_iy_ix_i w=i=1∑N​λi​yi​xi​

带入 L L L,得:
L ( w , b , λ ) = − 1 2 ∑ i = 1 N ∑ j = 1 N λ i λ j y i y j x i T x j + ∑ i = 1 N λ i L(w,b,\lambda) = -\frac{1}{2}\displaystyle\sum_{i=1}^N\displaystyle\sum_{j=1}^N \lambda_i\lambda_jy_iy_jx_i^Tx_j + \displaystyle\sum_{i=1}^N\lambda_i L(w,b,λ)=−21​i=1∑N​j=1∑N​λi​λj​yi​yj​xiT​xj​+i=1∑N​λi​
最后得到:
min ⁡ w , b   max ⁡ λ   L ( w , b , λ ) = − 1 2 ∑ i = 1 N ∑ j = 1 N λ i λ j y i y j x i T x j + ∑ i = 1 N λ i s . t .   λ i ≥ 0 \min\limits_{w,b}\ \max\limits_{\lambda} \ L(w,b,\lambda) = -\frac{1}{2}\displaystyle\sum_{i=1}^N\displaystyle\sum_{j=1}^N \lambda_i\lambda_jy_iy_jx_i^Tx_j + \displaystyle\sum_{i=1}^N\lambda_i\\s.t.\ \lambda_i\geq0 w,bmin​ λmax​ L(w,b,λ)=−21​i=1∑N​j=1∑N​λi​λj​yi​yj​xiT​xj​+i=1∑N​λi​s.t. λi​≥0
其中, λ = { λ 1 , λ 2 . . . , λ N } \lambda=\{\lambda_1,\lambda_2...,\lambda_N\} λ={λ1​,λ2​...,λN​}为一组向量

在求梯度时已经得到 w = ∑ i = 1 N λ i y i x i w = \displaystyle\sum_{i=1}^N\lambda_iy_ix_i w=i=1∑N​λi​yi​xi​,而对于支持向量 ( x k , y k ) (x_k,y_k) (xk​,yk​),总有 1 − y k ( w T x k + b ) = 0 1-y_k(w^Tx_k+b) = 0 1−yk​(wTxk​+b)=0,转化一下:
y k ( w T x k + b ) = 1 y k 2 ( w T x k + b ) = y k w T x k + b = y k b = y k − w T x k \begin{aligned} y_k(w^Tx_k+b ) &= 1\\ y_k^2(w^Tx_k+b)&=y_k\\ w^Tx_k+b &= y_k\\ b &= y_k - w^Tx_k \end{aligned} yk​(wTxk​+b)yk2​(wTxk​+b)wTxk​+bb​=1=yk​=yk​=yk​−wTxk​​
即最后可根据 λ \lambda λ算出 w w w和 b b b,即确定分离超平面。
而求解 λ \lambda λ,需要用到SMO算法

2、SMO算法求解 λ \lambda λ

待更

3、代码实现

待更

标签:yi,SVM,min,Python,max,sum,对偶,displaystyle,lambda
来源: https://blog.csdn.net/qq_43601378/article/details/122027005