SVM(Support Vector Machine)

以二元分类为例,假设有m个观测样本\left ( x^{(1)},y^{(1)} \right ), \ \left ( x^{(2)},y^{(2)} \right ), \ \cdots , \ \left ( x^{(m)},y^{(m)} \right ),每个样本都包含n个特征

x^{(i)}=\begin{bmatrix} x^{(i)}_{1}\\ x^{(i)}_{2}\\ \cdots \\ x^{(i)}_{n} \end{bmatrix}

与以往的(0,1)二元分类不同,将负类设为-1,正类不变,为1。当用线性的决策边界去划分两类时,

w ^{T}x^{(i)} + b\geqslant 1时,y^{(i)}=1 

划分为正类。

w ^{T}x^{(i)} + b\leqslant 1时,y^{(i)}=-1

划分为负类。

因此

y^{(i)}\left (w ^{T}x^{(i)}+b \right )\geqslant 1

SVM(Support Vector Machine)_第1张图片

最佳分类面为w ^{T}x+b =0,即夹在两条决策边界中间的直线。为了达到最佳的分类效果,要使两条决策边界之间的距离最大,而两类之间的距离由最靠近边界的点决定,即w ^{T}x+b =1w ^{T}x+b =-1来决定,即最大距离d

d=2\times \frac{\left | w ^{T}x+b \right |}{\left \| w\right \|}=\frac{2}{\left \| w\right \|}

使距离d=\frac{2}{\left \| w\right \|}最大,就是使\frac{\left \| w \right \|}{2}最小,即

\max\frac{2}{\left \| w\right \|}\rightarrow \min \frac{\left \| w \right \|^{2}}{2}

与Logistic回归类防止过拟合类似,将决策边界(分类面)的条件放宽,即

y^{(i)}\left (w ^{T}x^{(i)} +b \right )\geqslant 1-\xi ^{(i)} \ , \ \xi ^{(i)}\geqslant 0

\xi ^{(i)}为松驰项,表示允许有一些样本在边界外,但是不能过多,因此需要使

\min C\sum_{i=1}^{m}\xi ^{(i)}

SVM(Support Vector Machine)_第2张图片

要使\frac{\left \| w \right \|^{2}}{2}+ C\sum_{i=1}^{m}\xi ^{(i)}在约束条件

