svm原理详细推导

article/2025/9/13 6:32:03

笔者在查阅了大量资料和阅读大佬的讲解之后,终于对svm有了比较深一点的认识,先将理解的推导过程分享如下:

本文主要从如下五个方面进行介绍:基本推导,松弛因子,核函数,SMO算法,小结五个方面以%%为分隔,同时有些地方需要解释或者注意一下即在画有---------符号的部分内。

本文主要介绍的是理论,并没有涉及到代码,关于代码的具体实现,可以在阅读完本文,掌握了SVM算法的核心内容后去看一下笔者另一篇SVM代码剖析:

https://blog.csdn.net/weixin_42001089/article/details/83420109

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

基本推导

svm原理并不难理解,其可以归结为一句话,就是最大化离超平面最近点(支持向量)到该平面的距离。

如下图

开门见山就是下面的最值优化问题:

max_{w,b}(min_{x_{i}} \,\frac{y_{i}(w^{T}x_{i}+b)}{\left | w \right |} )

注意

(1)这里的y_{i}就是标签假设这里是二分类问题,其值是1和-1,其保证了不论样本属于哪一类y_{i}(w^{T}x_{i}+b)都是大于0的

(2)y_{i}(w^{T}x_{i}+b)称为函数距离,,\frac{y_{i}(w^{T} x_{i}+b)}{\left | w\right |}称为几何距离,这里之所以要使用几何距离是因为,当w,b成倍增加时,函数距离也会相应的成倍的增加,而几何函数则不会

这里涉及到求两个最值问题,比较棘手,正如上面所说,几何距离不受成倍增加的影响,这里不妨就将最近点到超平面的函数距离设为1,自然其他非最近点的函数距离便是大于1,于是以上问题转化为:

\begin{matrix} max_{w,b} \, \frac{1}{\left | w \right |}\\ s.t \, \, \, y_{i}(wx_{i}+b)\geqslant 1 \end{matrix}\Rightarrow \begin{matrix} min_{w,b} \, \frac{1}{2}\left | w \right |^{2}\\ s.t \, \, \, y_{i}(wx_{i}+b)\geqslant 1 \end{matrix}

这是一个在有不等式约束下,最小值优化的问题,这里可以使用kkt条件

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

这里简单介绍一下kkt和拉格朗日乘子法(一般是用来求解最小值的优化问题的)

在求优化问题的时候,可以分为有约束和无约束两种情况。

针对有约束的情况又有两种情况即约束条件是等式或者是不等式

当是等式的时候:

\begin{matrix} min f(x)\\ s.t. \, g_{i}(x)=0 \, \, i=1,2,,,m\end{matrix}

首先写出其拉格朗日函数:

\iota (x,\alpha )=f(x)+\sum_{i=1}^{m}\alpha _{i}g(x)\, \, (1)

需满足的条件是:

\alpha _{i}\not\equiv 0

而当约束条件是不等式时,便可以使用kkt条件,其实kkt条件就是拉格朗日乘子法的泛化

\begin{matrix} minf(x)\\ s.t. \, g_{i}(x)=0\,\, \, \, i=1,2,,,m \\ h_{j}(x)\leqslant 0\, \, \, j=1,2,,,n \end{matrix}

同理首先写出拉格朗日函数:

{\color{Magenta} \iota (x,\alpha ,\theta )=f(x)+\sum_{i=1}^{m}\alpha _{i}g_{i}(x)+\sum_{j=1}^{n}\theta _{i}h_{i}(x)\, \, \, \, (2)}

好了,接着往下走介绍拉格朗日对偶性:

上面问题可以转化为(称为原始问题):

min_{x}\, max_{\alpha ,\theta }\iota (x,\alpha ,\theta )

为什么可以转化呢?这里是最难理解的:笔者还没有完全透彻的理解,这里试着解释一下吧,也是网上最流行的解释方法:

这里分两种情况进行讨论:

当g(x)或者h(x)不满足约束条件时:

那么显然:max_{\alpha ,\theta }(x,\alpha ,\theta )=+\infty因为当h(x)>0时我们可令\theta =+\infty,g(x)\not\equiv 0时我们令\alpha =-\infty或者\alpha =+\infty

当g(x)或者h(x)满足约束条件时:

max_{\alpha ,\theta }(x,\alpha ,\theta )=f(x)

综上所述:

max_{\alpha ,\theta }(x,\alpha ,\theta )=\begin{pmatrix} f(x)\, \, \, \, \, \, \, \, \, \, g(x)\, and \, \, h(x) satisfy\, constraints\\ +\infty \, \, \, \, \, \, \, \, \, others \end{pmatrix}

所以如果考虑极小值问题那么就可以转化为:

min_{x}\, max_{\alpha ,\theta }\iota (x,\alpha ,\theta )

还有一种比较直观的方法,这里不再证明,可以参考:如何通俗地讲解对偶问题?尤其是拉格朗日对偶lagrangian duality? - 知乎第二个回答

