机器学习——一步一步理解支持向量机

本文深入浅出地介绍了支持向量机(SVM)的概念及其数学原理,包括线性可分、近似线性可分和线性不可分三种情况下的处理策略,并详细解释了拉格朗日乘子法、KKT条件及核函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

秋招即将过去,结果不好不坏,希望每位致力工作的能尽早安排。重新整理博客,一般从通俗理解,再到进阶,后期可能会加上动手搭建。

写在前面的话:

这些公式都不难!推导的时候,又不懂的一定不要跳过,想方设法理解。

推荐一个博客,我觉得写得很好,把我内心疑惑的特别小的点也提到了,推导的时候,多问自己很多细节的问题。

https://blog.youkuaiyun.com/macyang/article/details/38782399

一 通俗理解

SVM就是一个线性分类器,对于二维的数据,我们希望用y=wx+b把两类分开,如下图(盗图,侵删)。

绿色的线就是我们要找的y=wx+b。我们知道,要分割开这2类数据的线是有很多很多的。但我们希望它的泛化能力最强。如何寻找泛化能力最强的呢?就是希望线  离  两边最近的点  的   距离是最远的。这句话转换成数学描述就是几何间隔最大化。

点离直线的距离可以是函数间隔,也可以有几何间隔。函数间隔会随着w和b缩放变化,而几何间隔相当于正则化的函数间隔,是不会随着w和b等比例缩放变化的。

这个例子对应第二层公式的线性可分的情况,详情看第二节,从数学上理解SVM、

二 数学上理解SVM

SVM处理3种数据:(1)线性可分(2)近似线性可分(3)线性不可分(分别对应下面3张图,侵删)

应对的策略:(1)最优硬间隔(2)最优软间隔(3)高斯核映射为高纬线性

所以SVM基础是线性可分的模型,通过线性可分还能推导出高斯核,与(3)完美遥相呼应,软间隔推导和硬间隔很像,所以会了(1),软间隔也会。以下介绍思路按着三个部分来。(3)对于初学者有个疑惑,为什么高纬一定是线性的?解决了这个困惑就比较好理解。所以重点是(1)部分,这里包括拉格朗日、KKT、对偶优化等重点。

1 线性可分SVM

问题引入:按照机器学习三个基本要素是:模型、策略和计算方法。而SVM的前提就是线性可分,所以我们能够找到一个分类超平面去分割数据(超平面:因为平面一般是指二维,但很多时候是多维的,所以取名叫超平面),超平面可表示为:

\omega x+b=0

这个超平面不唯一。为了让模型的泛化能力强,我们需要找最佳的超平面。这里选择的标准就是间隔最大化的超平面,此时的超平面唯一。那如何优化这个间隔最大问题呢?优化之前需要知道这个间隔如何定义。

间隔,一般理解是点到超平面的距离,但为了优化,引入函数间隔与几何间隔(几何间隔和间隔公式上前者分母是参数的L2范数,后者是L1范数)。函数间隔为:

\widehat{\gamma }_{i}=y_{i}(\omega x_{i}+b)

函数间隔有个问题:如果将w和b等比例缩放,超平面没变,但是函数间隔也会成比例缩放。为了解决这个问题,增加一个约束,如规范化,让w 的L2范数为1,使得间隔不变。这时函数间隔就是几何间隔:

\gamma _{i}=\frac{y_{i}(\omega x_{i}+b)}{||\omega||}

定义几何间隔的最小值为\gamma

\gamma =min_{T} \gamma_{i}

要让SVM模型更好,那就希望\gamma越大越好,于是这个问题可以表述为下面的约束最优化问题:

max_{(\omega ,b)} \gamma

s.t. yi(\frac{\omega xi }{||\omega||}+\frac{b}{||\omega||})\geq \gamma

根据几何间隔和函数间隔的关系,这个问题也可以写成:

max_{(\omega ,b)}\frac{ \widehat{\gamma}}{ \left \| \omega \right \|}

s.t. yi (\omega xi + b)\geq \widehat{\gamma}

