日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

手把手教你实现SVM算法(二)

發(fā)布時(shí)間:2025/5/22 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手把手教你实现SVM算法(二) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.SMO算法的原理

SMO算法和以往的一些SVM改進(jìn)算法一樣,是把整個(gè)二次規(guī)劃問(wèn)題分解為很多較易處理的小問(wèn)題,所不同的是,只有SMO算法把問(wèn)題分解到可能達(dá)到的最小規(guī)模:每次優(yōu)化只處理兩個(gè)樣本的優(yōu)化問(wèn)題,并且用解析的方法進(jìn)行處理。我們將會(huì)看到,這種與眾不同的方法帶來(lái)了一系列不可比擬的優(yōu)勢(shì)。

對(duì)SVM來(lái)說(shuō),一次至少要同時(shí)對(duì)兩個(gè)樣本進(jìn)行優(yōu)化(就是優(yōu)化它們對(duì)應(yīng)的Lagrange乘子),這是因?yàn)榈仁郊s束的存在使得我們不可能單獨(dú)優(yōu)化一個(gè)變量。

所謂“最小優(yōu)化”的最大好處就是使得我們可以用解析的方法求解每一個(gè)最小規(guī)模的優(yōu)化問(wèn)題,從而完全避免了迭代算法。

當(dāng)然,這樣一次“最小優(yōu)化”不可能保證其結(jié)果就是所優(yōu)化的Lagrange乘子的最終結(jié)果,但會(huì)使目標(biāo)函數(shù)向極小值邁進(jìn)一步。我們?cè)賹?duì)其它Lagrange乘子做最小優(yōu)化,直到所有乘子都符合KKT條件時(shí),目標(biāo)函數(shù)達(dá)到最小,算法結(jié)束。

這樣,SMO算法要解決兩個(gè)問(wèn)題:一是怎樣解決兩個(gè)變量的優(yōu)化問(wèn)題,二是怎樣決定先對(duì)哪些Lagrange乘子進(jìn)行優(yōu)化。

二.兩個(gè)Lagrange乘子的優(yōu)化問(wèn)題(子程序takeStep)

我們?cè)谶@里不妨設(shè)正在優(yōu)化的兩個(gè)Lagrange乘子對(duì)應(yīng)的樣本正是第一個(gè)和第二個(gè),對(duì)兩個(gè)Lagrange乘子α1和α2,在不改變其他乘子的情況下,它們的約束條件應(yīng)表達(dá)為正方形內(nèi)的一條線段。如圖所示:

在這條線段上求一個(gè)函數(shù)的極值,相當(dāng)于一個(gè)一維的極值問(wèn)題。我們可以把α1用α2表示,對(duì)α2求無(wú)條件極值,如果目標(biāo)函數(shù)是嚴(yán)格上凹的,最小值就一定在這一極值點(diǎn)(極值點(diǎn)在區(qū)間內(nèi))或在區(qū)間端點(diǎn)(極值點(diǎn)在區(qū)間外)。α2確定后,α1也就確定下來(lái)了。因此我們先找到α2優(yōu)化區(qū)間的上下限制,再在這個(gè)區(qū)間中對(duì)α2求最小值。

由圖1我們?nèi)菀椎玫溅?sub>2的上下限應(yīng)為:

L=max(0,α2-α1),H=min(C,C+α2 –α1) , 若y1與y2異號(hào);

L=max(0,α2 1-C), H=min(C, α21) ,若y1與y2同號(hào);

令s=y1y2標(biāo)志這兩個(gè)樣本是否同類,則有

L=max(0, α2+sα1- 1/2 (s+1)C), H=min(C, α2 +sα1 –1/2 (s-1)C)

而α1和α2在本次優(yōu)化中所服從的等式約束為:

α1+sα201+sα02=d

下面我們推導(dǎo)求最小值點(diǎn)α2的公式:由于只有α1,α2兩個(gè)變量需要考慮,目標(biāo)函數(shù)可以寫成

Wolfe(α12)=1/2 K11α21+1/2 K22α22+ sK12α1α2 + y1α1v1 +y2α2v2 -α1 -α2+常數(shù)

其中Kij=K(xi,xj) , vi=y3α03Ki3+…+ylα0lKil = ui+b0- y1α01K1i – y2α01K2i

上標(biāo)為0的量表示是本次優(yōu)化之前Lagrange乘子的原值。

將α2用α1表示并代入目標(biāo)函數(shù):

Wolfe(α2)=1/2 K11(d-sα2)2+1/2 K22α22+sK12(d-sα2) α2

+y1(d-sα2)v1 – d+sα2+y2α2v2-α2+常數(shù)