对偶问题:

上面关于拉格朗日最小最大值问题可以转化为求其对偶问题解决:

{\color{Magenta} {\color{Magenta} }{\color{Orchid} }max_{\alpha ,\theta }\, min_{x}\, \iota (x,\alpha ,\theta )}

两者关系:

假设原始问题的最优解是p^{*},其对偶问题的最优解是d^{*},那么容易得到:

min_{x}\, \, \iota (x,\alpha ,\theta )\leq \iota (x,\alpha ,\theta )\leqslant max_{\alpha ,\theta }\, \iota (x,\alpha ,\theta )\Rightarrow max_{\alpha ,\theta }\, min_{x}\, \iota (x,\alpha ,\theta )\, \leq min_{x}\, max_{\alpha ,\theta }\iota (x,\alpha ,\theta )\Rightarrow d^{*}\leq p^{*}

即其对偶问题的解小于等于原始问题的解,现在我们要通过其对偶问题来求的原始问题的解对吧,所以我们希望的是d^{*}= p^{*}

那么什么时候才能相等呢?这就必须满足的kkt条件:

{\color{Magenta} \left\{\begin{matrix} \frac{\partial \iota (x,\alpha ,\theta )}{\partial x}| _{x=x^{*}}=0\\ \frac{\partial \iota (x,\alpha ,\theta )}{\partial \alpha }|_{x=x^{*}}=0\\ \frac{\partial \iota (x,\alpha ,\theta )}{\partial \theta }|_{x=x^{*}}=0\\ \alpha _{i}\neq 0 \\ \theta _{j}\geqslant 0 \\ \theta _{j}h_{j}(x)|_{x=x^{*}}=0 \\ h_{j}(x)|_{x=x^{*}}\leq 0 \\ g_{i}(x)|_{x=x^{*}}=0 \end{matrix}\right.}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

说了这么多拉格朗日的东西,其实其本质作用就是,将有不等式约束问题转化为无约束问题(极小极大值问题),然后又进一步在满足kkt条件下将问题转化为了其对偶问题,使之更容易求解,下面要用到的就是上面紫色的部分,关于更深的拉格朗日求解问题大家可以去收集资料参看。

对应到SVM的拉格朗日函数便是:

\iota (w,b,\alpha )=\frac{1}{2}\left | w \right |^{2}{\color{Red} -}\sum_{i=1}^{m}\alpha _{i}\left [ y_{i}(w^{T}x_{i}+b)-1 \right ]

-----------------------------------------------------------------------------------------------------------------------------------------------------------

注意上面给的不等式约束是h_{j}(x)\leq 0即小于等于,而这里的不等式约束是大于等于所以红色部分是减法

----------------------------------------------------------------------------------------------------------------------------------------------------------

于是问题转化为:

min_{w,b} \, \, (max_{\alpha }(\iota (w,b,\alpha )))

根据对偶转化:

max_{\alpha } \, \, (min_{w,b }(\iota (w,b,\alpha )))

好啦,这里没什么说的就是根据kkt条件求偏导令其为0:

\begin{matrix} \frac{\partial \iota (w,b,\alpha )}{\partial w}=w-\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}=0\\\frac{\partial\iota (w,b,\alpha) }{\partial b}=\sum_{i=1}^{m}\alpha _{i}y_{i}=0\end{matrix}

于是就得到:

\begin{matrix} w=\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}\\ \sum_{i=1}^{m}\alpha _{i}y_{i}=0 \end{matrix}

将上述两公式带入到\iota (w,b,\alpha )如下:

\iota (w,b,\alpha )=\frac{1}{2}w^{T}w-\sum_{i=1}^{m}\alpha _{i}y_{i}w^{T}x_{i}-b\sum_{i=1}^{m}\alpha _{i}y_{i}+\sum_{i=1}^{m}\alpha _{i}=\frac{1}{2}w^{T}w-\sum_{i=1}^{m}\alpha _{i}y_{i}w^{T}x_{i}+\sum_{i=1}^{m}\alpha _{i}=\frac{1}{2}w^{T}\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}-w^{T}\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}+\sum_{i=1}^{m}\alpha _{i}=\sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}w^{T}\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}=\sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}x_{i}x_{j}

于是问题转化为:

\begin{matrix} max_{\alpha }\, \, \sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}x_{i}x_{j}\\ s.t. \, \, \alpha _{i}\geqslant 0 \\ \sum_{i=1}^{m}\alpha _{i}y_{i}=0 \end{matrix}

所以最后就得出这样的步骤:

1首先根据上面的最优化问题求出一些列的\alpha

2然后求出w和b\begin{matrix} w=\sum_{i=1}^{m}\alpha_{i} y_{i}x_{i}\\b=\frac{1}{m}\sum_{j=1}^{m}(y_{j} -\sum_{i=1}^{m}\alpha_{i} y_{i}x_{i}x_{j})\end{matrix}