由于\widehat{\gamma}不影响最优化问题的解,所以可取为1(也很好理解,就不赘述了)。

又因为max_{(\omega ,b)}\frac{ 1}{ \left \| \omega \right \|}等价于min_{(\omega ,b)} \frac{1}{2}\left \| \omega \right \|^{2}

优化问题可重新写成:

min_{(\omega ,b)} \frac{1}{2}\left \| \omega \right \|^{2}

s.t. yi (\omega xi + b)\geq 1

嗯... ....这是个凸二次规划问题,那什么是凸优化问题呢?凸优化指约束最优化,带约束的,一般形式为:

min_{(\omega)} f(\omega )

s.t. g_{i}(\omega ) \leq 0,i=1,...,k

s.t. h_{i}(\omega ) = 0 ,i=1,...,l

如没有约束,求最小值就求导导数为0,但有约束,不能求导,怎么求解这种带约束的优化问题?此时我们引入拉格朗日函数,它的作用就是把约束条件和优化问题整合成一个式子方便求最优解。定义优化问题的拉格朗日函数:

L(\omega ,b,\alpha )=\frac{1}{2}\left \| \omega \right \|^{2}+\sum_{i=1}^{N}\alpha_{i}(1-yi(\omega xi +b))

\alpha_{i}\geq 0,称为拉格朗日乘子。

将约束添加进等式中,优化问题就变成如下问题(为什么会是极小极大,因为max_{\alpha}L(\omega ,b,\alpha )等价于\frac{1}{2}\left \| \omega \right \|^{2},具体证明就不写了,可以看李航的《统计学习》附录C):

min_{\omega,b}max_{\alpha}L(\omega ,b,\alpha )

这个是拉格朗日优化。根据拉格朗日对偶性,这个极小极大问题的对偶问题是极大极小问题(极小极大为什么没有极大极小解起来容易?):

max_{\alpha}min_{\omega,b}L(\omega ,b,\alpha )

min_{\omega,b}max_{\alpha}L(\omega ,b,\alpha )\geq max_{\alpha}min_{\omega,b}L(\omega ,b,\alpha )(这么理解,假设100个人根据分数分班,前50名在好班,后50名在差班。前者相当于好班的倒数第一,后者就是差班第一 )

嗯,那什么时候相等呢?满足KKT7个条件,李航老师的附录里面描述的很详细,还是写一下吧~L(\omega^{*} ,\alpha^{*},\beta ^{*} ),带“*”表示这个是原始约束问题的最优解,当满足以下(SVM没有等式约束,不用考虑β,以下是含等式约束的格式);

(1)\frac{\partial L(\omega^{*} ,\alpha^{*},\beta ^{*} )}{ \partial \omega }=0

(2)\frac{\partial L(\omega^{*} ,\alpha^{*},\beta ^{*} )}{ \partial \beta }=0

(3)\frac{\partial L(\omega^{*} ,\alpha^{*},\beta ^{*} )}{ \partial \alpha }=0

(4)\alpha_{i}^{*} g_{i}(\omega ^{*})=0,i=1,..,k

(5)g_{i}(\omega ^{*}) \leq 0,i=1,..,k

(6)\alpha_{i}^{*} \geq 0,i=1,..,k

(7)h_{i}(\omega^{*} ) = 0 ,i=1,...,l

而在SVM中是满足的((1-3)是我们要求的这个目标,我们求极值就是求它导数为0的时候的极值,(5)和(7)原始问题自带的约束,(6)拉格朗日的定义,(4)如果不满足,则L为正无穷,那就不等价与原始问题了)

所以,原始问题的优化等价于它的拉格朗日表达式的优化,也等价于它的拉格朗日的对偶优化。求解对偶优化:

step1:先求极小值,对w和b求导,然后带进公式消除w和b,只留变量α。求导容易,带入有点复杂,但不要跳过。

求导结果:

\frac{\partial L(\omega ,b ,\alpha)}{ \partial \omega }=0,\frac{\partial L(\omega ,b ,\alpha)}{ \partial b }=0

