支援向量機(SVM)和python實現(二)
4. 鬆弛向量與軟間隔
前面討論的情況都是樣本分佈都可以被超平面完美分割的情況,但是在現實任務中,經常會有難以完美劃分的情況,就算正好完美劃分了樣本點,也很難判斷這個結果是不是過擬合造成的。
(圖來自https://blog.csdn.net/zouxy09/article/details/17291543)
上左圖中如果我們要考慮點A,得到的超平面就是紅線那樣,上右圖中若是要考慮在class2中的紅點,得到的超平面就是藍線那樣,如此精確的劃分每個點很容易導致模型過擬合,為了緩解這個問題,我們引入軟間隔的概念,軟間隔允許某些樣本不滿足約束:
yi(ωTxi+b)≥1(4.1)(4.1)yi(ωTxi+b)≥1
於是我們修改了最佳化目標:
min.12∥ω∥2+C∑i=1ml0/1(yi(ωTxi+b)−1)(4.2)(4.2)min.12‖ω‖2+C∑i=1ml0/1(yi(ωTxi+b)−1)
其中C>0是一個常數,l0/1(z)l0/1(z)是“0/1損失函式”
l0/1(z)={1,0,if z
當C無窮大時,式(4.2)後面的部分迫使所有樣本均滿足式(4.1)的約束條件,式(4.2)則等價於(1.2),也就是說C越大,擬合非線性的能力越強,同時過擬合的風險也越高。引入l0/1(z)l0/1(z)的目的是,我們只希望那些不滿足(4.1)約束條件的點被算入最佳化目標中,但是l0/1(z)l0/1(z)非凸,非連續,導致這樣的目標函式不容易求解,我們可以使用近似的曲線替代,常用的損失函式為hinge函式:
lhinge(z)=max(0,1−z)lhinge(z)=max(0,1−z)
若採用hinge損失函式,則式(4.2)變成了:
min.12∥ω∥2+C∑i=1mmax(0,1−yi(ωTxi+b))(4.3)(4.3)min.12‖ω‖2+C∑i=1mmax(0,1−yi(ωTxi+b))
引入鬆弛變數ξi≥0ξi≥0後,原來的約束條件就變為:
{yi(ωTxi+b)≥1−ξiξi≥0(4.4)(4.4){yi(ωTxi+b)≥1−ξiξi≥0
同時式(4.3)也可以改寫為
min.12∥ω∥2+C∑i=1mξi(4.5)(4.5)min.12‖ω‖2+C∑i=1mξi
我們重新引入拉格朗日乘子αi≥0 i=1,2,...,mαi≥0 i=1,2,...,m,可得:
L(ω,b,α,ξ,β)=12∥ω∥2+C∑i=1mξi+∑i=1mαi(1−ξi+yi(ωTφ(xi)+b))−∑i=1mβiξiL(ω,b,α,ξ,β)=12‖ω‖2+C∑i=1mξi+∑i=1mαi(1−ξi+yi(ωTφ(xi)+b))−∑i=1mβiξi
對ω,b,ξiω,b,ξi分別求偏導,得:
ω=∑mi=1αiyiφ(xi)0=∑mi=1αiyiC=αi+βi{ω=∑i=1mαiyiφ(xi)0=∑i=1mαiyiC=αi+βi
將結果帶入原式得對偶問題:
max.∑i=1mαi−12∑i=1,y=1mαiαjyiyjκ(xi,xj)s.t. ∑i=1mαiyi=0 0≤αi≤C(4.6)(4.6)max.∑i=1mαi−12∑i=1,y=1mαiαjyiyjκ(xi,xj)s.t. ∑i=1mαiyi=0 0≤αi≤C
和前面說的KKT條件類似,這個對偶問題同樣需要滿足以下KKT條件:
αi≥0yif(xi)−1+ξi≥0αi(yif(xi)−1+ξi)=0ξi≥0βi≥0βiξi=0(4.7)(4.7){αi≥0βi≥0yif(xi)−1+ξi≥0αi(yif(xi)−1+ξi)=0ξi≥0βiξi=0
5. SMO演算法
SMO(Sequential Minimal Optimization)被用來求解SVM問題,該演算法的思想是先固定αiαi以外的引數,然後求αiαi上的極值,由於存在(4.6)中的約束,我們可以先固定2個變數αiαi和αjαj,然後利用約束條件∑mi=1αiyi=0∑i=1mαiyi=0可以用αiαi代表αjαj,然後更新αiαi和αjαj,再重新選擇2個引數,直到收斂。
注意到只需選取的αiαi和αjαj中有一個不滿足KKT(4.7)條件,目標函式(4.6)就會在迭代後變大,因此我們要根據KKT條件來選擇要更新的αiαi和αjαj,下面我們分析一下如何選取:
當αi=0αi=0時,βi=Cβi=C,則ξi=0ξi=0,得yif(xi)≥1yif(xi)≥1
當αi=Cαi=C時,βi=0βi=0,則ξi≥0ξi≥0,且yif(xi)−1+ξi=0yif(xi)−1+ξi=0,得yif(xi)≤1yif(xi)≤1
當0
我們在程式設計時只需要選擇的αiαi對應的yi,xiyi,xi違背上面的約束就可以讓目標函式變大。
假如我們根據違背KKT條件選擇了α1,α2α1,α2,則:
y1α1+y2α2=NN=−∑i≠1,2myiαi(5.1)(5.1)y1α1+y2α2=NN=−∑i≠1,2myiαi
因為yiyi=1yiyi=1,則有:
α1=Ny1−y1y2α2(5.2)(5.2)α1=Ny1−y1y2α2
將αiαi和αjαj代入式(4.6),得:
W(α1,α2)=α1+α2−12α21y21κ11−12α22y22κ22−∑i=3mα1αiy1yiκ(1,i)−∑i=3mα2αiy2yiκ(2,i)+C(5.3)(5.3)W(α1,α2)=α1+α2−12α12y12κ11−12α22y22κ22−∑i=3mα1αiy1yiκ(1,i)−∑i=3mα2αiy2yiκ(2,i)+C
C為一些常數的和
我們令v1=∑mi=3α1αiy1yiκ(1,i)v1=∑i=3mα1αiy1yiκ(1,i),v2=∑mi=3α2αiy2yiκ(2,i)v2=∑i=3mα2αiy2yiκ(2,i),則式(5.3)改為:
W(α1,α2)=α1+α2−12α21y21κ11−12α22y22κ22−α1y1v1−α2y2v2+CW(α1,α2)=α1+α2−12α12y12κ11−12α22y22κ22−α1y1v1−α2y2v2+C
代入式(5.2)得
W(α2)=−12y21(Ny1−y1y2α2)2κ1,1−12α22y22κ2,2−(Ny1−y1y2α2)α2y1y2κ1,2−(Ny1−y1y2α2)y1v1−α2y2v2+α1+α2+C=−12(N−y2α2)2κ1,2−12α22κ1,2−(y2Nα2−α22)κ1,2−(N−y2α2)v1−α2y2v2+Ny1−y1y2α2+α2+C(5.4)(5.4)W(α2)=−12y12(Ny1−y1y2α2)2κ1,1−12α22y22κ2,2−(Ny1−y1y2α2)α2y1y2κ1,2−(Ny1−y1y2α2)y1v1−α2y2v2+α1+α2+C=−12(N−y2α2)2κ1,2−12α22κ1,2−(y2Nα2−α22)κ1,2−(N−y2α2)v1−α2y2v2+Ny1−y1y2α2+α2+C
對(5.4)求導得0:
∂W(α2)∂α2=Ny2κ1,1−α2κ1,1−α2k2,2−y2Nκ1,2+2α2κ1,2+y2v1−y2v2−y1y2+1=−(κ1,1+κ2,2−2κ1,2)α2+κ1,1Ny2−κ1,2Ny2+v1y2−v2y2−y1y2+1=0(5.5)(5.5)∂W(α2)∂α2=Ny2κ1,1−α2κ1,1−α2k2,2−y2Nκ1,2+2α2κ1,2+y2v1−y2v2−y1y2+1=−(κ1,1+κ2,2−2κ1,2)α2+κ1,1Ny2−κ1,2Ny2+v1y2−v2y2−y1y2+1=0
由於f(x)=∑mi=1αiyiκ(xi,x)+bf(x)=∑i=1mαiyiκ(xi,x)+b,則有:
v1=∑i=3mαiyiκi,1=f(x1)−αold1y1κ1,1−αold2y2κ1,2−bv2=f(x2)−αold1y1κ1,2−αold2y2κ2,2−b
又因為αold1=(N−αold2y2)y1,則:
v1−v2=f(x1)−f(x2)−κ1,1N+κ1,2N+(κ1,1+κ2,2−2κ1,2)αold2y2
代入(5.5):
∂W(α2)∂α2=−(κ1,1+κ2,2−2κ1,2)αnew2+(κ1,1+κ2,2−2κ1,2)αold2+y2(y2−y1+f(x1)−f(x2))(5.6)
令η=κ1,1+κ2,2−2κ1,2,E=f(x)−y,則:
∂W(α2)∂α2=−ηαnew2+ηαold2+y2(E2−E1)=0
αnew2=αold2+y2(E1−E2)η(5.7)
未完待續
原文出處:https://blog.csdn.net/z962013489/article/details/82559626
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3349/viewspace-2813921/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 支援向量機(SVM)從原理到python程式碼實現Python
- 支援向量機(SVM)
- OpenCV筆記(3)實現支援向量機(SVM)OpenCV筆記
- SVM——支援向量機(完整)
- SVM_支援向量機
- 【Python機器學習實戰】感知機和支援向量機學習筆記(三)之SVM的實現Python機器學習筆記
- 對SVM支援向量機(1)
- [譯] 支援向量機(SVM)教程
- 感知機與支援向量機 (SVM)
- 支援向量機(Support Vector Machine,SVM)—— 線性SVMMac
- 支援向量機(SVM)的約束和無約束優化、理論和實現優化
- SVM 支援向量機演算法-實戰篇演算法
- 機器學習:支援向量機(SVM)機器學習
- 機器學習——支援向量機(SVM)機器學習
- 支援向量機 (二): 軟間隔 svm 與 核函式函式
- 機器學習——支援向量機SVM(一)機器學習
- 支援向量機(SVM)之硬閾值
- 支援向量機python實現(簡易版)Python
- 一文讀懂支援向量機SVM(附實現程式碼、公式)公式
- 分類演算法-支援向量機 SVM演算法
- 支援向量機SVM:從數學原理到實際應用
- 人工智慧-機器學習-支援向量機SVM人工智慧機器學習
- 學習SVM(二) 如何理解支援向量機的最大分類間隔
- 演算法金 | 再見,支援向量機 SVM!演算法
- SVM 支援向量機演算法-原理篇演算法
- 機器學習基礎專題:支援向量機SVM機器學習
- 機器學習基礎篇:支援向量機(SVM)理論與實踐機器學習
- 機器學習(四):通俗理解支援向量機SVM及程式碼實踐機器學習
- 學習SVM(四) 理解SVM中的支援向量(Support Vector)
- 支援向量機|SMO演算法實現演算法
- 機器學習演算法筆記之5:支援向量機SVM機器學習演算法筆記
- 吳恩達《Machine Learning》精煉筆記 7:支援向量機 SVM吳恩達Mac筆記
- 《機器學習_07_01_svm_硬間隔支援向量機與SMO》機器學習
- 機器學習之支援向量機原理和sklearn實踐機器學習
- 支援向量機
- 《機器學習_07_03_svm_核函式與非線性支援向量機》機器學習函式
- 支援向量機之線性可分向量機
- 機器學習之-搞定支援向量機(SVM)【人工智慧工程師--AI轉型必修課】機器學習人工智慧工程師AI