所以当一个样本进来的时候即值便是:

y=\sum_{i=1}^{m}\alpha_{i} y_{i}x_{i}x+\frac{1}{m}\sum_{j=1}^{m}(y_{j} -\sum_{i=1}^{m}\alpha_{i} y_{i}x_{i}x_{j})

3根据如下进行分类:

sign(y)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

松弛因子

上面是SVM最基本的推导,下面说一下这种情况就是有一个点由于采集错误或者其他原因,导致其位置落在了别的离别当中,而svm是找最近的点,所以这时候找出的超平面就会过拟合,解决的办法就是忽略掉这些点(离群点),即假如松弛因子\beta _{i}\geqslant 0,使几何距离不那么大于1

数学化后的约束条件即变为:

min_{w,b,\beta } \, (\frac{1}{2}\left | w \right |^{2}+C\sum_{i=1}^{m}\beta_{i}) \\ s.t \, \, \, y_{i}(w^{T}x_{i}+b)\geqslant 1-\beta _{i}\\\beta _{i}\geq 0

这里简单来理解一些C的含义:这是一个在使用SVM时需要调的参数,\beta代表离群点到底离群点有多远,而C就是我们对这些点的重视程度,假设现在\sum_{i=1}^{m}\beta_{i}是一个定值,那么当C越大,就代表我们越重视这些点,越不想舍弃这些点,即极端的当C=+\infty时,优化是求min,则无解,即对应的直观理解就是:这时线性不可分,大家都混在一起,这时又不想舍弃任何一个点,自然就不能找到适合的超平面(当然可以使用核函数进行映射分类,后面说明)

接下来还是使用上面拉格朗日对偶问题进行求解,这里就不详细说明了,直接给出过程:

\begin{matrix} min_{w,b,\beta }\, \, \, max_{\alpha ,\gamma }(\frac{1}{2}|w|^{2}+C\sum_{i=1}^{m}\beta _{i}-\sum_{i=1}^{m}\alpha _{i}(y_{i}(wx_{i}+b)-1+\beta _{i})-\sum_{j=1}^{m}\gamma _{j}\beta _{j})\\ {\color{Red} \Rightarrow }\\ max_{\alpha ,\gamma }\, \, \, min_{w,b,\beta }(\frac{1}{2}|w|^{2}+C\sum_{i=1}^{m}\beta _{i}-\sum_{i=1}^{m}\alpha _{i}(y_{i}(wx_{i}+b)-1+\beta _{i})-\sum_{j=1}^{m}\gamma _{j}\beta _{j}) \end{matrix}

\iota (w,b,\beta ,\alpha ,\gamma )=\frac{1}{2}|w|^{2}+C\sum_{i=1}^{m}\beta _{i}-\sum_{i=1}^{m}\alpha _{i}(y_{i}(wx_{i}+b)-1+\beta _{i})-\sum_{j=1}^{m}\gamma _{j}\beta _{j}

求导令其为0:

\frac{\partial \iota (w,b,\beta ,\alpha ,\gamma )}{\partial w}=w-\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}=0\Rightarrow w=\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}

\frac{\partial \iota (w,b,\beta ,\alpha ,\gamma )}{\partial b}=-\sum_{i=1}^{m}\alpha _{i}y_{i}=0\Rightarrow \sum_{i=1}^{m}\alpha _{i}y_{i}=0

\frac{\partial \iota (w,b,\beta ,\alpha ,\gamma )}{\partial \beta }=0\Rightarrow C-\alpha _{i}-\gamma _{i}=0

将其带入最终问题可得:

max_{\alpha }\, \, \sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}x_{i}x_{j}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

这里得到的和没加松弛变量时是一样的

------------------------------------------------------------------------------------------------------------------------------------------------

对应的kkt条件为:

\sum_{i=1}^{m}\alpha _{i}y_{i}=0 \, \, \, (1)

\alpha _{i}\left [ y_{i}y(x) -(1-\beta _{i})\right ]=0\, \, \, \, (2)

\left [ y_{i}y(x) -(1-\beta _{i})\right ]\geq 0\, \, \, \, (3)

\gamma _{i}\beta _{i}=0\, \, (4)

\beta _{i}\geq 0\, \, \, (5)

\alpha _{i}\geq 0\, \, \, (6)

\gamma _{i}\geq 0\, \, \, (7)

C-\alpha _{i}-\gamma _{i}=0\, \, \, (8)

w=\sum_{i=1}^{m}\alpha _{i}y_{i}x_{i}\, \, \, \, (9)

注意如下几点:

一:对比最开始的kkt条件模板