\omega =\sum_{i=1}^{N}\alpha _{i}y_{i}x_{i}

\sum_{i=1}^{N}\alpha _{i}y_{i}=0

带入L(\omega ,b,\alpha )=\frac{1}{2}\left \| \omega \right \|^{2}+\sum_{i=1}^{N}\alpha_{i}(1-yi(\omega xi +b))消除w和b:

这里需要说明一点,w是矩阵,xi也是矩阵,α和y是数,w*xi正规写法是\omega ^{T}xi,w的L2范数是内积,即\left \| \omega \right \|^{2}=\omega^{T}\omega

L(\omega ,b,\alpha )=\frac{1}{2}(\sum_{i=1}^{N}\alpha _{i}x_{i}y_{i})^{T}(\sum_{i=1}^{N}\alpha _{i}x_{i}y_{i}) -\sum_{i=1}^{N}\alpha _{i}x_{i}y_{i}(\sum_{i=1}^{N}\alpha _{i}x_{i}y_{i})^{T} +\sum_{i=1}^{N}\alpha _{i} +b\sum_{i=1}^{N}\alpha _{i}y_{i}

L(\omega ,b,\alpha )=-\frac{1}{2}(\sum_{i=1}^{N}\alpha _{i}x_{i}y_{i})^{T}(\sum_{i=1}^{N}\alpha _{i}x_{i}y_{i}) +\sum_{i=1}^{N}\alpha _{i}

数的转置还是自己,所以上述写为:

L(\omega ,b,\alpha )=\sum_{i=1}^{N}\alpha _{i}-\frac{1}{2} \sum_{i=1}^{N}\sum_{j=1}^{N}\alpha _{i}\alpha _{j}y _{i}y _{j}x_{i}^{T}x_{j}

别忘了约束条件:

\sum_{i=1}^{N}\alpha _{i}y_{i}=0

\alpha _{i}\geq 0

step2:现在式子是关于α的函数,如何求极大值?用的是最小序列优化SMO,SMO下文补充,求的极大值下的\alpha ^{*},再反过来求解w*和b*

\omega^{*}=\sum_{i=1}^{N}\alpha _{i}^{*}y_{i}x_{i}

b^{*}= \frac{max_{i:yi=-1}\omega ^{*T}xi+min_{i:yi=1}\omega ^{*T}xi}{2}(负样本距离最近的点和正样本距离最近的点,二者之间的距离之和,也可通过公式求解,但这样解泛化性能更好)

2 线性支持SVM和软间隔最大化

就是大体是能线性可分的,就是会有一些异常点分不了。针对这种情况,引入软间隔,也就是允许部分数据分类错误。我们假设每一个数据都给定一个松弛变量:

yi (\omega xi + b)\geq 1-\xi _{i}

松弛变量允许数据不是严格大于等于1的,但同时希望这样的数据越少越好,于是优化问题变为:

min_{\omega,b,\xi} \frac{1}{2}\left \| \omega \right \|^{2}+C\sum_{i=1}^{N}\xi _{i}

s.t. yi(\omega xi+b)\geq 1-\xi _{i},i=1,...,N

s.t. \xi _{i}\geq 0,i=1,...,N

C>0,称为惩罚参数,C越大对误分类的惩罚加大。

此时拉格朗日不等式为:

L(\omega ,b,\alpha )=\frac{1}{2}\left \| \omega \right \|^{2}+C\sum_{i=1}^{N} \xi_{i}+ \sum_{i=1}^{N}\alpha_{i}(1-\xi _{i} -yi(\omega xi +b))-\sum_{i=1}^{N}\beta_{i} \xi_{i}

求导后得:

\omega =\sum_{i=1}^{N}\alpha _{i}y_{i}x_{i}

\sum_{i=1}^{N}\alpha _{i}y_{i}=0

\frac{\partial L}{\partial \xi _{i}} = C -\alpha_{i} - \beta_{i}

因为\beta_{i}\geq 0,所以\alpha_{i} \leq C,等价于\beta_{i}\geq 0 