對(duì)α2求導(dǎo):

dWolfe(α2)/dα2

=-sK11(d-sα2)+K22α2-K12α2+sK12(d-sα2)-y2v2+s+y2v2-1 =0

如果Wolfe函數(shù)總是嚴(yán)格上凹的,即二階導(dǎo)數(shù)K11+K22-2K12>0, 那么駐點(diǎn)必為極小值點(diǎn),無(wú)條件的極值點(diǎn)就為

α2=[s(K11-K12)d+y2(v1-v2)+1-s] / (K11+K22-2K12)

將d,v與α0,u之間關(guān)系代入,就得到用上一步的α02,u1,u2表示的α2的無(wú)條件最優(yōu)點(diǎn):

α2=[α02(K11+K22-2K12) +y2(u1-u2+y2-y1)] / (K11+K22-2K12)

令η=K11+K22-2K12為目標(biāo)函數(shù)的二階導(dǎo)數(shù),Ei=ui-yi為第i個(gè)訓(xùn)練樣本的“誤差”,這個(gè)式子又可以寫為

α2=α02+y2(E1-E2)/η

除非核函數(shù)K不滿足Mercer條件(也就是說(shuō)不能作為核函數(shù)),η不會(huì)出現(xiàn)負(fù)值。但η=0是可以出現(xiàn)的情況。這時(shí)我們計(jì)算目標(biāo)函數(shù)在線段兩個(gè)端點(diǎn)上的取值,并將Lagrange乘子修正到目標(biāo)函數(shù)較小的端點(diǎn)上:

f1=y1(E1+b)-α1K(x1,x1)--sα2K(x1,x1)

f2=y2(E2+b)-sα1K(x1,x2)--α2K(x2,x2)

L11+s(α2-L)

H11+s(α2-H)

WolfeL=L1f1+Lf2+1/2 L21K(x1,x1)+1/2 L2K(x2,x2)+sLL1K(x1,x2)

WolfeH=H1f1+Hf2+1/2 H21K(x1,x1)+1/2 H2K(x2,x2)+sHH1K(x1,x2)

當(dāng)兩個(gè)端點(diǎn)上取得相同的目標(biāo)函數(shù)值時(shí),目標(biāo)函數(shù)在整條線段上的取值都會(huì)是一樣的(因?yàn)樗巧习嫉?#xff09;,這時(shí)不必對(duì)α1,α2作出修正。

α2的無(wú)條件極值確定后,再考慮上下限的限制,最終的α2

最后,由等式約束確定α1

α1*1+s(α2-α2*)

三.選擇待優(yōu)化Lagrange乘子的試探找點(diǎn)法

事實(shí)上即使我們不采用任何找點(diǎn)法,只是按順序抽取αi,αj的所有組合進(jìn)行優(yōu)化,目標(biāo)函數(shù)也會(huì)不斷下降,直到任一對(duì)αi,αj都不能繼續(xù)優(yōu)化,目標(biāo)函數(shù)就會(huì)收斂到極小值。我們采取某種找點(diǎn)方法只是為了使算法收斂得更快。

這種試探法先選擇最有可能需要優(yōu)化的α2,再針對(duì)這樣的α2選擇最有可能取得較大修正步長(zhǎng)的α1。這樣,我們?cè)诔绦蛑惺褂脙蓚€(gè)層次的循環(huán):

內(nèi)層循環(huán)(子程序examineExample)針對(duì)違反KKT條件的樣本選擇另一個(gè)樣本與它配對(duì)優(yōu)化(指優(yōu)化它們的Lagrange乘子),選擇的依據(jù)是盡量使這樣一對(duì)樣本能取得最大優(yōu)化步長(zhǎng)。對(duì)其中一個(gè)Lagrange乘子α2來(lái)說(shuō)優(yōu)化步長(zhǎng)為|(E1-E2)/η|,但由于核函數(shù)估算耗時(shí)較大,我們只用|E1-E2|來(lái)大致估計(jì)有可能取得的步長(zhǎng)大小。也就是說(shuō),選出使得|E1-E2|最大的樣本作為第二個(gè)樣本。需要注意的是,這樣的步長(zhǎng)估計(jì)是比較粗略的,選擇出來(lái)的一對(duì)樣本有時(shí)非但不能“一勞永逸”地“一步到位”,反而不能作出進(jìn)一步調(diào)整,(例如η=0的情況,最小優(yōu)化問(wèn)題的二次型只是半正定的)。這時(shí)我們遍歷所有非邊界樣本(非邊界樣本就是Lagrange乘子不在邊界0或C上的樣本),繼續(xù)尋找能與α2配對(duì)優(yōu)化的α1,如果這樣的樣本在非邊界樣本中找不到,再遍歷所有樣本。這兩次遍歷都是從隨機(jī)位置開始的,以免算法總是在一開始遍歷就向固定的方向偏差。在極端退化的情形,找不到與α2配對(duì)能作出進(jìn)一步調(diào)整的α1,這時(shí)我們放棄第一個(gè)樣本。