{\color{Magenta} \left\{\begin{matrix} \frac{\partial \iota (x,\alpha ,\theta )}{\partial x}| _{x=x^{*}}=0\\ \frac{\partial \iota (x,\alpha ,\theta )}{\partial \alpha }|_{x=x^{*}}=0\\ \frac{\partial \iota (x,\alpha ,\theta )}{\partial \theta }|_{x=x^{*}}=0\\ \alpha _{i}\neq 0 \\ \theta _{j}\geqslant 0 \\ \theta _{j}h_{j}(x)|_{x=x^{*}}=0 \\ h_{j}(x)|_{x=x^{*}}\leq 0 \\ g_{i}(x)|_{x=x^{*}}=0 \end{matrix}\right.}

这里的(1)(8)(9)是求偏导的结果即一二三公式,(6)(7)是拉格朗日乘子即相当于模板的第五公式,(2)(4)相当于模板第六个公式,(3)(5)是原始约束条件即相当于模板的第七个公式

二:可以将kkt中部分条件进行总结归纳:(6)(7)(8)三个条件:

\begin{matrix} \gamma _{i}=C-\alpha _{i}\\ \gamma _{i}\geq 0 \end{matrix}\Rightarrow C-\alpha _{i}\geq 0\Rightarrow \alpha _{i}\leq C

\begin{matrix} \alpha _{i}\leq C\\ \alpha _{i}\geq 0 \end{matrix}\Rightarrow 0\leq \alpha _{i}\leq C

所以可以总结为:

\begin{matrix} max_{\alpha }\, \, \sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}x_{i}x_{j}\\ s.t. \, \, \sum_{i=1}^{m}\alpha _{i}y_{i}=0 \\ 0\leq \alpha _{i}\leq C \end{matrix}

可以看到这里和没加松弛变量相比,唯一不同的就是{\color{Red} \alpha }有了上界C,它代表着我们对那些离群点的重视程度

三:说一下\alpha _{i}取不同值时意义

对比模板

\theta _{i}^{*}> 0时,对应的h_{i}(x^{*})=0x^{*}边界点

\theta _{i}^{*}= 0时,对应的h_{i}(x^{*})< 0x^{*}非边界点

\alpha _{i}=0时:

由(8)可得:C-\alpha _{i}-\gamma _{i}=0\Rightarrow \gamma _{i}=C\Rightarrow \gamma _{i}> 0

又有公式(4)可得:\begin{pmatrix} \gamma _{i}> 0\\\gamma _{i}\beta _{i}=0 \end{pmatrix}\Rightarrow \beta _{i}=0

最后又公式(3)可得:\left [ y_{i}y(x) -(1-\beta _{i})\right ]\geq 0\Rightarrow y_{i}y(x) \geq 1

0< \alpha _{i}< C时:

C-\alpha _{i}-\gamma _{i}=0\Rightarrow \gamma _{i}=C-\alpha _{i}\Rightarrow \gamma _{i}> 0

同理\begin{pmatrix} \gamma _{i}> 0\\\gamma _{i}\beta _{i}=0 \end{pmatrix}\Rightarrow \beta _{i}=0

又(2)可得:

\begin{pmatrix} \alpha _{i}\left [ y_{i}y(x) -(1-\beta _{i})\right ]=0\\ 0< \alpha _{i}< C \end{pmatrix}\Rightarrow \left [ y_{i}y(x) -(1-\beta _{i})\right ]=0

最后:

\begin{pmatrix} y_{i}y(x) =(1-\beta _{i})\\ \beta _{i}=0 \end{pmatrix}\Rightarrow y_{i}y(x) =1

\alpha _{i}= C时:

C-\alpha _{i}-\gamma _{i}=0\Rightarrow \gamma _{i}=0

进而这里还是只能得到\beta _{i}\geq 0\begin{matrix} \gamma _{i}=0\\ \gamma _{i}\beta _{i}= 0 \\ \beta _{i} \geq 0\end{matrix}\Rightarrow \beta _{i} \geq 0

\left [ y_{i}y(x) -(1-\beta _{i})\right ]\geq 0\Rightarrow y_{i}y(x) \geq (1-\beta _{i})

最后:

\begin{pmatrix} y_{i}y(x) \geq (1-\beta _{i})\\ \beta _{i}\geq 0 \end{pmatrix}\Rightarrow y_{i}y(x) \leq 1

综上所述可以总结为:

\begin{matrix} \alpha _{i}=0\Leftrightarrow y_{i}y(x)\geq 1\\ 0< \alpha _{i}< C\Leftrightarrow y_{i}y(x)= 1 \\ \alpha _{i}=C\Leftrightarrow y_{i}y(x)\leq 1 \end{matrix}

在点在两条间隔线外则,对应前面的系数\alpha为0,在两条间隔线里面的对应的系数为C,在两条间隔线上的点对应的系数在0和C之间。

通过上面也可以看出,最后求出的所有\alpha按理说为0的居多,毕竟大部分数据点应该是在间隔线外的对吧

所以对应到松弛遍历这里的步骤就是:

1首先根据上面的最优化问题求出一些列的\alpha

