终于到了梳理支持向量机(SVM) 这个大知识点了,好鸡冻!!!因为理解SVM牵涉的内容实在是太多了:分类函数,最大化分类间隔,凸二次规划,拉格朗日乘数法、原始问题与对偶问题的转换,KKT条件,SMO算法等等。。。这些内容其实可归为最优化问题的求解,理解完SVM,那么上面提到的知识点手推数学公式都就不成问题了!
注:这篇文章主要介绍SVM解决线性可分问题。下一篇文章(八)是介绍SVM解决线性不可分问题。
支持向量机(Support Vector Machines,SVM)是建立在统计学习理论基础上的一种数据挖掘方法,能够处理回归问题(时间序列分析)和模式识别(分类问题、判别分析)等问题。它的机理是寻找一个满足分类要求的最优分类超平面(之所以叫做超平面,是因为被分类的数据可能是多维度的),使得在保证分类精度的同时,超平面两侧的空白区域最大化,即在样本对象的特征空间上间隔最大,理论上,SVM能实现对线性可分数据的最优分类。SVM是一个二元分类模型的广义线性分类器,其决策边界是对样本求解的最大边距超平面(maximum margin hyperplane)。
插入通俗的解释:上面的概念太抽象了,下面举两个现实的栗子说明SVM的作用。
支持向量机SVM就是用来解决分类问题的(二分类:即只将数据分成两种类别)。
以上就是通俗的栗子,相信这样的解释应该很容易理解。好了,下面接着回到复杂的概念当中。
在上面的概念中,提到了相当多的专业名称,因此要理解SVM,我们首先需要了解什么是线性分类器,什么是特征空间的最大间隔/边距超平面,还有怎么求最优分类?下面,就一一进行梳理。
(直观理解) SVM就是解决线性分类问题,简单来说能被一个超平面分开的数据,就是线性可分的。因为线性分类问题,对二维数据来说,一条直线能分开两类数据,而直线是线性;对三维数据来说,一个平面也能把数据分开两边。但是如果是非线性的情况,那么分开数据的就是曲线和曲面了。
(概念理解) 在分类问题中给定输入数据和学习目标(即二维数据X和Y): X = { X 1 , . . . , X N } , Y = { y 1 , . . . , y N } X=\{X_1,...,X_N\},Y=\{y_1,...,y_N\} X={X1,...,XN},Y={y1,...,yN} ,其中输入数据的每个样本都包含多个特征并由此构成特征空间(feature space): X = { X 1 , . . . , X N } X=\{X_1,...,X_N\} X={X1,...,XN} ,而学习目标为二元变量 y ∈ { − 1 , 1 } y\in\{-1,1\} y∈{−1,1}(将二维样本 ( X , Y ) (X,Y) (X,Y)对应分为两类),y=-1表示负类(negative class)和y=1正类(positive class)。
读到这里,可能会有些疑问:为什么y∈{−1,1},y只能是-1,和1吗?不能是y =0表示反例,y=10表示正例,或y=-5表示反例,y=5表示正例吗?答案是:当然可以。记住,y 只是一个label ,标注为{-1,1}只是为了描述和求解方便
定义: 若输入数据 X X X所在的特征空间 x x x 存在作为决策边界(decision boundary)的超平面可以将学习目标按正类(黑圈)和负类(白圈)分开,并使任意样本的点到平面距离大于等于1(最大间隔):
则称该分类问题具有线性可分性,参数w,b分别为超平面的法向量和截距。
满足该条件的决策边界实际上构造了2个平行的超平面作为间隔边界以判别样本的分类:
w T X + b ≥ + 1 ⇒ y = + 1 ( 类 别 = 正 类 ) w T X + b ≤ − 1 ⇒ y = − 1 ( 类 别 = 负 类 ) (1) w^TX+b\ge+1\Rightarrow y=+1(类别=正类)\\ w^TX+b\le-1\Rightarrow y=-1(类别=负类)\tag{1} wTX+b≥+1⇒y=+1(类别=正类)wTX+b≤−1⇒y=−1(类别=负类)(1)
所有在上间隔边界上方的样本属于正类,在下间隔边界下方的样本属于负类。两个间隔边界的距离被定义为边距(margin),位于间隔边界上的正类和负类样本为支持向量(support vector)。
解释: 假设超平面为 f ( x ) f(x) f(x),在进行分类时,只需要将新的数据点x代入到f(x)中,如果大于0则判别为正类,如果小于0,判别成负类,但实际上能将数据按正类和负类分开的超平面有很多个,如何能确定哪个超平面最好?换句话说:哪个超平面才是最适合分开将数据分开成正负类的,且出错的概率是最小的呢?这个判定的标准就是我们要找到一个超平面离它两边的数据的距离是最大的, 因此,筛选超平面的问题就变成寻找有最大距离的超平面。
本来不想引入这么多概念的,但是如果你去查阅其他资料,你会看到别人解释SVM是有相当多的专业名称,而且不理解这些名词概念,对你理解SVM是有很大影响的,所以为了与教材保持一致,还是解释一下这些名词。
刚才说到筛选超平面判定的标准是超平面离它两边的数据的距离是最大的。这里的距离,在SVM中有另一种叫法(仅仅是叫法,人为规定的名称)叫做:几何间隔。
假设超平面为 f ( x ) = w T x + b f(x)=w^Tx+b f(x)=wTx+b, y y y代表正负类别,那么几何间隔(geometrical margin)的定义,用 r ′ r' r′表示是:
r ′ = ∣ w T x + b ∣ ∣ ∣ w ∣ ∣ = f ( x ) ∣ ∣ w ∣ ∣ (2) r'=\frac{|w^Tx+b|}{||w||}=\frac{f(x)}{||w||}\tag{2} r′=∣∣w∣∣∣wTx+b∣=∣∣w∣∣f(x)(2)
我们都知道, w T x + b ∣ ∣ w ∣ ∣ \frac{w^Tx+b}{||w||} ∣∣w∣∣wTx+b可以表示点x到平面f(x)的距离。y表示分类的类别,而y与f(x)永远都是同号,那么我们就可以将两者相乘变成绝对值,这就与点x到平面f(x)的距离是一样的,就得到了几何间隔的另一种表示方法,即: r ′ = y ( w T x + b ) ∣ ∣ w ∣ ∣ = y f ( x ) ∣ ∣ w ∣ ∣ (2-1) r'=\frac{y(w^Tx+b)}{||w||}=\frac{yf(x)}{||w||}\tag{2-1} r′=∣∣w∣∣y(wTx+b)=∣∣w∣∣yf(x)(2-1)
(推理证明) 我们知道超平面的函数定义为 f ( x ) = w T x + b f(x)=w^Tx+b f(x)=wTx+b,如果f(x)=0,那么x就是落在超平面上的点,而f(x)大于0的点,就是对应y=1正类的数据点;f(x)小于0的点,就是对应y=-1负类的数据点。
根据点到面的距离公式,我们可以计算出空间中任意样本点 x x x到超平面的距离为: r = ∣ w T x + b ∣ ∣ ∣ w ∣ ∣ r=\frac{|w^Tx+b|}{||w||} r=∣∣w∣∣∣wTx+b∣
根据图,利用平面几何知识,就有(式1): x = x 0 + r w ∣ ∣ w ∣ ∣ x=x_0+r\frac{w}{||w||} x=x0+r∣∣w∣∣w,其中 w ∣ ∣ w ∣ ∣ \frac{w}{||w||} ∣∣w∣∣w是单位向量, ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣表示法向量w的长度。
又因为 x 0 x_0 x0在超平面上,即 w T x 0 + b = 0 w^Tx_0+b=0 wTx0+b=0,代入(式1)化简:
同样能得到(式2): r = w T x + b ∣ ∣ w ∣ ∣ r=\frac{w^Tx+b}{||w||} r=∣∣w∣∣wTx+b,因为距离一定是正值,因此还需要加上绝对值,同样能得到 r = ∣ w T x + b ∣ ∣ ∣ w ∣ ∣ r=\frac{|w^Tx+b|}{||w||} r=∣∣w∣∣∣wTx+b∣。下面就到了找超平面的最大距离!!!
在上面的定义(1)中,有:
w T x i + b ≥ 0 时 , 对 应 y i 为 正 类 , ⇒ y i = + 1 w T x i + b ≤ 0 时 , 对 应 y i 为 负 类 , ⇒ y i = − 1 w^Tx_i+b\ge0时,对应y_i为正类,\Rightarrow y_i=+1\\ w^Tx_i+b\le0时,对应y_i为负类,\Rightarrow y_i=-1 wTxi+b≥0时,对应yi为正类,⇒yi=+1wTxi+b≤0时,对应yi为负类,⇒yi=−1
因此,SVM的目标是获取最大分类间隔,即超平面离它两边的数据最近点的距离d:
max d s . t . y i ( w T x i + b ) ≥ 0 , i = 1 , . . . , n (3) \max d\\ s.t. y_i(w^Tx_i+b)\ge0,i=1,...,n\tag{3} maxds.t.yi(wTxi+b)≥0,i=1,...,n(3)
上面介绍的几何间隔 r ′ r' r′是绝对值,为正数;而 ( w T x i + b ) (w^Tx_i+b) (wTxi+b)与 y i y_i yi,代表类别,有正负号,但是它们又刚好同号,构造条件以x和y为约束,因此将两者相乘,显然得到 y i ( w T x i + b ) ≥ 0 y_i(w^Tx_i+b)\ge0 yi(wTxi+b)≥0恒成立。距离d就是我们上面所提到的单侧最近样本点到超平面的距离 r = ∣ w T x + b ∣ ∣ ∣ w ∣ ∣ r=\frac{|w^Tx+b|}{||w||} r=∣∣w∣∣∣wTx+b∣的两倍(双侧),这其实就是求几何间隔的最大值。即:
d = 2 r = 2 ∗ min w , b , x i ∣ w T x i + b ∣ ∣ ∣ w ∣ ∣ = 2 ∗ min w , b , x i , y i y i ( w T x i + b ) ∣ ∣ w ∣ ∣ , ( i = 1 , . . . , n ) (3-1) d=2r=2*\min_{w,b,x_i}\frac{|w^Tx_i+b|}{||w||}=2*\min_{w,b,x_i,y_i}\frac{y_i(w^Tx_i+b)}{||w||},(i=1,...,n)\tag{3-1} d=2r=2∗w,b,ximin∣∣w∣∣∣wTxi+b∣=2∗w,b,xi,yimin∣∣w∣∣yi(wTxi+b),(i=1,...,n)(3-1)
于是,SVM的目标就变为找到一组合适的参数(w,b),使得(式4):
max w , b 1 ∣ ∣ w ∣ ∣ 2 ∗ min x i , y i y i ( w T x i + b ) s . t . y i ( w T x i + b ) ≥ 0 , i = 1 , . . . , n (4) \max_{w,b}\frac{1}{||w||}2*\min_{x_i,y_i}y_i(w^Tx_i+b)\\ s.t. y_i(w^Tx_i+b)\ge0,i=1,...,n\tag{4} w,bmax∣∣w∣∣12∗xi,yiminyi(wTxi+b)s.t.yi(wTxi+b)≥0,i=1,...,n(4)
到这里,上面(式3)描述的其实是一个含有不等式约束条件的优化问题,我们引入凸二次规划来对上(式3)进行化简。关于凸二次规划的优化问题具体可查看这篇文章,我也有相应的整理。
化简上面的优化问题,我们需要引入一个的引理1 ,即:若( w ∗ , b ∗ ) w^*,b^*) w∗,b∗)是优化问题(式3)的解,那么对任意 r > 0 , ( r w ∗ , r b ∗ ) r>0,(rw^*,rb^*) r>0,(rw∗,rb∗)仍然是该优化问题的解,证明:
2 ∣ ∣ r w ∗ ∣ ∣ ∣ ( r w ∗ ) T x i + r b ∗ ∣ = 2 ∣ ∣ w ∗ ∣ ∣ ∣ w ∗ T x i + r b ∗ ∣ , y i ( ( r w ∗ ) T x i + r b ∗ ) ≥ 0 ⇔ y i ( w ∗ T x i + b ∗ ) ≥ 0 \frac{2}{||rw^*||}|(rw^*)^Tx_i+rb^*|=\frac{2}{||w^*||}|w^{*T}x_i+rb^*|,\\ y_i((rw^*)^Tx_i+rb^*)\ge0\Leftrightarrow y_i(w^{*T}x_i+b^*)\ge0 ∣∣rw∗∣∣2∣(rw∗)Txi+rb∗∣=∣∣w∗∣∣2∣w∗Txi+rb∗∣,yi((rw∗)Txi+rb∗)≥0⇔yi(w∗Txi+b∗)≥0
由于对(w,b)的放缩并不影响解,为了简化优化问题,我们约束(w,b)使得:
min i ∣ w T x i + b ∣ = 1 \min_{i}|w^{T}x_i+b|=1 imin∣wTxi+b∣=1
因此,SVM的目标从(式3)进一步变成(式4-1):
max w , b 2 ∣ ∣ w ∣ ∣ s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , . . , n (4-1) \max_{w,b}\frac{2}{||w||}\\ s.t.\; y_i(w^Tx_i+b)\ge1, i=1,..,n\tag{4-1} w,bmax∣∣w∣∣2s.t.yi(wTxi+b)≥1,i=1,..,n(4-1)
很显然,我们就是要求解上面(式4-1)的优化问题,找到一条符合这样条件的超平面来分开两类数据,这个超平面离两类样本距离是最大的,即间隔最大,最终确定参数w和b。
接着,就是要找到该优化问题的一组最合适的参数(w,b),使得:
max w , b 2 ∣ ∣ w ∣ ∣ s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , . . , n (4-1) \max_{w,b}\frac{2}{||w||}\\ s.t.\; y_i(w^Tx_i+b)\ge1, i=1,..,n\tag{4-1} w,bmax∣∣w∣∣2s.t.yi(wTxi+b)≥1,i=1,..,n(4-1)
根据最大最小问题的相互转化,最大化 2 ∣ ∣ w ∣ ∣ \frac{2}{||w||} ∣∣w∣∣2 相当于最小化 ||w||,因此可将问题转化为:
min w , b 1 2 ∣ ∣ w ∣ ∣ 2 s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , . . , n (4-2) \min_{w,b}\frac{1}{2}||w||^2\\ s.t.\; y_i(w^Tx_i+b)\ge1, i=1,..,n\tag{4-2} w,bmin21∣∣w∣∣2s.t.yi(wTxi+b)≥1,i=1,..,n(4-2)
到这里,就得到了SVM的基本型。基本型的目标函数是二次,约束条件是线性的,这是一个凸二次规划问题(凸二次规划问题介绍),可运用转换为对偶问题来解决,关于原始问题与对偶问题的转换具体戳着。
看到这里,非常建议你先普及一下原始问题和对偶问题的转化以及求解,才有利于下面内容的理解。对于凸二次规划问题,可通过拉格朗日乘数法来进行求解。首先,根据拉格朗日公式,将约束条件( y i ( w T x i + b ) ≥ 1 y_i(w^Tx_i+b)\ge1 yi(wTxi+b)≥1变成 ( 1 − y i ( w T x i + b ) ) ≤ 0 (1-y_i(w^Tx_i+b))\le0 (1−yi(wTxi+b))≤0,这是拉格朗日的条件形式)去掉,加上拉格朗日乘子( λ i ≥ 0 \lambda_i \ge 0 λi≥0),得到拉格朗日函数(式5):
L ( w , b , λ ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 n λ i ( 1 − y i ( w T x i + b ) ) (5) L(w,b,\lambda)=\frac{1}{2}||w||^2+\sum_{i=1}^n\lambda_i(1-y_i(w^Tx_i+b))\tag{5} L(w,b,λ)=21∣∣w∣∣2+i=1∑nλi(1−yi(wTxi+b))(5)
令原始问题为:
θ p ( w , b ) = max λ i ≥ 0 L ( w , b , λ ) (5-1) \theta_p(w,b)=\max_{\lambda_i\ge0}L(w,b,\lambda)\tag{5-1} θp(w,b)=λi≥0maxL(w,b,λ)(5-1)
那么,我们SVM的目标函数就变成:
min w , b θ p ( w , b ) = min w , b max λ i ≥ 0 L ( w , b , λ ) (6) \min_{w,b}\theta_p(w,b)=\min_{w,b}\max_{\lambda_i\ge0}L(w,b,\lambda)\tag{6} w,bminθp(w,b)=w,bminλi≥0maxL(w,b,λ)(6)
而将最大最小化操作的位置交换,就得到相对应的对偶问题 就是:
max λ i θ d ( λ ) = max λ i ≥ 0 min w , b L ( w , b , λ ) (5-2) \max_{\lambda_i}\theta_d(\lambda)=\max_{\lambda_i\ge0}\min_{w,b}L(w,b,\lambda)\tag{5-2} λimaxθd(λ)=λi≥0maxw,bminL(w,b,λ)(5-2)
原始问题和对偶问题的最优解是满足 θ p ∗ ≥ θ d ∗ \theta_p^*\ge \theta_d^* θp∗≥θd∗,在满足某些条件的情况下,等号相等时,就可以通过求解对偶问题来求解原始问题了。因为,原始问题是先得到最小的w和b,再求解拉格朗日乘子 λ \lambda λ,这样的步骤很难进行,因为w和b本来就是我们要求解,这样得不到一点简化,反而还增加了参数 λ \lambda λ,而转换为对偶问题来求解,就是先固定 λ \lambda λ,求解w和b。
凸二次优化的原始问题和对偶问题的最优解是满足 θ p ∗ ≥ θ d ∗ \theta_p^*\ge \theta_d^* θp∗≥θd∗,在满足某些条件的情况下,等号相等时,就可以通过求解对偶问题来求解原始问题了。这里的某些条件 指的是正是KKT条件。(关于KKT条件的介绍,我也有整理,可以看(六))
KKT条件是一个线性规划问题能有最优解的充分和必要条件。
根据KKT的满足条件,我们的问题可以转化为:
先令 L ( w , b , λ ) L(w,b,\lambda) L(w,b,λ)的 w , b w,b w,b偏导数分别为0,得到:
ϑ L ϑ w = w − ∑ i = 1 n λ i y i x i = 0 ⇒ w = ∑ i = 1 n λ i y i x i ϑ L ϑ b = ∑ i = 1 n λ i y i = 0 \begin{aligned}\frac{\vartheta L}{\vartheta w}&=w-\sum_{i=1}^n\lambda_iy_ix_i=0\;\Rightarrow\;w=\sum_{i=1}^n\lambda_iy_ix_i\\ \frac{\vartheta L}{\vartheta b}&=\sum_{i=1}^n\lambda_iy_i=0\end{aligned} ϑwϑLϑbϑL=w−i=1∑nλiyixi=0⇒w=i=1∑nλiyixi=i=1∑nλiyi=0
代入拉格朗日函数(式5)进一步化简:
L ( w , b , λ ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 n λ i ( 1 − y i ( w T x i + b ) ) = 1 2 w T w + ∑ i = 1 n λ i − ∑ i = 1 n λ i y i w T x i − ∑ i = 1 n b λ i y i = 1 2 w T ( ∑ i = 1 n λ i y i x i ) − w T ( ∑ i = 1 n λ i y i x i ) − b ∑ i = 1 n λ i y i + ∑ i = 1 n λ i = − 1 2 w T ( ∑ i = 1 n λ i y i x i ) + ∑ i = 1 n λ i = − 1 2 ( ∑ i = 1 n λ i y i x i ) T ( ∑ i = 1 n λ i y i x i ) + ∑ i = 1 n λ i = − 1 2 ∑ i = 1 n λ i y i ( x i ) T ∑ i = 1 n λ i y i x i + ∑ i = 1 n λ i = − 1 2 ∑ i = 1 , j = 1 n λ i y i ( x i ) T λ j y j x j + ∑ i = 1 n λ i = − 1 2 ( ∑ i , j = 1 n λ i λ j y i y j x i T x j ) + ∑ i = 1 n λ i = ∑ i = 1 n λ i − 1 2 ( ∑ i , j = 1 n λ i λ j y i y j x i T x j ) (7) \begin{aligned} L(w,b,\lambda)&=\frac{1}{2}||w||^2+\sum_{i=1}^n\lambda_i(1-y_i(w^Tx_i+b))\\ &=\frac{1}{2}w^Tw+\sum_{i=1}^n\lambda_i-\sum_{i=1}^n\lambda_iy_iw^Tx_i-\sum_{i=1}^nb\lambda_iy_i\\ &=\frac{1}{2}w^T(\sum_{i=1}^n\lambda_iy_ix_i)-w^T(\sum_{i=1}^n\lambda_iy_ix_i)-b\sum_{i=1}^n\lambda_iy_i+\sum_{i=1}^n\lambda_i\\ &=-\frac{1}{2}w^T(\sum_{i=1}^n\lambda_iy_ix_i)+\sum_{i=1}^n\lambda_i\\ &=-\frac{1}{2}(\sum_{i=1}^n\lambda_iy_ix_i)^T(\sum_{i=1}^n\lambda_iy_ix_i)+\sum_{i=1}^n\lambda_i\\ &=-\frac{1}{2}\sum_{i=1}^n\lambda_iy_i(x_i)^T\sum_{i=1}^n\lambda_iy_ix_i+\sum_{i=1}^n\lambda_i\\ &=-\frac{1}{2}\sum_{i=1,j=1}^n\lambda_iy_i(x_i)^T\lambda_jy_jx_j+\sum_{i=1}^n\lambda_i\\ &=-\frac{1}{2}(\sum_{i,j=1}^n\lambda_i\lambda_jy_iy_jx_i^Tx_j)+\sum_{i=1}^n\lambda_i\\ &=\sum_{i=1}^n\lambda_i-\frac{1}{2}(\sum_{i,j=1}^n\lambda_i\lambda_jy_iy_jx_i^Tx_j)\end{aligned}\tag{7} L(w,b,λ)=21∣∣w∣∣2+i=1∑nλi(1−yi(wTxi+b))=21wTw+i=1∑nλi−i=1∑nλiyiwTxi−i=1∑nbλiyi=21wT(i=1∑nλiyixi)−wT(i=1∑nλiyixi)−bi=1∑nλiyi+i=1∑nλi=−21wT(i=1∑nλiyixi)+i=1∑nλi=−21(i=1∑nλiyixi)T(i=1∑nλiyixi)+i=1∑nλi=−21i=1∑nλiyi(xi)Ti=1∑nλiyixi+i=1∑nλi=−21i=1,j=1∑nλiyi(xi)Tλjyjxj+i=1∑nλi=−21(i,j=1∑nλiλjyiyjxiTxj)+i=1∑nλi=i=1∑nλi−21(i,j=1∑nλiλjyiyjxiTxj)(7)
我们可以看到化简的最后一条式子中只包含了 λ \lambda λ变量了,此时的拉格朗日函数就只与 λ \lambda λ有关系,也就是说,求解出 λ \lambda λ就可以得到w和b了。
剩下来就是对 λ \lambda λ求极大了,这是属于对偶问题的最优化,把上面的对偶问题定义放下来:
max λ i θ d ( λ ) = max λ i ≥ 0 min w , b L ( w , b , λ ) (5-2) \max_{\lambda_i}\theta_d(\lambda)=\max_{\lambda_i\ge0}\min_{w,b}L(w,b,\lambda)\tag{5-2} λimaxθd(λ)=λi≥0maxw,bminL(w,b,λ)(5-2)
再把上面化简后得到L函数代入,得到:
max λ i θ d ( λ ) = max λ i ≥ 0 L ( w , b , λ ) = max λ i ( ∑ i = 1 n λ i − 1 2 ∑ i , j = 1 n λ i λ j y i y j x i T x j ) s . t . λ i ≥ 0 , i = 1 , . . , n ∑ i = 1 n λ i y i = 0 (7) \begin{aligned}\max_{\lambda_i}\theta_d(\lambda)=\max_{\lambda_i\ge0}L(w,b,\lambda)&=\max_{\lambda_i}(\sum_{i=1}^n\lambda_i-\frac{1}{2}\sum_{i,j=1}^n\lambda_i\lambda_jy_iy_jx_i^Tx_j)\\ s.t.\;& \lambda_i\ge 0,i=1,..,n\\ &\sum_{i=1}^n\lambda_iy_i=0\end{aligned}\tag{7} λimaxθd(λ)=λi≥0maxL(w,b,λ)s.t.=λimax(i=1∑nλi−21i,j=1∑nλiλjyiyjxiTxj)λi≥0,i=1,..,ni=1∑nλiyi=0(7)
这里对 λ \lambda λ的求解,需要借助SMO算法。
序列最小化优化算法(Sequential Minimal Optimization,SMO)是专门用来求解多参数的对偶问题的,这是一种高效的解决方案,其核心思想是:每次只优化一个参数,其他参数先固定,只求当前这个参数的极值。下面一步步进入算法的思想。
首先,看看上面遗留下来的问题是什么:
max λ i ∑ i = 1 n λ i − 1 2 ∑ i , j = 1 n λ i λ j y i y j x i T x j s . t . λ i ≥ 0 , i = 1 , . . , n ∑ i = 1 n λ i y i = 0 \max_{\lambda_i}\sum_{i=1}^n\lambda_i-\frac{1}{2}\sum_{i,j=1}^n\lambda_i\lambda_jy_iy_jx_i^Tx_j\\ s.t.\;\lambda_i\ge 0,i=1,..,n\\ \sum_{i=1}^n\lambda_iy_i=0 λimaxi=1∑nλi−21i,j=1∑nλiλjyiyjxiTxjs.t.λi≥0,i=1,..,ni=1∑nλiyi=0
为了符合规划问题的形式,我们将求最大化的问题换成求最小,因此提取负号,即可得到:
min λ i 1 2 ∑ i , j = 1 n λ i λ j y i y j x i T x j − ∑ i = 1 n λ i s . t . ∑ i = 1 n λ i y i = 0 λ i ≥ 0 , i = 1 , . . , n \min_{\lambda_i}\frac{1}{2}\sum_{i,j=1}^n\lambda_i\lambda_jy_iy_jx_i^Tx_j-\sum_{i=1}^n\lambda_i\\ s.t.\; \sum_{i=1}^n\lambda_iy_i=0\\ \lambda_i\ge 0,i=1,..,n λimin21i,j=1∑nλiλjyiyjxiTxj−i=1∑nλis.t.i=1∑nλiyi=0λi≥0,i=1,..,n
这个很显然就符合凸二次规划问题:目标函数是二次型函数,且约束函数是仿射函数(线性函数)。可以直接使用增广拉格朗日法就可以求解,但是好像问题又没那么简单,因为一般的凸二次规划问题求解的是一个变量,而这里求解的是 λ i , i = 1 , . . . , n \lambda_i,i=1,...,n λi,i=1,...,n,即有n个变量。问题就在这里了,用常规的思路去解决,是很难且效率低下。SMO就是解决这个问题的!!!
在这里,我们的约束条件其实只有: ∑ i = 1 n λ i y i = 0 \sum_{i=1}^n\lambda_iy_i=0 ∑i=1nλiyi=0。这个条件否决了每次只优化一个参数的情况,因为当我们把除了 λ 1 \lambda_1 λ1以外的参数都固定之后,根据这个约束条件,可以直接计算出 λ 1 \lambda_1 λ1的值,即 λ 1 = − ∑ i = 2 n λ i y i y 1 \lambda_1=-\frac{\sum_{i=2}^n\lambda_iy_i}{y_1} λ1=−y1∑i=2nλiyi,这样就不能优化每一个参数了,就没有任意意义了。所以我们只能多选一个参数,每次优化两个参数,固定其他参数。以此SMO的步骤如下:
选择两个需要更新的参数 λ i , λ j \lambda_i,\lambda_j λi,λj,固定其他参数(初始化其他参数为0),然后修改约束条件。假设选取了 λ 1 , λ 2 \lambda_1,\lambda_2 λ1,λ2看作变量,其他 λ 3 , . . . , λ n \lambda_3,...,\lambda_n λ3,...,λn看作是固定值,用 ζ \zeta ζ表示,将目标函数展开,并修改约束条件为:
min λ 1 , λ 2 1 2 ( λ 1 2 x 1 T x 1 + λ 2 2 x 2 T x 2 ) + λ 1 λ 2 y 1 y 2 x 1 T x 2 + λ 1 y 1 ∑ i = 3 y i x i T x 1 + λ 2 y 2 ∑ i = 3 y i x i T x 2 − λ 1 − λ 2 − k λ 1 y 1 + λ 2 y 2 = − ∑ i = 3 n λ i y i = ζ 0 ≤ λ 1 , λ 2 ≤ C \min_{\lambda_1,\lambda_2}\frac 12(\lambda_1^2x_1^Tx_1+\lambda_2^2x_2^Tx_2)+\lambda_1\lambda_2y_1y_2x^T_1x2+\lambda_1y_1\sum_{i=3}y_ix_i^Tx_1+\lambda_2y_2\sum_{i=3}y_ix_i^Tx_2-\lambda_1-\lambda_2-k\\ \lambda_1y_1+\lambda_2y_2=-\sum_{i=3}^n\lambda_iy_i=\zeta\\0\le \lambda_1,\lambda_2\le C λ1,λ2min21(λ12x1Tx1+λ22x2Tx2)+λ1λ2y1y2x1Tx2+λ1y1i=3∑yixiTx1+λ2y2i=3∑yixiTx2−λ1−λ2−kλ1y1+λ2y2=−i=3∑nλiyi=ζ0≤λ1,λ2≤C
其中k是固定参数的和,目标函数显然是关于 λ 1 , λ 2 \lambda_1,\lambda_2 λ1,λ2的二次函数,可能上面符合太多看起来很乱,但是整理一下常数部分:如 y 1 y 2 , x 1 T x 2 y_1y_2,x_1^Tx_2 y1y2,x1Tx2就很容易能看出来。
下一步将其中一个参数用另一个参数代替 λ i = ζ − λ j y j y i \lambda_i=\frac{\zeta-\lambda_jy_j}{y_i} λi=yiζ−λjyj,并代入目标函数中,求解出一个参数。分情况讨论:当 y 1 和 y 2 y_1和y_2 y1和y2同号时,即都等于1,那么将限制条件修改一下 λ 1 = ζ − λ 2 \lambda_1=\zeta-\lambda_2 λ1=ζ−λ2,将其代入到目标函数中,得到:
min λ 2 1 2 ( ( ζ − λ 2 ) 2 q 11 + λ 2 2 q 22 ) + ( ζ − λ 2 ) λ 2 q 12 + ( ζ − λ 2 ) B + λ 2 B ′ − ζ − 2 λ 2 − k \min_{\lambda_2}\frac 12((\zeta-\lambda_2)^2q_{11}+\lambda_2^2q_{22})+(\zeta-\lambda_2)\lambda_2q_{12}+(\zeta-\lambda_2)B+\lambda_2B'-\zeta-2\lambda_2-k λ2min21((ζ−λ2)2q11+λ22q22)+(ζ−λ2)λ2q12+(ζ−λ2)B+λ2B′−ζ−2λ2−k
令上式的导数为0,就可以求解出 λ 2 \lambda_2 λ2。
根据约束条件来更新参数,由约束条件可知 0 ≤ λ 1 ≤ C 0\le \lambda_1\le C 0≤λ1≤C和 0 ≤ λ 2 ≤ C 0\le \lambda_2\le C 0≤λ2≤C,同样替换 λ 1 \lambda_1 λ1,得到:
0 ≤ ζ − λ 2 ≤ C ⇒ ζ − C ≤ λ 2 ≤ ζ ⇒ max ( ζ − C , 0 ) ≤ λ 2 ≤ min ( ζ , C ) \begin{aligned}0\le \zeta-\lambda_2\le C&\Rightarrow \zeta-C\le \lambda_2\le \zeta\\ &\Rightarrow \max(\zeta-C,0)\le \lambda_2\le \min(\zeta, C) \end{aligned} 0≤ζ−λ2≤C⇒ζ−C≤λ2≤ζ⇒max(ζ−C,0)≤λ2≤min(ζ,C)
根据上面的约束条件,就可以得到新的 λ 2 \lambda_2 λ2值,然后再计算得到 λ 1 \lambda_1 λ1值,这样就完成一轮的更新了。注意:其实每一轮更新结束后,我们都要更新参数w和b,即执行下面的第三步:根据拉格朗日乘子求解参数w和b,然后才开始新的一轮迭代更新!!!!
开始新的一轮迭代更新,重复第2和第3步,直至知道了全部的 λ i \lambda_i λi满足公式(7)的条件
注意:这一步是在每一轮更新结束后执行的。而不是等所有的 λ i \lambda_i λi都确定之后再执行的。
根据最优化问题:
min w f ( x ) s . t . g i ( x ) ≤ 0 ( i = 1 , . . . , k ) h j ( x ) = 0 ( j = 1 , . . . , n ) \begin{array}{rcl}&&\min_w\;f(x)\\s.t.\;g_i(x)&\leq&0\;(i=1,...,k)\\h_j(x)&=&0\;(j=1,...,n)\\&& \end{array} s.t.gi(x)hj(x)≤=minwf(x)0(i=1,...,k)0(j=1,...,n)
其拉格朗日函数为:
L ( x , α , β ) = f ( x ) + ∑ i k α i g i ( x ) + ∑ j n α j h j ( x ) \begin{array}{l}L(x,\alpha,\beta)=f(x)+\sum_i^k\alpha_ig_i(x)+\sum_j^n\alpha_jh_j(x)\end{array} L(x,α,β)=f(x)+∑ikαigi(x)+∑jnαjhj(x)
其最优解 x ∗ x^* x∗需要满足的条件(KKT条件)为:
L x ′ ( x ∗ , α ∗ , β ∗ ) = 0 L α ′ ( x ∗ , α ∗ , β ∗ ) = 0 L β ′ ( x ∗ , α ∗ , β ∗ ) = 0 α i g i ( x ∗ ) = 0 g i ( x ) ≤ 0 α i ∗ ≥ 0 h j ( x ∗ ) = 0 L^\prime_x(x^\ast,\alpha^\ast,\beta^\ast)=0\\ L^\prime_\alpha(x^\ast,\alpha^\ast,\beta^\ast)=0\\ L^\prime_\beta(x^\ast,\alpha^\ast,\beta^\ast)=0\\ \alpha_ig_i(x^\ast)=0\\g_i(x)\leq0\\\alpha_i^\ast\geq0\\h_j(x^\ast)=0 Lx′(x∗,α∗,β∗)=0Lα′(x∗,α∗,β∗)=0Lβ′(x∗,α∗,β∗)=0αigi(x∗)=0gi(x)≤0αi∗≥0hj(x∗)=0
根据我们的拉格朗日函数(式5)并没有等式约束条件,因此我们只需要满足上面的前6个条件,而第一第二条件是对w和b求偏导等于0,我们在上面已经化简完成了,所以最后需要满足的条件为第3个至第6个条件,即:
L λ ′ = ∑ i = 1 n 1 − y i ( w T x i + b ) = 0 ; ∑ i = 1 n λ i ( 1 − y i ( w T x i + b ) ) = 0 ; 1 − y i ( w T x i + b ) ) ≤ 0 ; λ i ≥ 0 \begin{aligned}L_\lambda^\prime=\sum_{i=1}^n1-y_i(w^Tx_i+b)=0;\\ \sum_{i=1}^n\lambda_i(1-y_i(w^Tx_i+b))=0;\\ 1-y_i(w^Tx_i+b))\le0;\\ \lambda_i\ge0\end{aligned} Lλ′=i=1∑n1−yi(wTxi+b)=0;i=1∑nλi(1−yi(wTxi+b))=0;1−yi(wTxi+b))≤0;λi≥0
从上面可以看出,对于任意样本i,都有 λ i = 0 \lambda_i=0 λi=0或者 y i ( w T x i + b ) = 1 y_i(w^Tx_i+b)=1 yi(wTxi+b)=1,而当 λ i = 0 \lambda_i=0 λi=0时,我们可以根据L对w求偏导和对b求偏导得到的式子,求解出w:
w ∗ = ∑ i = 1 n λ i y i x i w^*=\sum_{i=1}^n\lambda_iy_ix_i w∗=i=1∑nλiyixi
再把 w ∗ w^* w∗和 λ i \lambda_i λi代入求出b值: b ∗ = − max i , y i = − 1 w T x i + min i , y i = 1 w T x i 2 b^*=-\frac{\max_{i,y_i=-1}w^Tx_i+\min_{i,y_i=1}w^Tx_i}{2} b∗=−2maxi,yi=−1wTxi+mini,yi=1wTxi
这样就能找到最优的超平面。而当 λ i > 0 \lambda_i\gt0 λi>0时必有 y i ( w T x i + b ) = 1 y_i(w^Tx_i+b)=1 yi(wTxi+b)=1,此时 λ i \lambda_i λi对应的向量正好在最大间隔的边缘上,就是支持向量。
文章讲述了什么是线性可分,以及如何选择一个最佳平面把数据分成两类,这属于优化问题,选择的方法涉及对偶问题,拉格朗日,SMO等。完结!!!!
补:SVM同样可以解决线性不可分问题,具体可以看SVM解决线性不可分(八)。
参考文章:
https://blog.csdn.net/v_JULY_v/article/details/7624837?utm_source=app
https://blog.csdn.net/b285795298/article/details/81977271
https://blog.csdn.net/qq_35992440/article/details/80987664
https://baike.baidu.com/item/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA/9683835?fromtitle=SVM&fromid=4385807&fr=aladdin
https://www.cntofu.com/book/168/docs/ml/6.1.%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA%E7%9A%84%E5%87%A0%E4%B8%AA%E9%80%9A%E4%BF%97%E7%90%86%E8%A7%A3.md
https://blog.csdn.net/qq_39521554/article/details/80723770