外層循環(huán)(主程序smo)遍歷非邊界樣本或所有樣本:優(yōu)先選擇遍歷非邊界樣本,因?yàn)榉沁吔鐦颖靖锌赡苄枰{(diào)整,而邊界樣本常常不能得到進(jìn)一步調(diào)整而留在邊界上(可以想象大部分樣本都很明顯不可能是支持向量,它們的Lagrange乘子一旦取得零值就無(wú)需再調(diào)整)。循環(huán)遍歷非邊界樣本并選出它們當(dāng)中違反KKT條件的樣本進(jìn)行調(diào)整,直到非邊界樣本全部滿足KKT條件為止。當(dāng)某一次遍歷發(fā)現(xiàn)沒(méi)有非邊界樣本得到調(diào)整時(shí),就遍歷所有樣本,以檢驗(yàn)是否整個(gè)集合也都滿足KKT條件。如果在整個(gè)集合的檢驗(yàn)中又有樣本被進(jìn)一步優(yōu)化,就有必要再遍歷非邊界樣本。這樣,外層循環(huán)不停地在“遍歷所有樣本”和“遍歷非邊界樣本”之間切換,直到整個(gè)訓(xùn)練集都滿足KKT條件為止。

以上用KKT條件對(duì)樣本所作檢驗(yàn)都是達(dá)到一定精度就可以了,例如正側(cè)的非邊界樣本的輸出ui可以在1的一定公差范圍之內(nèi),通常這一公差(tolerance)取0.001,如果要求十分精確的輸出算法就不能很快收斂。

四.每次最小優(yōu)化后的重置工作

每做完一次最小優(yōu)化,必須更新每個(gè)樣本的誤差(Error Cache),以便用修正過(guò)的分類面對(duì)其它樣本再做KKT檢驗(yàn),以及選擇第二個(gè)配對(duì)優(yōu)化樣本時(shí)估計(jì)步長(zhǎng)之用。

更新Error Cache首先要重置閾值b 。我們可直接利用剛剛被優(yōu)化的兩個(gè)樣本的信息在原閾值b0基礎(chǔ)上作簡(jiǎn)單修正,而不需要調(diào)用所有支持向量重新計(jì)算b 。最小優(yōu)化后的α1*如果不在邊界上,b的計(jì)算公式為:

b1=E1+y11*-α10)K(x1,x1)+y22*-α20)K(x1,x2)+b0

最小優(yōu)化后的α2*如果不在邊界上,b的計(jì)算公式為:

b2=E2+y11*-α10)K(x1,x2)+y22*-α20)K(x2,x2)+b0

α1*,α2*都不在邊界上時(shí),b1和b2是相等的。兩個(gè)Lagrange乘子都在邊界上時(shí),b1和b2以及它們之間的數(shù)都可作為符合KKT條件的閾值。這時(shí)SMO算法選擇最安全的b1 ,b2之中點(diǎn)作為閾值。

非線性的情況,誤差的計(jì)算要用到所有已找到的支持向量及它們的Lagrange乘子:

線性的情況則是先重置分類超平面的法向量w,再根據(jù)uj=w’xj-b計(jì)算輸出uj和誤差Ej=uj-yj 。同閾值的重置一樣,法向量的重置也不需要調(diào)用所有的支持向量,只需在原來(lái)的法向量基礎(chǔ)上作改動(dòng):

w*=w+y11*-α1)x1+y22*-α2)x2

大部分重置工作都是以簡(jiǎn)單的非循環(huán)計(jì)算來(lái)完成的,這使得需要做很多次最小優(yōu)化的SMO算法不必在每次優(yōu)化后的重置中花費(fèi)太多時(shí)間。但是我們也看到,非線性的情況誤差的重置必須與所有支持向量逐個(gè)計(jì)算核函數(shù),而且核函數(shù)的計(jì)算本身就比點(diǎn)積復(fù)雜,于是非線性的情況誤差的重置將成為算法速度的瓶頸。

四、算法的流程圖

五、Platt大神的邏輯代碼

六、源代碼的實(shí)現(xiàn)

未完,待續(xù)……

轉(zhuǎn)載于:https://www.cnblogs.com/machinelearner/archive/2013/03/28/2987509.html

總結(jié)

以上是生活随笔為你收集整理的手把手教你实现SVM算法(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。