2然后求出w和b \begin{matrix} w=\sum_{i=1}^{m}\alpha_{i} y_{i}x_{i}\\b=\frac{min_{i:y=1}w^{*}x_{i}+max_{i:y=-1}w^{*}x_{i}}{2}\end{matrix}

注意这里是随便取一个点i就可以算出b,但是实际中往往取所有点的平均

3得出超平面

注意这里说一下\alpha _{i}的意义,由前面基本推导的kkt部分讨论可知:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

核函数:

出现的背景:

对于一些线性不可分的情况,比如一些数据混合在一起,我们可以将数据先映射到高纬,然后在使用svm找到当前高纬度的超平面,进而将数据进行有效的分离,一个直观的例子:

图片来源七月算法

比如原来是:

y=\sum_{i=1}^{m}\alpha _{i}^{*}y_{i}x_{i}x+b

则现在为:

y=\sum_{i=1}^{m}\alpha _{i}^{*}y_{i}\Phi (x_{i})\Phi (x)+b\Rightarrow \sum_{i=1}^{m}\alpha _{i}^{*}y_{i}< \Phi (x_{i})\Phi (x)> +b

其中\Phi (x)就是映射公式,即先映射到高纬再进行内积

但是问题来了,那就是假设原始数据维度就好高,再进一步映射到高纬,那么最后的维度可能就非常之高,再进行内积等这一系列计算要求太高,很难计算。

因此我们可以令

\sum_{i=1}^{m}\alpha _{i}^{*}y_{i}< \Phi (x_{i})\Phi (x)> +b\Rightarrow \sum_{i=1}^{m}\alpha _{i}^{*}y_{i} \, \, K<x_{i},x> +b

这里的K< x_{i},x>便是核函数,其意义在于我们不用去映射到高纬再内积,而是直接在低纬使用一种核函数计算x_{i},x,使其结果和映射到高纬再内积效果一样,这就是核函数的威力,大部分是内积,而SVM的奇妙之处就在于所有的运算都可以写成内积的形式,但是这种核函数具体该怎么选取呢?别慌,已经有前辈们帮我们找到了很多核函数,我们直接拿过来用就可以啦。

下面介绍几种常见的吧:更多的大家可以自行查阅:

(1)线性核函数 :也是首选的用来测试效果的核函数
K(x_{i},x)=x_{i}\cdot x
其维度与原来相同,主要用于线性可分的情况,其实就是原始导出的结果
(2)多项式核函数 

K(x_{i},x)=[(x_{i}\cdot x)+1]^{m}
其实现将低维的输入空间映射到高纬的特征空间,但多项式的阶数也不能太高,否则核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度同样会大到无法计算。而且它还有一个缺点就是超参数过多
(3)径向基高斯(RBF)核函数 
K(x_{i},x)=exp(-\frac{\left \| x_{i}-x \right \|^{2}}{2\delta ^{2}})
高斯(RBF)核函数核函数性能较好,适用于各种规模的数据点,而且参数要少,因此大多数情况下优先使用高斯核函数。
(4)sigmoid核函数 

K(x_{i},x)=tanh(\eta < x_{i},x> +\theta )
不难看出这里有点深度学习当中,一个简单的神经网络层

总的来说就是,当样本足够多时,维度也足够高即本身维度已经满足线性可分,那么可以考虑使用线性核函数,当样本足够多但是维度不高时,可以考虑认为的增加一定的维度,再使用线性核函数,当样本也不多,维度也不高时,这时候可以考虑使用高斯(RBF)核函数。

关于SVM ,python中有一个机器学习库sklearn,其中集成了很多机器学习方法,包括SVM,笔者这里也做过一个简单直观的调用,可以参看python_sklearn机器学习算法系列之SVM支持向量机算法_爱吃火锅的博客-CSDN博客

再者就是我们虽然可以直接拿sklearn库下集成好的接口来用,但是其具体实现细节,还是有必要了解一下,换句话说:

上面我们最后得到的结果是:

\begin{matrix} max_{\alpha }\, \, \sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}x_{i}x_{j}\\ s.t. \, \, \sum_{i=1}^{m}\alpha _{i}y_{i}=0 \\ 0\leq \alpha _{i}\leq C \end{matrix}

我们求出一些列\alpha便可,可是\alpha具体怎么求呢?落实到代码上面应该怎么搞呢?下面就来说说这个事情
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

SMO算法

现在的问题是:

\begin{matrix} max_{\alpha }\, \, \sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}x_{i}x_{j}\\ s.t. \, \, \sum_{i=1}^{m}\alpha _{i}y_{i}=0 \\ 0\leq \alpha _{i}\leq C \end{matrix}

首先要明确我们的目的是求一些列的\alpha,其思路也是很简单就是固定一个参数即以此为自变量,然后将其他的变量看成常数,只不过因为这里\sum_{i=1}^{m}\alpha _{i}y_{i}=0约束条件,所以我们一次取出两个\alpha作为自变量进行优化,然后外面就是一个大的循环,不停的取不停的优化,知道达到某个条件(后面介绍)停止优化。