带入拉格朗日不等式,发现对偶问题的优化呢,就只改变了α的约束条件,其它不变:

L(\omega ,b,\alpha )=\sum_{i=1}^{N}\alpha _{i}-\frac{1}{2} \sum_{i=1}^{N}\sum_{j=1}^{N}\alpha _{i}\alpha _{j}y _{i}y _{j}x_{i}^{T}x_{j}

\sum_{i=1}^{N}\alpha _{i}y_{i}=0

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

3 非线性SVM和核函数

为什么投影到高纬就能是线性的呢?什么是线性?就是最高次幂是1。非线性呢?表达式中最高次幂不是1。这样啊,那我能不能把你这个最高次幂不是1的变量用新的变量代替呢?比如我用x_{new} = x_{old}^{2}

假设y=ax_{1}^{2}+bx_{2}^{2}+ax_{1}x_{2}非线性吧?那我变为y=aX_{1}+bX_{2}+aX_{3}不就变成线性了吗?只不过特征空间变了,由{x1,x2}变成{X1,X2,X3},但没关系,我们知道他们的映射关系。

所以呢,对于非线性,要想用SVM思路就是:

先把原始低维空间转换成高纬空间——>在高纬线性可分空间,就是我们说的第一种情况:寻找最优间隔,对偶优化等步骤

可以!但有个问题,对偶优化的解有一个x的内积操作x_{i}^{T}x_{j}。低纬的话,一般这个输入特征纬度就比较大,上千是很经常的,把这个1000个变量变成高纬,那用多少个变量表示呢?大概是1000^2,这就很受限制了,有的时候高维特征是无穷维的。

我们假设低纬-->高维映射关系是φ(x):X-->H

会经历\phi (x_{i})^{T}\phi (x_{j}),因为\phi (x_{i})有可能是无穷维的,所以不好解,那如果存在某个函数K使得:

K(x,z)=\phi (x)\cdot \phi (z)

即,我在低纬空间求内积,在经过K映射,结果就等价于低纬映射到高维空间,在高维空间求内积呢?

答案是存在的。则

L(\omega ,b,\alpha )=\sum_{i=1}^{N}\alpha _{i}-\frac{1}{2} \sum_{i=1}^{N}\sum_{j=1}^{N}\alpha _{i}\alpha _{j}y _{i}y _{j}\phi(x_{i})^{T}\phi(x_{j})

可写成:

L(\omega ,b,\alpha )=\sum_{i=1}^{N}\alpha _{i}-\frac{1}{2} \sum_{i=1}^{N}\sum_{j=1}^{N}\alpha _{i}\alpha _{j}y _{i}y _{j}K(x_{i},x_{j})

也就是说,在核函数K(x,z)给定的条件下,我们可以利用解线性分类问题的方法求解非线性分类问题。学习是隐式地在特征空间进行,不需要显示的定义特征空间和映射函数,这样的技巧称为核技巧。

常用核函数:

1多项式核函数

2 高斯核函数

3 字符串核函数

4 番外SMO最小序列优化(后补)

求解最优解α时,因为变量很多,不太可能多每个αi求偏导,SMO的思路就是拿出2个αi和αj,其它的固定,然后优化这2个变量,然后再优化其它两个α。

思路就是把原问题不断分解为子问题并对子问题求解。具体看看实现过程:

min( \frac{1}{2} \sum_{i=1}^{N}\sum_{j=1}^{N}\alpha _{i}\alpha _{j}y _{i}y _{j}x_{i}^{T}x_{j}-\sum_{i=1}^{N}\alpha _{i})

s.t.\sum_{i=1}^{N}\alpha _{i}y_{i}=0

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

挑选α1和α2:

min_{\alpha _{1},\alpha _{1}}( \frac{1}{2} \sum_{i=3}^{N}\sum_{j=3}^{N}\alpha _{i}\alpha _{j}y _{i}y _{j}x_{i}^{T}x_{j}-\sum_{i=3}^{N}\alpha _{i})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值