\left\{\begin{matrix}\sum_{i=1}^{m}\left (1-\xi ^{(i)}-y^{(i)}\left (w^{T}x^{(i)}+b \right ) \right )\leqslant 0\\\\\sum_{i=1}^{m}\xi ^{(i)}\geqslant 0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \end{matrix}\right.

达到最小。利用拉格朗日乘数法构造代价函数为

J(w, b ,\xi ,\lambda ,\mu )=\frac{1}{2}\sum _{j=1}^{n}w _{j}^{2}+ C\sum_{i=1}^{m}\xi ^{(i)}+\sum_{i=1}^{m}\lambda ^{(i)}\left [1-\xi ^{(i)}-y^{(i)}\left (w ^{T}x^{(i)}+b \right )\right ]-\sum_{i=1}^{m}\mu ^{(i)}\xi ^{(i)}

其中

\lambda ^{(i)}\geqslant 0 \ , \ \sum_{i=1}^{m}\lambda ^{(i)}\left [1-\xi ^{(i)}-y^{(i)}\left (w ^{T}x^{(i)}+b \right )\right ]\leqslant 0

\mu ^{(i)}\geqslant 0 \ , \ \sum_{i=1}^{m}\mu ^{(i)}\xi ^{(i)}\geqslant 0

因此为了使代价函数取得最小值,\lambda\mu需要取得最大值,即\max \lambda \ , \ \max \mu。 

分别对w,b ,\xi求偏导数为

\left\{\begin{matrix} \frac{\partial J}{\partial w_{j} }=w_{j}-\sum_{i=1}^{m}\lambda ^{(i)}y^{(i)}x^{(i)}_{j}=0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\ \\\frac{\partial J}{\partial b}=\sum_{i=1}^{m}\lambda ^{(i)}y{(i)}=0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\ \\ \frac{\partial J}{\partial \xi_{j}}=C-\lambda ^{(i)}-\mu ^{(i)} =0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\ \\ \lambda^{(i)}\left [1-\xi ^{(i)}-y^{(i)}\left (w ^{T}x^{(i)}+b \right ) \right ]=0 \ \ \ \ \ \ \ \ \ \ \\ \\ \mu ^{(i)}\xi ^{(i)}=0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \end{matrix}\right.

将其带入代价函数中可以得到

J(w,b ,\xi ,\lambda ,\mu )=\frac{1}{2}\sum _{j=1}^{n}w _{j}^{2}+\sum_{i=1}^{m}\lambda ^{(i)}-\sum_{i=1}^{m} \lambda ^{(i)} y^{(i)}\left (w ^{T}x^{(i)}+b \right )+ \sum_{i=1}^{m}\left (C-\mu ^{(i)}-\lambda ^{(i)}\right )\xi ^{(i)} \\ =\frac{1}{2}\sum_{j=1}^{n}\sum_{i=1}^{m}\sum_{k=1}^{m}\lambda ^{(i)}\lambda ^{(k)}y^{(i)}y^{(k)}x_{j}^{(i)}x_{j}^{(k)}+\sum_{i=1}^{m}\lambda ^{(i)}-\sum_{j=1}^{n}\sum_{i=1}^{m}\sum_{k=1}^{m}\lambda ^{(i)}\lambda ^{(k)}y^{(i)}y^{(k)}x_{j}^{(i)}x_{j}^{(k)} \\ =\sum_{i=1}^{m}\lambda ^{(i)}-\frac{1}{2}\sum_{j=1}^{n}\sum_{i=1}^{m}\sum_{k=1}^{m}\lambda ^{(i)}\lambda ^{(k)}y^{(i)}y^{(k)}x_{j}^{(i)}x_{j}^{(k)}

 \left\{\begin{matrix} J(\lambda)=\sum_{i=1}^{m}\lambda ^{(i)}-\frac{1}{2}\sum_{j=1}^{n}\sum_{i=1}^{m}\sum_{k=1}^{m}\lambda ^{(i)}\lambda ^{(k)}y^{(i)}y^{(k)}x_{j}^{(i)}x_{j}^{(k)} \\ \\0\leqslant \lambda^{(i)}\leqslant C \ , \ \sum_{i=1}^{m}\lambda ^{(i)}y{(i)}=0 \end{matrix}\right.

为了使\lambda^{(i)}都取得最大值,利用SMO算法(Sequential minimal optimization),每次变动两个参数,与此同时固定其余所有的参数。之所以选择变动两个参数,是因为有限制条件

\sum_{i=1}^{m}\lambda ^{(i)}y^{(i)}=0

因此,我们至少要变动两个参数才能保证满足这个限制条件。所以SMO算法就选取了最简单的情况,只变动两个参数。

J(\lambda)分成两个部分,一部分包含了变动参数\lambda^{(1)}, \lambda^{(2)},另一部分与变动参数无关,将其他参数\lambda^{(3)},\cdots ,\lambda^{(m)}看做是一个常数。

J(\lambda )=\lambda^{(1)}+\lambda^{(2)}+\sum_{i=3}^{m}\lambda^{(i)}-\frac{1}{2} \left (\lambda^{(1)}y^{(1)} \right )^{2}\sum_{j=1}^{n}\left ( x_{j}^{(1)} \right )^{2}-\frac{1}{2}\left (\lambda^{(2)}y^{(2)} \right )^{2}\sum_{j=1}^{n}\left ( x_{j}^{(2)} \right )^{2}-\lambda ^{(1)}y^{(1)}\lambda ^{(2)}y^{(2)}\sum_{j=1}^{n}x_{j}^{(1)}x_{j}^{(2)}-\lambda ^{(1)}y^{(1)}\sum _{j=1}^{n}x_{j}^{(1)}\sum_{i=3}^{m}\lambda^{(i)}y^{(i)}x_{j}^{(i)}-\lambda ^{(2)}y^{(2)}\sum _{j=1}^{n}x_{j}^{(2)} \sum_{i=3}^{m}\lambda^{(i)}y^{(i)}x_{j}^{(i)} -\frac{1}{2} \sum_{j=1}^{n}\sum_{i=3}^{m}\sum_{k=3}^{m}\lambda ^{(i)}\lambda ^{(k)}y^{(i)}y^{(k)}x_{j}^{(i)}x_{j}^{(k)}

化为向量形式为

J(\lambda )=\lambda^{(1)}+\lambda^{(2)}+\sum_{i=3}^{m}\lambda^{(i)}-\frac{1}{2}\left (\lambda^{(1)}y^{(1)} \right )^{2}\left ( x^{(1)} \right )^Tx^{(1)}-\frac{1}{2}\left (\lambda^{(2)}y^{(2)} \right )^{2}\left ( x^{(2)} \right )^Tx^{(2)}-\lambda ^{(1)}y^{(1)}\lambda ^{(2)}y^{(2)}\left ( x^{(1)} \right )^Tx^{(2)}-\left (\lambda ^{(1)}y^{(1)}\left (x^{(1)} \right )^{T}+\lambda ^{(2)}y^{(2)}\left (x^{(2)} \right )^{T} \right )\sum_{i=3}^{m}\lambda^{(i)}y^{(i)}x^{(i)}-\frac{1}{2} \sum_{i=3}^{m}\sum_{k=3}^{m}\lambda ^{(i)}\lambda ^{(k)}y^{(i)}y^{(k)}\left (x^{(i)} \right )^{T}x^{(k)}

其中变动参数部分J_{v}

J_{v}(\lambda^{(1)}, \lambda^{(2)})=\lambda^{(1)}+\lambda^{(2)}-\frac{1}{2}\left (\lambda^{(1)}y^{(1)} \right )^{2}\left ( x^{(1)} \right )^Tx^{(1)}-\frac{1}{2}\left (\lambda^{(2)}y^{(2)} \right )^{2}\left ( x^{(2)} \right )^Tx^{(2)}-\lambda ^{(1)}y^{(1)}\lambda ^{(2)}y^{(2)}\left ( x^{(1)} \right )^Tx^{(2)}-\left (\lambda ^{(1)}y^{(1)}\left (x^{(1)} \right )^{T} +\lambda ^{(2)}y^{(2)}\left (x^{(2)} \right )^{T} \right )\sum_{i=3}^{m}\lambda^{(i)}y^{(i)}x^{(i)}

常数部分J_{c}(\lambda^{(3)},\cdots ,\lambda^{(m)})

J_{c}(\lambda^{(3)},\cdots ,\lambda^{(m)})=\sum_{i=3}^{m}\lambda^{(i)}-\frac{1}{2} \sum_{i=3}^{m}\sum_{k=3}^{m}\lambda ^{(i)}\lambda ^{(k)}y^{(i)}y^{(k)}\left (x^{(i)} \right )^{T}x^{(k)}

因此可以得出

\left\{\begin{matrix} J(\lambda )=J_{v}(\lambda^{(1)},\lambda^{(2)})+J_{c}(\lambda^{(3)},\cdots ,\lambda^{(m)})=J_{v}(\lambda^{(1)},\lambda^{(2)})+const \ \ (1)\\ \\ 0\leqslant \lambda ^{(1)},\lambda ^{(2)}\leqslant C \ \ \ , \ \ \lambda ^{(1)}y^{(1)}+\lambda ^{(2)}y^{(2)}=-\sum_{i=3}^{m}\lambda ^{(i)}y^{(i)}=\gamma \ \ \ \ \ (2)\end{matrix}\right.

根据(2)式可以用\lambda ^{(1)}来表示\lambda ^{(2)}

\lambda ^{(2)}=\frac{\gamma}{y^{(2)}}-\frac{\lambda ^{(1)}y^{(1)}}{y^{(2)}}

又因为y^{(2)}\in \left \{ -1,1 \right \},所以\lambda ^{(2)}也可以表示为

\lambda ^{(2)}=\gamma y^{(2)}-\lambda ^{(1)}y^{(1)}y^{(2)}  

\lambda ^{(2)}代入(1)式,记y^{(1)}y^{(2)}=s,可得

J(\lambda )=\lambda ^{(1)}+\gamma y^{(2)}-\lambda ^{(1)}s-\frac{1}{2}\left ( \lambda ^{(1)}y^{(1)} \right )^{2}\left ( x^{(1)} \right )^{T}x^{(1)}-\frac{1}{2}\left (\gamma \left (y^{(2)} \right )^{2}-\lambda ^{(1)}sy^{(2)} \right )^{2}\left ( x^{(2)} \right )^{T}x^{(2)}-\left (\lambda ^{(1)}s\gamma y^{(2)} -\left (\lambda ^{(1)} s\right )^{2} \right )\left ( x^{(1)} \right )^{T}x^{(2)}-\left (\lambda ^{(1)}y^{(1)}\left (x^{(1)} \right )^{T}+\gamma \left ( y^{(2)} \right )^{2}\left (x^{(2)} \right )^{T}-\lambda ^{(1)}sy^{(2)}\left (x^{(2)} \right )^{T} \right )\sum_{i=3}^{m}\lambda^{(i)}y^{(i)}x^{(i)}+const因为y^{(1)},y^{(2)},y^{(1)}y^{(2)}\in \left \{ -1,1 \right \},所以它们的平方项都为1,故J(\lambda)化简可得

J(\lambda )=\lambda ^{(1)}+\gamma y^{(2)}-\lambda ^{(1)}s-\frac{1}{2}\left ( \lambda ^{(1)} \right )^{2}\left ( x^{(1)} \right )^{T}x^{(1)}-\frac{1}{2}\left (\gamma ^{2}-2\gamma \lambda ^{(1)}y^{(1)}+\left (\lambda ^{(1)} \right )^{2} \right )\left ( x^{(2)} \right )^{T}x^{(2)}-\left (\lambda ^{(1)}\gamma y^{(1)} -\left (\lambda ^{(1)} \right )^{2} \right )\left ( x^{(1)} \right )^{T}x^{(2)}-\lambda ^{(1)}y^{(1)}\left (\left (x^{(1)} \right )^{T}- \left (x^{(2)} \right )^{T}\right )\sum_{i=3}^{m}\lambda^{(i)}y^{(i)}x^{(i)}-\gamma \left (x^{(2)} \right )^{T}\sum_{i=3}^{m}\lambda^{(i)}y^{(i)}x^{(i)}+const化简为标准型为

J(\lambda )=-\frac{1}{2}\left [\left ( x^{(1)} \right )^{T}x^{(1)}+ \left ( x^{(2)} \right )^{T}x^{(2)}-2\left ( x^{(1)} \right )^{T}x^{(2)} \right ]\left ( \lambda ^{(1)} \right )^{2}\\+\left [\gamma y^{(1)}\left ( x^{(2)} \right )^{T}x^{(2)}-\gamma y^{(1)}\left ( x^{(1)} \right )^{T}x^{(2)}-y^{(1)}\left (\left (x^{(1)} \right )^{T}- \left (x^{(2)} \right )^{T} \right )\sum_{i=3}^{m}\lambda^{(i)}y^{(i)}x^{(i)} +(1-s) \right ]\lambda ^{(1)}-\gamma \left (x^{(2)} \right )^{T} \sum_{i=3}^{m}\lambda^{(i)}y^{(i)}x^{(i)}+\gamma y^{(2)}-\frac{1}{2}\gamma ^{2}\left ( x^{(2)} \right )^{T}x^{(2)}+const \ \ \ \ \ \ \ \ \ (3)

平方项的系数为半正定,

\left ( x^{(1)} \right )^{T}x^{(1)}+ \left ( x^{(2)} \right )^{T}x^{(2)}-2\left ( x^{(1)} \right )^{T}x^{(2)}=\left ( x^{(1)}-x^{(2)} \right )^{T}\left ( x^{(1)}-x^{(2)} \right )\geqslant 0

因此由(3)可知J(\lambda )为开口向下的抛物线,在不考虑0\leqslant \lambda ^{(1)},\lambda ^{(2)}\leqslant C的情况下,J(\lambda )取得极大值所对应的\lambda^{(1)}

\left (\lambda^{(1)} \right )^{*}=\frac{\gamma y^{(1)}\left ( x^{(2)} \right )^{T}x^{(2)}-\gamma y^{(1)}\left ( x^{(1)} \right )^{T}x^{(2)}-y^{(1)}\left (\left (x^{(1)} \right )^{T}- \left (x^{(2)} \right )^{T} \right )\sum_{i=3}^{m}\lambda^{(i)}y^{(i)}x^{(i)} +(1-s) }{\left ( x^{(1)} \right )^{T}x^{(1)}+ \left ( x^{(2)} \right )^{T}x^{(2)}-2\left ( x^{(1)} \right )^{T}x^{(2)}} \\

因为w_{j}=\sum_{i=1}^{m}\lambda^{(i)}y^{(i)}x_{j}^{(i)},转化为向量形式为

w=\sum_{i=1}^{m}\lambda^{(i)}y^{(i)}x^{(i)}=\lambda^{(1)}y^{(1)}x^{(1)}+\lambda^{(2)}y^{(2)}x^{(2)}+\sum_{i=1}^{m}\lambda^{(i)}y^{(i)}x^{(i)}

(2)式带入可得

\sum_{i=1}^{m}\lambda^{(i)}y^{(i)}x^{(i)}=w-\lambda^{(1)}y^{(1)}x^{(1)}+\lambda^{(1)} y^{(1)} x^{(2)}-\gamma x^{(2)}

因此\left (\lambda^{(1)} \right )^{*}可以化简为

\left (\lambda^{(1)} \right )^{*}=\frac{y^{(1)}\left ( x^{(2)}-x^{(1)} \right )^{T}w+\lambda ^{(1)}\left \| x^{(1)}-x^{(2)} \right \|^{2}+(1-s) }{\left \| x^{(1)}-x^{(2)} \right \|^{2}} \\ =\lambda ^{(1)}+\frac{y^{(1)}w^{T}\left ( x^{(2)}-x^{(1)} \right )-y^{(1)}y^{(2)}+\left ( y^{(1)} \right )^{2}}{\left \| x^{(1)}-x^{(2)} \right \|^{2}} \\ =\lambda ^{(1)}+\frac{y^{(1)}\left (w^{T} x^{(2)}-y^{(2)}\right )-y^{(1)}\left (w^{T}x^{(1)}-y^{(1)} \right )}{\left \| x^{(1)}-x^{(2)} \right \|^{2}}

这个式子的右边只依赖于旧的\lambda ^{(1)},式子的左边为新的\left (\lambda ^{(1)} \right )^ {*},因此这个式子可以用来更新\lambda ^{(1)}。现在加入之前没有考虑的约束条件:

0\leqslant \lambda ^{(1)},\lambda ^{(2)}\leqslant C

此时分两种情况讨论

  • s=y^{(1)}y^{(2)}=-1

\lambda ^{(1)}y^{(1)}+\lambda ^{(2)}y^{(2)}=\gamma可以得出

-C\leqslant \gamma y^{(1)}\leqslant C

 \lambda ^{(1)}-\lambda ^{(2)}=\gamma y^{(1)}\Rightarrow \left\{\begin{matrix} \max (0,\gamma y^{(1)})\leqslant \lambda ^{(1)}\leqslant C+\min (0,\gamma y^{(1)}) \\ \\ \max (-\gamma y^{(1)},0)\leqslant \lambda ^{(2)}\leqslant C+\min (-\gamma y^{(1)},0) \end{matrix}\right.

  • s=y^{(1)}y^{(2)}=1

\lambda ^{(1)}y^{(1)}+\lambda ^{(2)}y^{(2)}=\gamma可以得出

0\leqslant \gamma y^{(1)}\leqslant 2C

 \lambda ^{(1)}+\lambda ^{(2)}=\gamma y^{(1)}\Rightarrow \left\{\begin{matrix} \max (0,\gamma y^{(1)}-C)\leqslant \lambda ^{(1)}\leqslant \min (C,\gamma y^{(1)}) \\ \\ \max (0.\gamma y^{(1)}-C)\leqslant \lambda ^{(2)}\leqslant \min (C,\gamma y^{(1)}) \end{matrix}\right.

如果\left (\lambda ^{(1)} \right )^ {*}落在上述区间内,那么就取\left (\lambda ^{(1)} \right )^{new}=\left (\lambda ^{(1)} \right )^{*};如果\left (\lambda ^{(1)} \right )^ {*}小于所允许的最小值,那么 \left (\lambda ^{(1)} \right )^{new}=\min\lambda ^{(1)}; 如果\left (\lambda ^{(1)} \right )^ {*}大于所允许的最大值,那么\left (\lambda ^{(1)} \right )^{new}=\max\lambda ^{(1)}。 

知道了新的\left (\lambda^{(1)} \right )^{new},我们就可以算出新的\left (\lambda ^{(2)} \right )^{new}=\gamma y^{(2)}-\left (\lambda ^{(1)} \right )^{new}y^{(1)}y^{(2)}。 如果\left (\lambda^{(2)} \right )^{new}按之前的规则取值,那么我们就可以保证\left (\lambda^{(2)} \right )^{new}一定会落在有效区间之内。 

你可能感兴趣的:(算法)