思路框架就是上面这么简单,下面来看一下理论方面的精确推导:

假设我们首先取出了\alpha _{1}\alpha _{2},那么后面的便可以整体视为一个常数即:

\alpha _{1}y_{1}+\alpha _{2}y_{2} = -\sum_{i=3}^{m}\alpha _{i}y_{i}\Rightarrow \alpha _{1}y_{1}+\alpha _{2}y_{2} =\zeta

先将\alpha _{1}\alpha _{2}表示出来,也很简单:

\alpha _{1}=(\zeta-\alpha _{2}y_{2})y_{1}

带入到原始优化的目标方程中可得:

\sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}x_{i}x_{j}=a\alpha _{2}^{2}+b\alpha _{2}+c

即关于\alpha _{2}的一元二次方程(其中a,b,c都是常数)

--------------------------------------------------------------------------------------------------------------------------------------------------------------

为什么是二元一次方程呢?很简单由原始优化目标可以看出基本单元就是\alpha _{i}\alpha _{j},然后就是组合相加,所以最高次数就是2次,前面还有单次项,后面有常数项,所以最后归结起来就是一个一元二次方程

-------------------------------------------------------------------------------------------------------------------------------------------------------------

好啦,求一元二次方程最值应该很简单啦吧,即:

\alpha _{2}=-\frac{b}{2a}

相应的根据\alpha _{1}=(\zeta-\alpha _{2}y_{2})y_{1}便可以求出\alpha _{1}

这样就完成啦一对\alpha值的优化,接着找下一对\alpha值就行优化即可

-------------------------------------------------------------------------------------------------------------------------------------------------------------

介绍到这里也许会发现还有一个约束条件没有用即:

0\leq \alpha _{i}\leq C

是的我们在算\alpha _{1}\alpha _{2}的时候,最后还应该加一步就是将其值约束到[0,C]

回到:

\alpha _{1}y_{1}+\alpha _{2}y_{2} =\zeta

我们分类讨论:

(1)当y_{1}y_{2}是同号时:

则是一个斜率为-1的直线即\alpha _{1}+\alpha _{2}=\$

那么可以画出如下图。横坐标是\alpha _{1},纵坐标是\alpha _{2},可以看到直线有如下两种情况

现在要保证范围,即\alpha _{2}的最大值在两种情况下分别是\$和C,最小值分别是0\$ -C

所以最后综合一下即

\begin{matrix} L=max(0,\$ -C)=max(0,\alpha _{1}+\alpha _{2}-C)\\ H=min(\$ ,C)=min(\alpha _{1}+\alpha _{2},C)\, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \end{matrix}

(2)当当y_{1}y_{2}是异号时:

则是一个斜率为1的直线即\alpha _{1}-\alpha _{2}=\$

那么可以画出如下图。横坐标是\alpha _{1},纵坐标是\alpha _{2},可以看到直线有如下两种情况

现在要保证范围,即\alpha _{2}的最大值在两种情况下分别是C-\$和C,最小值分别是0-\$

所以最后综合一下即

\begin{matrix} L=max(0,-\$ )=max(0,\alpha _{2}-\alpha _{1})\\ H=min(C-\$ ,C)=min(C-\alpha _{1}+\alpha _{2},C) \end{matrix}

所以在我们通过一元二次方程求得的\alpha _{2}并不是最终的\alpha _{2}而是经过以下:

\alpha ^{*}_{2}=\begin{Bmatrix} L\, \,\, \, \, \, \, \, \, \, \, \, if \, \, \, \,\alpha _{2}<L\\ \alpha _{2}\, \,\, \, \, \, \, \, \, \, if \, \, \, L\leq \alpha _{2}\leqslant H\\ H\,\, \, \, \, \, \, \, \, \, \, \, if \, \, \alpha _{2}> H \end{Bmatrix}

注意这里有时候L=H这代表\alpha _{1},\alpha _{2}都在边界(值等于0或者C)则不用对这一对\alpha进行优化啦,因为他们已经在边界啦,因此不再能够减少或者增大(其值太大会被强行赋值为H,同理太小为L),因此也就不值得再对他们进行优化啦,直接跳过寻找下一对需要优化的\alpha对即可

--------------------------------------------------------------------------------------------------------------------------------------------------------------

好的我们接着往下走,刚才说得到一个一元二次方程组那么系数a,b,c是多少呢?我们来求一下:

我们先将\alpha _{1}\alpha _{2}带入:

公式太多就不用编辑器啦,字迹有点潦草==

现在我们进一步化简一下v_{i}:

我们将本次要优化的参数标为*即规范一下就是:

相对应v_{i}中的\alpha没有*就代表使用上次结果的\alpha

