在一个周日下午,夏天的雨稀里哗啦地下着
我躺在床上,捧着ipad看支持向量机
睡了好几个觉…支持向量机太好睡了
拉格朗日乘数法太好睡了
几何函数太好睡了
在我看来,支持向量机是目前学下来,最难以理解的内容
希望日后不要太难…脑子不支持的
支持向量积的原理,网上已经有很多人解释了。
支持向量机(SVM)——原理篇
机器学习笔记(五):支持向量机(SVM)
支持向量机算法(SVM)详细讲解(含手推公式)
但即使看了原理篇,依然有绊倒自己的地方,或许是自己数学基础跟不上各大阿婆主,只好自己列出困惑的数学问题。
当数据集线性可分时,假设有一个线性函数能将数据集分类,这就是感知机模型该做的事:找到能让数据集线性划分的一个线性函数 y = ∑ w i x i + b y = ∑w_ix_i + b y=∑wixi+b
但实际上,不一定只有一个线性函数,能线性划分数据集,那么哪个线性函数的划分效果更好呢?这就是支持向量机进一步要做的事。
支持向量机是以感知机为基础,进一步要求线性函数划分距离更宽:也就是线性函数两侧的数据集,距离最远,即求出线性函数对称两侧的最大宽度距离2d
这挺好理解的,要想井水不犯河水,那就离得远远的。最好是一个天上,一个地下,互不打扰
比如深海里的鲨鱼,和高空上的雄鹰,这俩就不是一类…因为离得太远…好吧,这个比喻纯粹扯淡了
从逻辑上来说,空间距离越大,差异越大,这是公认事实。
但要怎么求出2d的最大值呢?
这就要涉及到我困惑很久的第一个问题:点到线(点到面或超平面)的距离计算公式
d = ∣ W T X + b ∣ ∣ ∣ W ∣ ∣ 2 d = \frac{|W^TX+b|}{||W||_2} d=∣∣W∣∣2∣WTX+b∣
为什么是这个公式??这让我困惑很久…数学没学好
我试着从几何的角度,从一元线性函数、二元线性函数图像上去推导,但仅仅能推导到二元,一旦涉及到三元【三维空间】,我脑子就废了
后来,无意间看到一个博主的解释
恍然大悟,哦~~~~
但哦什么呢。。。。这个法向量n是怎么算的
如果超平面的函数为 A x 1 + B x 2 + C x 3 + D = 0 Ax_1+Bx_2+Cx_3+D = 0 Ax1+Bx2+Cx3+D=0
求点 x b x_b xb到超平面 A x 1 + B x 2 + C x 3 + D = 0 Ax_1+Bx_2+Cx_3+D = 0 Ax1+Bx2+Cx3+D=0的距离,(设点 x a x_a xa位于平面上)
那个博主说法向量设为 n → = ( A , B , C ) n^→=(A,B,C) n→=(A,B,C)
则向量 x a x b → = ( x a 1 − x b 1 , x a 2 − x b 2 , x a 3 − x b 3 ) {x_ax_b}^→=(x_{a1}-x_{b1},x_{a2}-x_{b2},x_{a3}-x_{b3}) xaxb→=(xa1−xb1,xa2−xb2,xa3−xb3)
d = x a x b → ∗ n → ∣ n → ∣ = A ( x a 1 − x b 1 ) + B ( x a 2 − x b 2 ) + C ( x a 3 − x b 3 ) A 2 + B 2 + C 2 d = \frac{{x_ax_b}^→*n^→}{|n^→|}=\frac{A(x_{a1}-x_{b1})+B(x_{a2}-x_{b2})+C(x_{a3}-x_{b3})}{\sqrt{A^2+B^2+C^2}} d=∣n→∣xaxb→∗n→=A2+B2+C2A(xa1−xb1)+B(xa2−xb2)+C(xa3−xb3)
由于点 x a x_a xa位于平面上,因此 A x a 1 + B x a 2 + C x a 3 + D = 0 Ax_{a1}+Bx_{a2}+Cx_{a3}+D = 0 Axa1+Bxa2+Cxa3+D=0
则 A x a 1 + B x a 2 + C x a 3 = − D Ax_{a1}+Bx_{a2}+Cx_{a3}= -D Axa1+Bxa2+Cxa3=−D
则分子部分: A ( x a 1 − x b 1 ) + B ( x a 2 − x b 2 ) + C ( x a 3 − x b 3 ) A(x_{a1}-x_{b1})+B(x_{a2}-x_{b2})+C(x_{a3}-x_{b3}) A(xa1−xb1)+B(xa2−xb2)+C(xa3−xb3)
= − ( A x b 1 + B x b 2 + C x b 3 + D ) =-(Ax_{b1}+Bx_{b2}+Cx_{b3}+D) =−(Axb1+Bxb2+Cxb3+D)
整合起来的 d = ∣ x a x b → ∗ n → ∣ ∣ n → ∣ = ∣ A ( x a 1 − x b 1 ) + B ( x a 2 − x b 2 ) + C ( x a 3 − x b 3 ) ∣ A 2 + B 2 + C 2 = ∣ − ( A x b 1 + B x b 2 + C x b 3 + D ) ∣ A 2 + B 2 + C 2 d = \frac{|{x_ax_b}^→*n^→|}{|n^→|}=\frac{|A(x_{a1}-x_{b1})+B(x_{a2}-x_{b2})+C(x_{a3}-x_{b3})|}{\sqrt{A^2+B^2+C^2}}=\frac{|-(Ax_{b1}+Bx_{b2}+Cx_{b3}+D)|}{\sqrt{A^2+B^2+C^2}} d=∣n→∣∣xaxb→∗n→∣=A2+B2+C2∣A(xa1−xb1)+B(xa2−xb2)+C(xa3−xb3)∣=A2+B2+C2∣−(Axb1+Bxb2+Cxb3+D)∣
这不就是 d = ∣ W T X + b ∣ ∣ ∣ W ∣ ∣ 2 d = \frac{|W^TX+b|}{||W||_2} d=∣∣W∣∣2∣WTX+b∣ 的公式了嘛!!!
但要注意:
d = ∣ W T X + b ∣ ∣ ∣ W ∣ ∣ 2 d = \frac{|W^TX+b|}{||W||_2} d=∣∣W∣∣2∣WTX+b∣公式,表示的是点到中间分类函数线的距离
不同的点,计算出的d值是不同的。
顿悟!!
但问题又来了
凭什么法向量可以设为
n → = ( A , B , C ) n^→=(A,B,C) n→=(A,B,C)
这也是困惑很久的小问题,但也可以证明:首先知道法向量是垂直于平面的
求法向量 n → = ( x n 1 , x n 2 , x n 3 ) n^→=(x_{n1},x_{n2},x_{n3}) n→=(xn1,xn2,xn3)
那么当平面上有两个不共线的向量 Q → = ( x q 1 , x q 2 , x q 3 ) Q^→=(x_{q1},x_{q2},x_{q3}) Q→=(xq1,xq2,xq3), F → = ( x f 1 , x f 2 , x f 3 ) F^→=(x_{f1},x_{f2},x_{f3}) F→=(xf1,xf2,xf3)
法向量与这两个向量的乘积均为0
n → ∗ Q = x n 1 x q 1 + x n 2 x q 2 + x n 3 x q 3 = 0 n^→*Q^=x_{n1}x_{q1}+x_{n2}x_{q2}+x_{n3}x_{q3} = 0 n→∗Q=xn1xq1+xn2xq2+xn3xq3=0
n → ∗ F = x n 1 x f 1 + x n 2 x f 2 + x n 3 x f 3 = 0 n^→*F^=x_{n1}x_{f1}+x_{n2}x_{f2}+x_{n3}x_{f3} = 0 n→∗F=xn1xf1+xn2xf2+xn3xf3=0
上述两个式子相减得到 x n 1 ( x f 1 − x q 1 ) + x n 2 ( x f 1 − x q 2 ) + x n 3 ( x f 1 − x q 3 ) = 0 x_{n1}(x_{f1}-x_{q1})+x_{n2}(x_{f1}-x_{q2})+x_{n3}(x_{f1}-x_{q3})=0 xn1(xf1−xq1)+xn2(xf1−xq2)+xn3(xf1−xq3)=0
并且由于向量 Q → 和 F → Q^→和F^→ Q→和F→都在平面上,因此:
A x q 1 + B x q 2 + C x q 3 + D = 0 Ax_{q1}+Bx_{q2}+Cx_{q3}+D = 0 Axq1+Bxq2+Cxq3+D=0
A x f 1 + B x f 2 + C x f 3 + D = 0 Ax_{f1}+Bx_{f2}+Cx_{f3}+D = 0 Axf1+Bxf2+Cxf3+D=0
上述两个式子相减 A ( x f 1 − x q 1 ) + B ( x f 1 − x q 2 ) + C ( x f 1 − x q 3 ) = 0 A(x_{f1}-x_{q1})+B(x_{f1}-x_{q2})+C(x_{f1}-x_{q3}) = 0 A(xf1−xq1)+B(xf1−xq2)+C(xf1−xq3)=0
综合可得:
x n 1 ( x f 1 − x q 1 ) + x n 2 ( x f 1 − x q 2 ) + x n 3 ( x f 1 − x q 3 ) = 0 x_{n1}(x_{f1}-x_{q1})+x_{n2}(x_{f1}-x_{q2})+x_{n3}(x_{f1}-x_{q3})=0 xn1(xf1−xq1)+xn2(xf1−xq2)+xn3(xf1−xq3)=0
A ( x f 1 − x q 1 ) + B ( x f 1 − x q 2 ) + C ( x f 1 − x q 3 ) = 0 A(x_{f1}-x_{q1})+B(x_{f1}-x_{q2})+C(x_{f1}-x_{q3}) = 0 A(xf1−xq1)+B(xf1−xq2)+C(xf1−xq3)=0
因此,可以设 x n 1 = A x_{n1}=A xn1=A, x n 2 = B x_{n2}=B xn2=B, x n 3 = C x_{n3}=C xn3=C
因此法向量可以设为函数的系数!!!!
又悟了!!!数学渣渣的困惑。。。终于悟了
教科书,包括很多up主,在求解最大宽度距离 2 d = 2 ∣ W T X + b ∣ ∣ ∣ W ∣ ∣ 2 2d= \frac{2|W^TX+b|}{||W||_2} 2d=∣∣W∣∣22∣WTX+b∣时,又转化为 求 2 ∣ ∣ W ∣ ∣ 2 \frac{2}{||W||_2} ∣∣W∣∣22的最大值
why??
其实我也悟了。。。但太困了。。。明天再搞吧
公式推导一下:
将划分数据集的分类函数为 A x 1 + B x 2 + C x 3 + D = 0 Ax_1+Bx_2+Cx_3+D = 0 Ax1+Bx2+Cx3+D=0
而两侧对称的边界函数分为设为:
这两个函数之间的距离,并不是2Q,而是 2 Q ∣ ∣ W ∣ ∣ 2 \frac{2Q}{||W||_2} ∣∣W∣∣22Q
为什么是这样呢?
假设
点 x a x_a xa位于 A x 1 + B x 2 + C x 3 + D − Q = 0 Ax_1+Bx_2+Cx_3+D - Q=0 Ax1+Bx2+Cx3+D−Q=0边界函数上(下边界)
点 x b x_b xb位于 A x 1 + B x 2 + C x 3 + D + Q = 0 Ax_1+Bx_2+Cx_3+D + Q=0 Ax1+Bx2+Cx3+D+Q=0边界函数上(上边界)
A x 1 + B x 2 + C x 3 + D − Q = 0 Ax_1+Bx_2+Cx_3+D - Q=0 Ax1+Bx2+Cx3+D−Q=0和 A x 1 + B x 2 + C x 3 + D + Q = 0 Ax_1+Bx_2+Cx_3+D + Q=0 Ax1+Bx2+Cx3+D+Q=0是以 A x 1 + B x 2 + C x 3 + D = 0 Ax_1+Bx_2+Cx_3+D = 0 Ax1+Bx2+Cx3+D=0对称分布的平行的边界函数
设点 x a x_a xa和点 x b x_b xb的连线,垂直于这两条边界函数,则向量 x a x b → x_ax_b^→ xaxb→则相当于这两个边界函数的法向量,同时模| x a x b → x_ax_b^→ xaxb→|表示两个边界函数的距离。
现在要求的就是模| x a x b → x_ax_b^→ xaxb→|,即两个边界函数的距离。
法向量设为 n → = ( A , B , C ) n^→=(A,B,C) n→=(A,B,C)
则向量 x a x b → = ( x a 1 − x b 1 , x a 2 − x b 2 , x a 3 − x b 3 ) {x_ax_b}^→=(x_{a1}-x_{b1},x_{a2}-x_{b2},x_{a3}-x_{b3}) xaxb→=(xa1−xb1,xa2−xb2,xa3−xb3)
d 边界 = x a x b → ∗ n → ∣ n → ∣ = A ( x a 1 − x b 1 ) + B ( x a 2 − x b 2 ) + C ( x a 3 − x b 3 ) A 2 + B 2 + C 2 d_{边界} = \frac{{x_ax_b}^→*n^→}{|n^→|}=\frac{A(x_{a1}-x_{b1})+B(x_{a2}-x_{b2})+C(x_{a3}-x_{b3})}{\sqrt{A^2+B^2+C^2}} d边界=∣n→∣xaxb→∗n→=A2+B2+C2A(xa1−xb1)+B(xa2−xb2)+C(xa3−xb3)
由于点 x a x_a xa有 A x a 1 + B x a 2 + C x a 3 + D − Q = 0 Ax_{a1}+Bx_{a2}+Cx_{a3}+D -Q= 0 Axa1+Bxa2+Cxa3+D−Q=0
点 x b x_b xb有 A x b 1 + B x b 2 + C x b 3 + D + Q = 0 Ax_{b1}+Bx_{b2}+Cx_{b3}+D +Q= 0 Axb1+Bxb2+Cxb3+D+Q=0
则上述两式相减可得: A ( x a 1 − x b 1 ) + B ( x a 2 − x b 2 ) + C ( x a 3 − x b 3 ) − 2 Q = 0 A(x_{a1}-x_{b1})+B(x_{a2}-x_{b2})+C(x_{a3}-x_{b3})-2Q=0 A(xa1−xb1)+B(xa2−xb2)+C(xa3−xb3)−2Q=0
则 d 边界 = ∣ x a x b → ∗ n → ∣ ∣ n → ∣ = ∣ A ( x a 1 − x b 1 ) + B ( x a 2 − x b 2 ) + C ( x a 3 − x b 3 ) ∣ A 2 + B 2 + C 2 = 2 Q A 2 + B 2 + C 2 d_{边界} = \frac{|{x_ax_b}^→*n^→|}{|n^→|}=\frac{|A(x_{a1}-x_{b1})+B(x_{a2}-x_{b2})+C(x_{a3}-x_{b3})|}{\sqrt{A^2+B^2+C^2}}=\frac{2Q}{\sqrt{A^2+B^2+C^2}} d边界=∣n→∣∣xaxb→∗n→∣=A2+B2+C2∣A(xa1−xb1)+B(xa2−xb2)+C(xa3−xb3)∣=A2+B2+C22Q
因此,两个边界函数的公式可对应为
而实际边界函数的W、b系数同比例增大或减小,对函数是毫无影响的
就比如2x + 4 = 0 与 x+2 = 0 本质都是相同的函数。
因此可对两个边界函数的W和b参数进行同比例的缩放
此时,系数更新为 W = W Q W = \frac{W}{Q} W=QW, b = b Q b=\frac{b}{Q} b=Qb
因此两个边界函数最终变为了
并且两个边界函数的距离为 d 边界 = 2 ∣ ∣ W ∣ ∣ 2 d_{边界} = \frac{2}{||W||_2} d边界=∣∣W∣∣22
至此,证成!!!
妈呀…应该是对的吧!!!
但其实我有个困惑,最初证明的点到线(面)的距离公式,以及两个边界函数的距离公式,分别有什么意义呢?
支持向量机,到底是要求距离中间分类线最近的点到线(面)的距离最大,还是要求两个边界函数的距离最大呢?
本质上看,这两个要求其实都是同一个要求,但实际上这两个要求所进行的计算方式是不同的。
如果是要求距离中间分类线最近的点,到中间分类函数的距离最大,那就必须先能求出中间分类函数——但实际我们没有边界函数,是没办法求出中间分类函数的。
- 因此,应该是要求两个边界函数的距离最大,因为两个边界函数的最大距离,实际是可以根据“拉格朗日乘数法”求的。
听起来很绕口,但实际就是我们可以假设一个分类函数
这个分类函数有参数W,那么假设两个边界函数分别在这个分类函数的两侧
我们无需计算出具体的参数b,只要根据参数W,就可以求出两个边界函数的距离
因此,我们只需求出 d 边界 d_{边界} d边界的最大值,并且满足条件 y ∗ ( W T X + b ) ≥ 1 y*(W^TX+b)≥1 y∗(WTX+b)≥1,即可得到模型的最优解。
那么究竟要怎么在有条件限制 y ∗ ( W T X + b ) ≥ 1 y*(W^TX+b)≥1 y∗(WTX+b)≥1的情况下,求出极值 d 边界 = 2 ∣ ∣ W ∣ ∣ 2 d_{边界} = \frac{2}{||W||_2} d边界=∣∣W∣∣22呢?
这就涉及到拉格朗日乘数法了
这痛苦的让人哭泣的拉格朗日
明天继续吧!!
要是换以前,求最小值,要么用求导法或是用梯度下降法,就可以实现。
但现在不行了,因为求最小值时,是有条件约束的。
如何求条件约束下的极小值呢?
这就要用到号称“条件极值杀手”的【拉格朗日乘数法】了。
死脑筋用拉格朗日乘数法,其实会比较简单,
但真的要理解拉格朗日乘数法,真的是头疼
首先,当要求的原函数为f(x,y),条件约束为等式约束g(x,y)=0时,求条件约束下的原函数极小值。
拉格朗日乘数法的计算过程为求 L ( x , y ) = f ( x , y ) + λ g ( x , y ) L(x,y) = f(x,y)+λg(x,y) L(x,y)=f(x,y)+λg(x,y)的极值
看到这的时候,我直觉是合理的,但不知道是如何得出这样的计算过程,并产生了几个问题:
- 为什么有λ?
- 为什么可以构成拉格朗日函数?
- 为什么求出拉格朗日函数极值,就可以求出符合约束条件的极小值???
所以自己又翻阅了很多知乎阿婆主的各种解释
终于功夫不负爱搜索的人
很多人的解释是:用等高线来绘制原函数f(x,y)时,会呈现层层嵌套的圈圈,然后绘制g(x,y)时,很多人却又不是用等高线来绘制g(x,y),然后很多人的解析就直接说g(x,y)取到极值的时候(与f(x,y)相切),就取到了符合约束条件的最小值。
说实话,几何法我还是不太理解
从KKT条件推导穿越回来的我,不得不俯首痛哭
还是要把基础打好,先理解好导数、偏导数、微分、偏微分、全微分、梯度、方向导数这些基础概念
不然自己理解起来,会十分混淆,一知半解
是的,基础很重要
找到有个up主的数理推导:
通过g(x,y)=0,说明这个g(x,y)是隐函数,然后我们可设为显函数 y = φ 1 ( x ) y = φ_1(x) y=φ1(x)
然后代入f原函数: z = f ( x , φ 1 ( x ) ) z=f(x,φ_1(x)) z=f(x,φ1(x)),用z表示代入后的函数表达,使得z与原函数f区分开
根据隐函数求导法则: d y d x = − F x ′ F y ′ \frac{dy}{dx}= - \frac{F'_x}{F'_y} dxdy=−Fy′Fx′为什么隐函数求导法则是这样的,后续再证明
则知道
要使z取到极值,必要条件是偏导数都为0
设 λ = − f y ′ g y ′ = − f x ′ g x ′ λ =- \frac{f'_y}{g'_y}=-\frac{f'_x}{g'_x} λ=−gy′fy′=−gx′fx′,则有
融入了约束条件的函数f求得极值点,需要令x,y的偏导数均为0
那么令 λ = − f y ′ g y ′ = − f x ′ g x ′ λ =- \frac{f'_y}{g'_y}=-\frac{f'_x}{g'_x} λ=−gy′fy′=−gx′fx′,函数取到极值
em。。。这式子很整齐,但这是个什么式子呢????
根据隐函数的求导法则可知 f x ′ f y ′ = − d y d x \frac{f'_x}{f'_y}=-\frac{dy}{dx} fy′fx′=−dxdy, g x ′ g y ′ = − d y d x \frac{g'_x}{g'_y}=-\frac{dy}{dx} gy′gx′=−dxdy
所以, f x ′ f y ′ = g x ′ g y ′ \frac{f'_x}{f'_y}= \frac{g'_x}{g'_y} fy′fx′=gy′gx′可以表示f(x,y)和g(x,y)的切线斜率相等
哇!!!这不就出来了吗!!!这不就是很多人用几何作图来表示的,为什么f(x,y)和g(x,y)在两函数的切线处取到极值吗!!!!用数学推导应该是这样证明的吧!!!!
但是,后边KKT条件推导的我穿越回到这里,还是要唾骂一声:
因为如果 f x ′ f'_x fx′和 f y ′ f'_y fy′都是0的时候,就推不出 f y ′ f x ′ = g y ′ g x ′ \frac{f'_y}{f'_x}= \frac{g'_y}{g'_x} fx′fy′=gx′gy′啦!!!!!!!
总之,当函数取到极值时 λ = − f y ′ g y ′ = − f x ′ g x ′ λ =- \frac{f'_y}{g'_y}= -\frac{f'_x}{g'_x} λ=−gy′fy′=−gx′fx′,可推出,得到两个方程:
而这个z函数,正是我们最后的拉格朗日函数 L ( x , y , λ ) = f ( x , y ) + λ g ( x , y ) L(x,y,λ)=f(x,y)+λg(x,y) L(x,y,λ)=f(x,y)+λg(x,y)
将g(x,y)=0约束条件融入原函数f(x,y)后,成为了拉格朗日函数 L ( x , y , λ ) = f ( x , y ) + λ g ( x , y ) L(x,y,λ)=f(x,y)+λg(x,y) L(x,y,λ)=f(x,y)+λg(x,y)
并且当 λ = − f y ′ g y ′ = − f x ′ g x ′ λ =- \frac{f'_y}{g'_y}= -\frac{f'_x}{g'_x} λ=−gy′fy′=−gx′fx′时,即原函数f(x,y)与约束条件g(x,y)函数相切时,下列式子成立,即可根据下列式子,求出x,y,λ后,求出拉格朗日函数的极值,即原目标函数f(x,y)在约束条件下的极值
拉格朗日乘数法的求极值,可以转化为 ( f x ′ , f y ′ ) + λ ( g x ′ , g y ′ ) = Δ f + λ Δ g = 0 ( f'_x,f'_y)+λ(g'_x,g'_y)=Δf+λΔg=0 (fx′,fy′)+λ(gx′,gy′)=Δf+λΔg=0
我天呐!!!!我感觉完成了一大壮举!!!虽然我觉得偏导数、导数符号可能稍微有点儿问题
但没关系啊。。。至少,在我目前的认知层面来说。。。能圆过去
主要参照了两篇文章,并结合理解(其实这两篇文章中间都有我不理解的地方,但这么一相互融合理解,忽然就懂了呀!)
拉格朗日乘数法推导
拉格朗日乘数法理解
但问题尚未结束,因为之前引用了隐函数求导法则,但还不知道隐函数求导法则究竟是怎么推导出来的
这是很简单的,看别人的就好
隐函数求导法则的证明——某博主
这是我理解到一半,就头晕地想放弃的
好难理解,如果要更透彻的了解【透彻!!!】,需要铺垫的知识:
- 梯度与偏导数的关系
- 偏导数与全微分的关系
- 梯度总是指向函数增长最大的方向
- 涉及了偏导数与切平面的理解
- 涉及了切线与切平面的理解
首先,拉格朗日乘数法是在约束条件为等式的情况下推导出来的。
但支持向量机要解决的是:
但拉格朗日乘数法要求的约束条件是等式约束,但支持向量机却是非等式约束
那这种情况下,就需要对进一步地讲解拉格朗日乘数法为什么可以用在不等式条件约束下。
假设原函数是f(x,y),约束条件为不等式g(x,y)≤0
那么,可以引入松弛变量α²,使得g(x,y)+α²=0,这样就可以应用拉格朗日乘数法,将约束条件融入原函数中,求得极值,即
L ( x , y , λ , α ) = f ( x , y ) + λ g ( x , y ) + λ α 2 L(x,y,λ,α) = f(x,y)+λg(x,y)+λα² L(x,y,λ,α)=f(x,y)+λg(x,y)+λα2,对L函数中的未知数、系数分别求偏导,并使偏导分别为0,即可求出极值
这就要用到之前推导拉格朗日乘数法时,得到的推导结果:
拉格朗日乘数法的求极值,可以转化为 ( f x ′ , f y ′ ) + λ ( g x ′ , g y ′ ) = Δ f + λ Δ g = 0 ( f'_x,f'_y)+λ(g'_x,g'_y)=Δf+λΔg=0 (fx′,fy′)+λ(gx′,gy′)=Δf+λΔg=0
并且要知道,梯度的方向,指向函数值增长最大的方向【为什么?这个后续证明
】
实在懒得在电脑画图了,但其实我还是有点儿小困惑的,λ<0,会妨碍到原函数在切线处取到极值
如果 f ( w ) = w 2 2 f(w) = \frac{w²}{2} f(w)=2w2,在g(w,b)≤0的可行域内,f(w)的梯度,极有可能与g(w,b)共线同向
那么当λ<0时, Δ f + λ Δ g Δf + λΔg Δf+λΔg,就可以等于0,这意味着拉格朗日函数取到极值
但实际,此时在可行域内取到的拉格朗日极值,并非等同于原函数取到极值
因为在可行域内,原函数f(w)值是 w 2 2 > 0 \frac{w^2}{2}>0 2w2>0,实际原函数的极值点,应该在可行域圈上取得。
即,λ<0,会使得函数在Δf≠0处取到拉格朗日极值
因此λ不应小于0,而是λ≥0【至于论证λ大于0就可以的活,还是留给别人吧,算了还是自己分析吧】
首先,梯度是各个方向的偏导数形成的向量
以二元函数为例,讲解为什么梯度指向函数增长最大的方向
首先,梯度是由各个偏导数形成的向量,函数的增长量为 d z = f x ′ d x + f y ′ d y dz=f'_{x}dx+f'_{y}dy dz=fx′dx+fy′dy
如果x偏导数 f x ′ = Δ z Δ x > 0 f'_x=\frac{Δz}{Δx}>0 fx′=ΔxΔz>0,意味着当固定y不变,沿着x正方向移动时,z是增长最大的
如果x偏导数 f x ′ = Δ z Δ x < 0 f'_x=\frac{Δz}{Δx}<0 fx′=ΔxΔz<0,意味着当固定y不变,沿着x负方向移动时,z是增长最大的
那么,偏导数均指向了函数值增长最大的方向,即由偏导数构成的梯度向量,即指向函数值增长最大的方向 Δ z = ( f x ′ , f y ′ ) Δz = (f'_{x},f'_{y}) Δz=(fx′,fy′)
那么在函数值等高线中,梯度方向则是由内指向外侧的向量
非等式约束: y i ( w i x i + b ) ≥ 1 y_i(w_ix_i+b)≥1 yi(wixi+b)≥1,要转化为与求解的极值同向:
why????说实话,我到现在都不理解为什么一定要同向,为什么为什么为什么???后续再慢慢想吧,反正不耽误后续的推导
考虑到支持向量机求得是 求原函数 m i n f ( w ) : ∑ w i 2 2 求原函数minf(w):∑\frac{w_i^2}{2} 求原函数minf(w):∑2wi2,则约束条件应该为
g i ( w , b ) = ( 1 − y i ( W X i + b ) ) ≤ 0 g_i(w,b)=(1-y_i(WX_i+b))≤0 gi(w,b)=(1−yi(WXi+b))≤0
匹配上对应的拉格朗日乘子 λ i λ_i λi,即为 λ i g i ( w , b ) = λ i ( W X i + b ) ≤ 0 λ_ig_i(w,b)=λ_i(WX_i+b)≤0 λigi(w,b)=λi(WXi+b)≤0
注意:这里的 i i i 表示一个对象,该对象的特征元素为 X i X_i Xi,分类结果为 y i y_i yi, g i ( w , b ) g_i(w,b) gi(w,b)表示该对象要满足的约束条件, λ i λ_i λi表示该对象的拉格朗日乘子
那么,如果有n个对象(即n条数据),那么就有n个约束条件 ∑ 1 n λ i g i ( w , b ) ∑_1^nλ_ig_i(w,b) ∑1nλigi(w,b)
支持向量机中已知数据是x,y,而参数w,b未知,因此是通过拉格朗日乘数法求取w和b
- 求目标函数极小值 m i n : f ( w ) = ∑ w 2 2 min:f(w) = ∑\frac{w^2}{2} min:f(w)=∑2w2 , 约束条件为: ∑ 1 n g i ( w , b ) ∑_1^ng_i(w,b) ∑1ngi(w,b)
构建拉格朗日函数: L ( w , b , λ ) = ∑ w 2 2 + ∑ 1 n λ i g i ( w , b ) L(w,b,λ)=∑\frac{w^2}{2}+∑_1^nλ_ig_i(w,b) L(w,b,λ)=∑2w2+∑1nλigi(w,b)
- L w ′ = f w ′ + λ g w ′ = W − ∑ λ i y i X i = 0 L'_{w}=f'_{w}+λg'_w = W-∑λ_iy_iX_i=0 Lw′=fw′+λgw′=W−∑λiyiXi=0
- L b ′ = f b ′ = λ g b ′ = − ∑ λ i y i b = 0 L'_{b}=f'_b=λg'_b=-∑λ_iy_ib=0 Lb′=fb′=λgb′=−∑λiyib=0
- L λ ′ = ∑ g i ( w , b ) = ∑ ( 1 − y i ( W X i + b ) ) = 0 L'_{λ}=∑g_i(w,b)=∑(1-y_i(WX_i+b))=0 Lλ′=∑gi(w,b)=∑(1−yi(WXi+b))=0
- g ( w , b ) ≤ 0 g(w,b)≤0 g(w,b)≤0
- λ ≥ 0 λ≥0 λ≥0
以上这些条件,实际就是KKT条件,我们要在满足以上条件的情况下,求拉格朗日函数的极值点
但以上含有多个参数 W,b, λ i λ_i λi,通过求导求解仍然十分困难
因此需要寻求新的出路
这个新出路就是拉格朗日对偶问题
原本通过将约束条件融入目标函数f(w),来求 m i n : f ( w ) min:f(w) min:f(w),等价于
求 m i n : L ( w , b , λ ) = f ( w ) + ∑ λ i g i ( w , b ) 求min:L(w,b,λ)=f(w)+∑λ_ig_i(w,b) 求min:L(w,b,λ)=f(w)+∑λigi(w,b)
由于 λ i g i ( w , b ) ≤ 0 ,则 ∑ λ i g i ( w , b ) ≤ 0 ,因此 m i n L ( w , b , λ ) ≤ m i n f ( w ) λ_ig_i(w,b)≤0,则∑λ_ig_i(w,b)≤0,因此minL(w,b,λ)≤minf(w) λigi(w,b)≤0,则∑λigi(w,b)≤0,因此minL(w,b,λ)≤minf(w)
但是依然无法求解,因为先调整 λ λ λ取极大值的过程,如果对λ求导,得到的g(w,b)仍然含有未知数w,b,无法判断什么时候取到极大值。
于是想办法让w,b的调整也通过 λ λ λ 的调整来实现,就用拉格朗日的对偶问题。
也就是先调整w,b,求拉格朗日min值,再调整λ,求拉格朗日max值。
求解对偶问题: M A X ( λ ) M I N ( w , b ) L ( w , b , λ ) MAX_{(λ)}MIN_{(w,b)}L(w,b,λ) MAX(λ)MIN(w,b)L(w,b,λ)
推导一下:
由于调整w,b时,并不调整约束条件,即 ∑ λ i g i ( w , b ) ≤ 0 ∑λ_ig_i(w,b)≤0 ∑λigi(w,b)≤0,
因此 M I N ( w , b ) L ( w , b , λ ) ≤ M I N ( w , b ∈ 约束条件 ) L ( w , b , λ ) MIN_{(w,b)}L(w,b,λ)≤MIN_{(w,b∈约束条件)}L(w,b,λ) MIN(w,b)L(w,b,λ)≤MIN(w,b∈约束条件)L(w,b,λ)
因此
M A X ( λ ) M I N ( w , b ) L ( w , b , λ ) ≤ M A X ( λ ) M I N ( w , b ∈ 约束 ) L ( w , b , λ ) ≤ M A X ( λ ) M I N f ( w ) MAX_{(λ)}MIN_{(w,b)}L(w,b,λ)≤MAX_{(λ)}MIN_{(w,b∈约束)}L(w,b,λ)≤MAX_{(λ)}MINf(w) MAX(λ)MIN(w,b)L(w,b,λ)≤MAX(λ)MIN(w,b∈约束)L(w,b,λ)≤MAX(λ)MINf(w)
M A X ( λ ) M I N f ( w ) MAX_{(λ)}MINf(w) MAX(λ)MINf(w)中,调整λ并不影响f(w)的极值,因此 M A X ( λ ) M I N f ( w ) = M I N f ( w ) MAX_{(λ)}MINf(w)=MINf(w) MAX(λ)MINf(w)=MINf(w)
因此, M A X ( λ ) M I N ( w , b ) L ( w , b , λ ) ≤ M A X ( λ ) M I N ( w , b ∈ 约束 ) L ( w , b , λ ) ≤ M I N f ( w ) MAX_{(λ)}MIN_{(w,b)}L(w,b,λ)≤MAX_{(λ)}MIN_{(w,b∈约束)}L(w,b,λ)≤MINf(w) MAX(λ)MIN(w,b)L(w,b,λ)≤MAX(λ)MIN(w,b∈约束)L(w,b,λ)≤MINf(w)
所以, M A X ( λ ) M I N ( w , b ) L ( w , b , λ ) MAX_{(λ)}MIN_{(w,b)}L(w,b,λ) MAX(λ)MIN(w,b)L(w,b,λ)是 M I N f ( w ) MINf(w) MINf(w)的一个下界
要使得≤变为=,表示为强对偶性,就需要涉及到凸优化问题【坦诚表示,懒得去理解】
“强对偶性”成立,由对偶问题的最优值即可得到主问题的最优值,强对偶成立必须满足以下条件:
仿射函数即由 1 阶多项式构成的函数,一般形式为 f(x)=Ax+b,这里,A 是一个 m×k 矩阵,x 是一个 k 向量,b是一个 m 向量,实际上反映了一种从 k 维到 m 维的空间映射关系。
在支持向量机中, f ( w ) = w 2 2 f(w)=\frac{w^2}{2} f(w)=2w2这就是个凸函数,
g(w,b)≤0,可以通过添加松弛变量α²,使得g(w,b)+α²=0,变为仿射函数,在应用拉格朗日乘数法时,简化省去了松弛变量 α²,最终g(w,b)也可视为凸函数
因此,目标函数f(w),约束条件g(w,b)≤0都是凸函数,因此拉格朗日函数L(w,b,λ)呈强对偶性
最终对偶问题的最优解,即为原问题最优解
也就是 M A X ( λ ) M I N ( w , b ) L ( w , b , λ ) = M I N ( w , b ) M A X ( λ ∗ ) L ( w ∗ , b ∗ , λ ∗ ) = M I N f ( w ) MAX_{(λ)}MIN_{(w,b)}L(w,b,λ)=MIN_{(w,b)}MAX_{(λ^*)}L(w*,b*,λ*)=MINf(w) MAX(λ)MIN(w,b)L(w,b,λ)=MIN(w,b)MAX(λ∗)L(w∗,b∗,λ∗)=MINf(w)
现在求解 M A X ( λ ) M I N ( w , b ) L ( w , b , λ ) = M A X ( λ ) M I N ( w , b ) ∑ w 2 2 + ∑ 1 n λ i g i ( w , b ) MAX_{(λ)}MIN_{(w,b)}L(w,b,λ)=MAX_{(λ)}MIN_{(w,b)}∑\frac{w^2}{2}+∑_1^nλ_ig_i(w,b) MAX(λ)MIN(w,b)L(w,b,λ)=MAX(λ)MIN(w,b)∑2w2+∑1nλigi(w,b)
最后w,b都没了,只有λ,只需求出 M A X λ L ( λ ) = ∑ λ i − ∑ i = 1 n ∑ j = 1 n λ i λ j x i x j y i y j 2 MAX_λL(λ)=∑λ_i-\frac{∑_{i=1}^n∑_{j=1}^nλ_iλ_jx_ix_jy_iy_j}{2} MAXλL(λ)=∑λi−2∑i=1n∑j=1nλiλjxixjyiyj
转化为二次凸优化问题,但考虑到如果数据量太大,那么计算起来会非常困难
因此转为用SMO算法