好啦接下来要做的就像上面说的用\alpha _{2}表达式代替\alpha _{1},然后求导为0

最后我们要的结果就是红框的部分(其中s=y_{1}y_{2}

将w,v都带入便得到:

注意这里的\theta其实可以看成下角标1和2的平方差\left ( a-b \right )^{2}=a^{2}+b^{2}-2ab\geq 0

因为下面\theta又在分母不能为0,所以一般当\theta > 0时才有意义,我们才往下进行,否则跳过本次优化的\alpha

关于b的更新需要根据\alpha的取值来进行判断:

好啦,最最最最最最重要的一张图来啦,也是我们上面花了这么多力气得出的结果,也是我们最终程序设计的蓝图:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

最后小结理一下思路:

求解过程:

首先我们要优化的问题是:

min_{w,b,\beta } \, (\frac{1}{2}\left | w \right |^{2}+C\sum_{i=1}^{m}\beta_{i}) \\ s.t \, \, \, y_{i}(w^{T}x_{i}+b)\geqslant 1-\beta _{i}\\\beta _{i}\geq 0

然后利用拉格朗日对偶问题将问题转化为:

\begin{matrix} max_{\alpha }\, \, \sum_{i=1}^{m}\alpha _{i}-\frac{1}{2}\sum_{i,j=1}^{m}\alpha _{i}\alpha _{j}y_{i}y_{j}x_{i}x_{j}\\ s.t. \, \, \sum_{i=1}^{m}\alpha _{i}y_{i}=0 \\ 0\leq \alpha _{i}\leq C \end{matrix}

接着我们使用了SMO算法求解出了一系列\alpha进而得到了W和b的更新

核函数:

x_{i}x换成相应核函数的内积形式K<x_{i} ,x>

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

看到很多小伙伴私信和关注,为了不迷路,欢迎大家关注笔者的微信公众号,会定期发一些关于NLP的干活总结和实践心得,当然别的方向也会发,一起学习:


​​​​​​​


http://chatgpt.dhexx.cn/article/tYMr3U5C.shtml

相关文章

支持向量机SVM推导及求解过程

支持向量机是属于原创性、非组合的具有明显直观几何意义的分类算法&#xff0c;具有较高的准确率。 使用SVM算法的思路&#xff1a;&#xff08;1&#xff09;简单情况&#xff0c;线性可分情况&#xff0c;把问题转化为一个凸优化问题&#xff0c;可以用拉格朗日乘子法简化&am…

SVM 公式推导

1、SVM思想 &#xff08;1&#xff09;SVM算法的依据就是分类器B的分类间隔比分类器C的分类间隔大。这里涉及到第一个SVM独有的概念”分类间隔”。在保证决策面方向不变且不会出现错分样本的情况下移动决策面&#xff0c;会在原来的决策面两侧找到两个极限位置&#xff08;越过…

机器学习笔记之十二——SVM原理及推导

svm&#xff08;support vector machine&#xff09;是一种二分类算法&#xff0c;它的目标在于寻找一个能将两种点分离的直线或平面或超平面。 如图&#xff08;来自wiki&#xff09;&#xff1a; 图中的红线将两边数据点分开&#xff0c;这条线就是分割直线&#xff0c;同样…

DFS与DP算法

名词解释&#xff1a; DFS(Dynamic Plan)&#xff1a;动态规划 DFS(Depth First Search)&#xff1a;深度优先搜索 DFS与DP的关系 很多情况下&#xff0c;dfs和dp两种解题方法的思路都是很相似的&#xff0c;这两种算法在一定程度上是可以互相转化的。 想到dfs也就常常会想到dp…

​Python—数据结构与算法​---动态规划—DP算法(Dynamic Programing)

我们一路奋战&#xff0c; 不是为了改变世界&#xff0c; 而是为了不让世界改变我们。 目录 我们一路奋战&#xff0c; 不是为了改变世界&#xff0c; 而是为了不让世界改变我们。 动态规划——DP算法&#xff08;Dynamic Programing&#xff09; 一、&#x1f3d4;斐波那契…

XDOJ(智慧平台)--分配宝藏(用动态规划dp算法解决)(C语言)

------------------------------------------------------------ 作为西电渣渣&#xff0c;这是我第一次接触需要一些很明确的算法的题目。 第一次博客写废话较多hhh&#xff0c;可以直接到下面看分析 我在昨天晚上和舍友一起肝这道题&#xff0c;肝了一个晚上都没有解决&…

dp算法篇Day1

"多希望有人来陪我&#xff0c;度过末日啊~" 讲讲我为什么突然想更新这篇栏目。 想想自己也算 "系统" 接触计算机这个学科也有差不多一年了&#xff0c;回想起当初下定决心要全身心投入到这个专业或者说行业中来&#xff0c;现在到了这样的地步&#xff0c…

第十四周DP算法总结

这周自己主要再看DP算法的博客&#xff0c;感觉DP这一部分内容确实比之前的都要麻烦一些&#xff0c;最后攻克这一部分难题还是挺好的。 这周自己总结了一些题型&#xff0c;以及一些方法思路&#xff0c;最后再把动态规划和之前的分治和贪心做一下比较。下面是详细的总结。 动…

DP算法(Dynamic Programming,俗称动态规划)是最经典算法之一

DP算法&#xff08;Dynamic Programming,俗称动态规划&#xff09;是最经典算法之一.本笔记以耳熟能详的数塔问题为引子,深入讨论01背包的解决方法. 首先,如下图所示,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少&#xff1f; 这个问题,对…

DP算法:动态规划算法

步骤 &#xff08;1&#xff09;确定初始状态 &#xff08;2&#xff09;确定转移矩阵&#xff0c;得到每个阶段的状态&#xff0c;由上一阶段推到出来 &#xff08;3&#xff09;确定边界条件。 例题 蓝桥杯——印章&#xff08;python实现&#xff09; 使用dp记录状态&#x…

动态规划(DP)算法初识

先用大白话来说一下几种经典算法大概的意思&#xff1a; 贪心算法&#xff1a;我就一次机会&#xff0c;为了达到目的&#xff0c;其他的我啥也不考虑回溯算法&#xff1a;我有无数次机会&#xff0c;还能怕我有达不到目的的时候&#xff1f;动态规划算法&#xff1a;我能随意…

常用十大算法_动态规划算法(DP)

动态规划算法&#xff08;DP&#xff09; 高能预警&#xff1a;DP算法不容易理解&#xff0c;需要动脑筋查资料找例题 动态规划算法&#xff08;Dynamic Programming&#xff09;&#xff0c;是将复杂问题拆分成子问题&#xff0c;并在子问题的基础上&#xff0c;求解复杂问题…

动态规划算法(DP)

校招笔试面试前,大家一般都会先去牛客网上刷刷题,《剑指offer》,《leetcode》走起来,然后初次入手,发现很多不会,不会到什么程度呢,连个想法都没有,于是就去讨论区看答案,然后java大神,c++大神会给出花式解答,他们喜欢在答案前加一句,简单的dp算法,递归就可以解决…

【算法笔记】树形DP算法总结详解

0. 定义 树形DP&#xff0c;又称树状DP&#xff0c;即在树上进行的DP&#xff0c;是DP&#xff08;动态规划&#xff09;算法中较为复杂的一种。 1. 基础 令 f [ u ] f[u]~ f[u] 与树上顶点 u u u有关的某些数据&#xff0c;并按照拓扑序&#xff08;从叶子节点向上到根节点…

★动态规划(DP算法)详解

什么是动态规划&#xff1a;动态规划_百度百科 内容太多了不作介绍&#xff0c;重点部分是无后效性&#xff0c;重叠子问题&#xff0c;最优子结构。 问S->P1和S->P2有多少种路径数&#xff0c;毫无疑问可以先从S开始深搜两次&#xff0c;S->P1和S->P2找出所有路…

ubuntu安装qt

Ubuntu安装qt 到qt官网下载“qt-opensource-linux-x64-5.9.1.run” 分别安装g, build-essential, libglq-mesa-dev, libglu1-mesa-dev freeglut3-dev 输入指令&#xff1a;”sudo apt-get install g” -> “sudo apt-get install build-essential” -> “sudo apt-get i…

QT安装、构建套件(MSVC、MinGW)配置

QT安装、构建套件(MSVC、MinGW)配置 1. QT框架及QT Creator下载 登录QT官网-https://www.qt.io/download。 点击downloads for open source users 在页面最下方&#xff0c;点击Download the QT online Installer。 在安装网页的最下方处有一行小字 “We do recommend yo…

QT linux安装

转载地址&#xff1a;http://www.cnblogs.com/tangkaixuan/p/6504102.html 文章来自https://lug.ustc.edu.cn/sites/qtguide/ 1.4 Qt在Linux下安装 Qt在Linux系统里的安装要稍微复杂一些&#xff0c;因为Linux发行版众多&#xff0c;所以安装过程有些差异。 由于Linux系统都可…

Qt国内镜像安装

下载安装程序 https://download.qt.io/official_releases/online_installers/ 使用国内镜像打开安装程序 G:\下载\qt-unified-windows-x64-4.5.1-online.exe --mirror https://mirror.nju.edu.cn/qt清华源 https://mirrors.tuna.tsinghua.edu.cn/qt/online/qtsdkrepository/win…

Qt下载与安装

一、Qt和Qt Creator的区别 Qt是C的一个库&#xff0c;或者说是开发框架&#xff0c;里面集成了一些库函数&#xff0c;提高开发效率。 Qt Creator是一个IDE&#xff0c;就是一个平台&#xff0c;一个开发环境&#xff0c;类似的比如说VS&#xff0c;也可以进行Qt开发&#xff…