svm演算法c
『壹』 SVM演算法原理
一、決策面方程
以二維空間為例,二維空間中任意一條直線方程可以寫為
我們將其向量化,可以得到
設用向量w代表矩陣a1和a2,用向量x代表矩陣x1和x2,標量γ代表b,則方程可化表示為
從方程可知,一個n維空間的超平面在二維空間上的表現,可以是一條直線,或者一個曲線(二維空間中只能看到這個n維超平面穿過而無法看到其模樣), 超平面方程即是我們的決策面方程
二、函數間隔和幾何間隔
在SVM監督學習中,我們規定標簽數據為+1和-1兩個值,這么做的目的, 可以計算出任意一個樣本點在超平面方程上的表現結果的符號,與標簽符號是否一致來判斷分類的正確性 ,為此我們可以引入函數間隔的概念
但是當我們成比例的縮放w和γ,函數間隔的值也將成比例的變化,可是超平面的位置並沒有發生任何變化,所以函數間隔並不是我們想要的分類間隔,為此,我們需要引入幾何間隔的概念
還是以二維空間出發,任意一點到直線的距離可以寫成
我們將其拓展到n維空間,直線方程即是我們的超平面方程,則n維空間中任何一點到超平面的距離可以寫成
為此,我們引入幾何間隔概念,其中||w||表示向量w的二范數
從幾何間隔可以看出,就算等比例縮放w和γ,由於除上了||w||使得幾何間隔的值不會改變,它只隨著超平面位置的變化而變化,因此, 我們要尋找的分類間隔是幾何間隔
三、不等式約束條件
SVM演算法的目的是找到一個將分類效果達到最合理化的超平面,這個超平面即是分類器 。而評估分類器的好壞的標准就是分類間隔的大小
我們定義分類間隔的距離為d,好的分類器應該讓所有樣本點到決策面的幾何間隔都大於等於d
化簡上式,不等式兩邊同時除以d可得
由於||w||和d都是標量,可定義
則上式可化簡為
在不等式兩邊同時乘以yi,即將兩個式子化簡為一個式子(這里體現了正是因為標簽數據為+1和-1,才方便將約束條件變成一個約束方程)
這個約束方程的意義 即是任何樣本點到超平面(分類器)的幾何間隔都大於等於分類間隔
四、SVM最優化模型的數學描述
評估分類器的優劣是分類間隔的大小,且對於任意樣本點都滿足約束方程
由約束方程可知,當樣本點落在支持向量邊界上有如下關系
則分類間隔d可以表示為支持向量點到超平面的幾何間隔
要讓任何樣本點都在d之外,即求分類間隔d的最大值,則目標函數可以寫成
為了方便在後續最優化處理中對目標函數的求導,我們將目標函數做等效變化
由目標函數是二次的,而約束條件是線性的,則 SVM的數學模型即是:不等式約束條件下的二次型函數優化 ,而求解這一類優化問題,接下來我們需要構造 拉格朗乘子函數
五、引入拉格朗函數
目標函數是求解在約束條件g(x)下的二次型函數f(x)的最小值,直觀上我們希望構造一個函數L(x),使得L(x)在f(x)的可行解區域內的求出的值和f(x)求出的值完全一樣,而在f(x)的可行解區域外,L(x)的值又接近無窮大,這么做的目的,使得我們可以用一個函數L(x)來等效表示原問題的g(x)和f(x)
拉格朗函數的目的,就是將約束條件融合到目標函數中,構造一個新函數來表示目標函數,將有約束的優化問題轉化為無約束的優化問題
下面,我們構造拉格朗函數來表示目標函數
其中αi是拉格朗日乘子,每一個約束條件對應一個拉格朗日乘子,其中αi大於等於0
則原優化問題可以轉化為
討論如下條件(1)(2):
(1) 當樣本點不滿足約束條件時,即說明在 可行解區域外
此時將αi置為正無窮大,那麼θ(w)顯然也是正無窮大
(2) 當樣本點滿足約束條件時,即說明在 可行解區域內
此時θ(w)的最小值就是原目標函數,於是綜上所述,引入拉格朗乘子函數後,可以得到新的目標函數
我們用p*表示優化目標函數後的最優解,且與最初的目標函數等價
觀察新的目標函數,如果直接求偏導數求解,那麼一上來將面對w和b兩個未知參數,而αi又是不等式約束,求解過程將非常復雜。換一個角度思考,如果將max和min的位置對調,變成如下新的目標函數
上式變化使用了 拉格朗日函數的對偶性,交換後的新問題即是原目標函數的對偶問題 ,我們用d*來表示對偶目標函數的最優解,可見d*的求導過程比p*相對容易,且d*<=p*,而當滿足下列條件時,d*= p*
因為目標函數本身已經是一個凸函數,而優化問題又是求解最小值,所以目標函數的最優化問題就是凸優化問題,則接下來就要重點討論KKT條件
六、KKT條件的描述
一個最優化模型能夠表示成下列標准形式
其中f(x)是需要最小化的函數,h(x)是等式約束,g(x)是不等式約束,m和n分別是等式約束和不等式約束的數量
KKT條件即是規定f(x)的 最優值 必須滿足以下(1)(2)(3)條件, 只有滿足KKT條件,目標函數的最優化問題依然可以用拉格朗日乘子法解決
很明顯,我們需要優化的目標函數屬於帶有不等式約束函數g(x),所以條件二顯然滿足,下面我們來分析條件一和條件三的理論
七、目標函數的等高線與約束條件的最優值分析(條件一)
對於KKT條件一的分析,我們假設目標函數是f(x1,x2)的二元函數,它的圖像在三維空間里是一個曲面,准確的來說是一個凸曲面
其中g(x1,x2)是約束方程,要求目標函數f(x1,x2)的最小值,即轉化為 求g(x1,x2)=c這條曲線上的一點,使得f(x1,x2)取得最小值,換個比喻,就是在山上(目標函數曲面)尋找一條山路(約束條件曲線)的最低點
我們畫出目標函數的等高線,來分析目標函數最優值和約束條件的關系
對於研究目標函數z=f(x1,x2),當z取不同的值,即將曲線z投影在(x1,x2)組成的空間中(這里指的是二維空間),也就是曲面的等高線,上圖中d1和d2即是兩條目標函數的等高線,可以看出,當約束函數g(x1,x2)與目標函數的等高線有共同的交點, 即證明這組值同時滿足在目標函數的可行域中,也符合約束條件的約束關系
如果等高線與g(x1,x2) 相交 ,則是一組目標函數的解,但是這個解一定不是最優解, 因為相交意味著肯定存在其它等高線在該條等高線的內部或者外部 ,可能會使得新的等高線與g(x1,x2)的交點更大或者更小,這就意味著只有當等高線與g(x1,x2) 相切 ,才可能得到最優解(切線可能多條)
所以最優解必須滿足: 目標函數的負梯度方向與約束函數的梯度方向一致
而上式恆成立的條件就是: 拉格朗日乘子α >= 0 ,且這個式子就是目標函數對各個參數求偏導數的結果,即KKT的第一個條件:目標函數對各個參數的導數為0
八、分類討論約束條件和拉格朗日乘子的組合(條件三)
對於KKT條件三,可以看出,因為所有的約束函數gi(x)<=0,所有的拉格朗日乘子αi>=0,要使得求和後結果為0,要麼某個約束函數gi(x)=0,要麼其對應的αi=0
從一個案例出發來分析KKT條件三的邏輯,假設目標函數和約束函數是
將不等式約束構造出拉格朗日函數,並分別對x1和x2求偏導數
而KKT的條件三要求最優解滿足 ∑α*g(x) = 0,在這個案例里α和g(x)只有一個,結合條件一,可以得到
根據之前的分析,最優值滿足條件三的話,要麼α=0,要麼g(x)=0
(i):如果α=0,則x1=1,x2=-2,代入g(x1,x2) =10-1-10*(-2)=29>0,發現這組解違背了約束函數g(x)<0,則舍棄這組解
(ii): 如果g(x1,x2)=0,則代入x1和x2的表達式到g(x)中,解出α=58/101>0,發現這組解不違背約束函數,則代入α解出x1=130/101,x2=88/101,則這組解有可能是最優解
綜上(i)(ii)討論,目標函數的最優值符合KKT條件三,也說明了 滿足強對偶條件的優化問題的最優值必須滿足KKT條件
九、求解對偶問題
上面分析了目標函數滿足凸優化和KKT條件,則問題轉化為求解原問題的對偶問題(即p*=d*)
根據對偶問題描述,先要求內側w和b關於L(w,b,α)的最小化值,即求L對w和b的偏導數
將w和b的偏導數帶入拉格朗函數化簡得
整理一下最終化簡結果為
從上述結果可以看出,樣本的x和y是已知的,此時的 L(w,b,α)函數只有一個變數,即αi
我們歸納一下現在的目標函數為
現在目標函數變成了如上形式,其中αi>=0,這里隱含著一個假設,即數據100%線性可分,但是現實生活中,數據往往是不會那麼規則的線性化,為此我們需要引入鬆弛變數
十、引入鬆弛變數
由於現實世界中的數據都是帶有噪音的,也就是數據可能出偏離其正常的位置很遠,而出現這種極端現象後往往會影響超平面的選擇,也許將無法構造出將數據徹底分開的超平面出來
所以對於處理這種情況, SVM需要允許(妥協)出某些噪音很大的數據點能夠偏離超平面,即允許其出現在超平面的錯誤的一側 ,為此我們引入鬆弛變數C,這樣我們的目標函數又變為
接下來為了研究討論αi的取值范圍,我們加上一個負號將目標函數等價轉化為
十一、討論拉格朗乘子的取值意義和其值域
回顧一下最初的約束條件為
設ui為該約束條件,可以歸納出αi關於約束函數的取值意義
αi只有滿足上述3種情況,才能求出最優解,所以 當αi與約束條件ui沖突的時候,需要更新這些αi ,這也就是滿足目標函數的第一個約束限制,即0<=αi<=C
而同時目標函數還受到第二個約束條件的限制,即
所以不能只更新一個αi因子,需要同時再次更新第二個αj因子,也就是 α因子總是成對的更新(αi對總是和αj配對),一增一減,此消彼長,才能保證加權和為0的約束 ,同時這也就是下面提及SMO演算法的思想和多元函數化簡為二元函數,在從二元函數化簡為一元函數的難點
根據這個約束和α因子需要成對更新,假設我們選取的兩個拉格朗乘子為α1和α2,則更新之前是old,更新之後是new,且更新前後需要滿足和為0的約束
兩個因子同時更新顯然非常困難,所以需要先求出第一個αj的解,再用αj的解去表示更新第二個αi的解 ,後文的SMO演算法會闡述這一點。因此需要先確定αj的取值范圍,假設L和H分別為它的下界和上界,結合目標函數的約束限制來綜合討論L和H的取值關系
(i):當y1和y2異號時,可以得到
移項可得a2 = a1 - A,此時α的取值范圍如下圖所示
所以此時α的上下界H和L為
(ii):當y1和y2同號時,可以得到
移項可得a2 = -a1 + A,此時α的取值范圍如下圖所示
所以此時α的上下界H和L為
綜上(i)(ii)的討論,通過y1和y2的異號或者同號,可以推導出α更新後的上下界分別為
這個公式顯得非常的重要,它將α因子限制在有效的矩形范圍內,在SMO演算法中,當我們更新完α後,由於α可能會被更新得很大或很小,因此需要經過裁剪來保證α的在約束條件內
12、SMO演算法的思想
回顧之前第九,第十,第十一步的分析,目標函數為
目標函數只包含n個變數α的 多元函數 ,且帶有兩個約束條件,我們的 目的是求出目標函數的最小值,即找到一組α的組合,使得目標函數取得最小值
由第十一步的分析,我們需要不斷更新這n個α因子,通過迭代來逼近函數達到最小值,但是如果一次性更新n個參數,將會有n!種組合,那麼時間復雜度將會非常高,為此我們首先想到 坐標上升(下降)法
來通過一個例子來說明坐標上升法的思路
可知案例中要求一個三元函數的最大值, 演算法的思想是每次迭代時只更新一個維度,通過多次迭代直到收斂來優化函數的最值 ,求出三個變數的偏導數推出其關系
通過迭代即就可以求出其最值
SMO演算法借鑒了坐標上升(下降)法的思想來優化α因子組合,但是由於目標函數的第二個約束條件有加權和為0的限制,導致每次迭代時候不能只更新一個因子αi,必須同時更新與之配對的另一個因子αj,此消彼長才能保證加權和為0(第十一步中已提及)
所以SMO演算法思想是將原始問題中,求解n個參數的二次規劃問題,分解成了多個子二次規劃問題來分別求解,每一個子問題只需要求解2個參數,即將多元函數推導為二元函數,再將二元函數推導為一元函數
13、多元函數推導為二元函數
目標函數是關於α的N元函數,通過SMO的演算法思想,假設每次迭代更新,選取一對α1和α2的組合,其餘的乘子不變, 首先需要將α1和α2從目標函數中分離出來 ,也就是將多元函數推導為二元函數
從N元函數中分離出α1和α2因子
由於上式推導結果過於復雜,我們定義2個表達式來表示上式常量部分,用來簡化上式
又由於單獨存下的常數項對以後的求導沒有貢獻,所以我們提出單獨的常數項定義為Constant
帶入vi和Constant表達式,則結果化簡為
至此,我們將 多元函數推導為含有α1和α2變數的二元函數 ,接下來將這個二元函數推導為一元函數
14、二元函數推導為一元函數
我們需要推導出α1和α2的關系,然後用α2來表示α1帶入二元函數,就可以推導出關於α2的一元函數了
由目標函數的第二個約束條件
同理根據SMO演算法思想,從約束條件中分離出α1和α2
將等式兩邊同時乘以y1,可推導出α1和α2的關系
同理,我們定義兩個表達式r和s來表示上式的常量部分,用來簡化上式關系
帶入r和s後,α1和α2的關系推導為
下面將α1帶入我們的二元函數中,可得
至此, 我們將二元函數推導為只含有一個變數α2的一元函數 ,接下來終於可以對目標函數求導了
15、求解一元函數的偏導數,推導出第一個拉格朗乘子的遞推關系
我們對一元函數求α2的偏導數為0
帶入s=y1*y2和y2*y2=1,整理上式可求出α2
『貳』 支持向量機(SVM)中的參數C和gamma代表什麼含義呢
C是懲罰系數,理解為調節優化方向中兩個指標(間隔大小,分類准確度)偏好的權重,即對誤差的寬容度,C越高,說明越不能容忍出現誤差,容易過擬合,C越小,容易欠擬合,C過大或過小,泛化能力變差。
gamma是選擇RBF函數作為kernel後,該函數自帶的一個參數。隱含地決定了數據映射到新的特徵空間後的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的個數影響訓練與預測的速度。
(2)svm演算法c擴展閱讀:
1、支持向量機(Support Vector Machine, SVM)是一類按監督學習方式對數據進行二元分類的廣義線性分類器其決策邊界是對學習樣本求解的最大邊距超平面。
2、SVM使用鉸鏈損失函數計算經驗風險並在求解系統中加入了正則化項以優化結構風險,是一個具有稀疏性和穩健性的分類器。SVM可以通過核方法進行非線性分類,是常見的核學習方法之一。
『叄』 SVM幾種核函數的對比分析以及SVM演算法的優缺點
SVM核函數的作用
SVM核函數是用來解決數據線性不可分而提出的,把數據從源空間映射到目標空間(線性可分空間)。
SVM中核函數的種類
1、線性核
優點:
方案首選,奧卡姆剃刀定律
簡單,可以求解較快一個QP問題
可解釋性強:可以輕易知道哪些feature是重要的
可解決非線性問題
可通過主觀設置冪數來實現總結的預判
對於大數量級的冪數,不太適用
比較多的參數要選擇
可以映射到無限維
決策邊界更為多樣
只有一個參數,相比多項式核容易選擇
可解釋性差(無限多維的轉換,無法算w)
計算速度比較慢(解一個對偶問題)
容易過擬合(參數選不好時容易overfitting)
特徵維數高選擇線性核
樣本數量可觀、特徵少選擇高斯核(非線性核)
樣本數量非常多選擇線性核(避免造成龐大的計算量)
限制:只能解決線性可分問題
2、多項式核
基本原理:依靠升維使得原本線性不可分的數據線性可分;
升維的意義:使得原本線性不可分的數據線性可分;
優點:
缺點:
通常只用在已經大概知道一個比較小的冪數的情況
3、高斯核
優點:
缺點:
4、Sigmoid核
採用Sigmoid函數作為核函數時,支持向量機實現的就是一種多層感知器神經網路,應用SVM方法,隱含層節點數目(它確定神經網路的結構)、隱含層節點對輸入節點的權值都是在設計(訓練)的過程中自動確定的。而且支持向量機的理論基礎決定了它最終求得的是全局最優值而不是局部最小值,也保證了它對於未知樣本的良好泛化能力而不會出現過學習現象。
在實戰中更多的是:
SVM的優缺點
1、SVM演算法對大規模訓練樣本難以實施
SVM的空間消耗主要是存儲訓練樣本和核矩陣,由於SVM是藉助二次規劃來求解支持向量,而求解二次規劃將涉及m階矩陣的計算(m為樣本的個數),當m數目很大時該矩陣的存儲和計算將耗費大量的機器內存和運算時間。針對以上問題的主要改進有有J.Platt的SMO演算法、T.Joachims的SVM、C.J.C.Burges等的PCGC、張學工的CSVM以及O.L.Mangasarian等的SOR演算法。如果數據量很大,SVM的訓練時間就會比較長,如垃圾郵件的分類檢測,沒有使用SVM分類器,而是使用了簡單的naive bayes分類器,或者是使用邏輯回歸模型分類。
2、用SVM解決多分類問題存在困難
經典的支持向量機演算法只給出了二類分類的演算法,而在數據挖掘的實際應用中,一般要解決多類的分類問題。可以通過多個二類支持向量機的組合來解決。主要有一對多組合模式、一對一組合模式和SVM決策樹;再就是通過構造多個分類器的組合來解決。主要原理是克服SVM固有的缺點,結合其他演算法的優勢,解決多類問題的分類精度。如:與粗集理論結合,形成一種優勢互補的多類問題的組合分類器。
3、對缺失數據敏感,對參數和核函數的選擇敏感
支持向量機性能的優劣主要取決於核函數的選取,所以對於一個實際問題而言,如何根據實際的數據模型選擇合適的核函數從而構造SVM演算法。目前比較成熟的核函數及其參數的選擇都是人為的,根據經驗來選取的,帶有一定的隨意性.在不同的問題領域,核函數應當具有不同的形式和參數,所以在選取時候應該將領域知識引入進來,但是目前還沒有好的方法來解決核函數的選取問題。
『肆』 支持向量機(SVM)基本原理
看了很多關於SVM的博客,但是常常只能保存書簽之後看,有時候有的博客就突然沒了,這里就作為搬運工總結一下之後自己看吧。主要內容來自於:
支持向量機通俗導論(理解SVM的三層境界)
線性回歸
給定數據集 , 其中, ,線性回歸試圖學習到一個線性模型,盡可能地輸出正確標記.
如果我們要用線性回歸演算法來解決一個分類問題,(對於分類,y 取值為 0 或者 1),但如果你使用的是線性回歸,那麼假設函數的輸出值可能遠大於 1,或者遠小於 0,就算所有訓練樣本的標簽 y 都是 0 或 1但是如果演算法得到的值遠大於 1 或者遠小於 0 的話,就會感覺很奇怪。所以我們在接下來的要研究的演算法就叫做邏輯回歸演算法,這個演算法的性質是:它的輸出值永遠在 0 到 1 之間。
所以邏輯回歸就是一個分類演算法,這個演算法的輸出值永遠在 0 到 1 之間.
我們先看二分類的LR,具體做法是:利用sigmoid 函數,將每一個點的回歸值映射到0,1之間.sigmoid函數特性如下:
如圖所示,令 , 當 z > 0 , z 越大, sigmoid 返回值越接近1(但永遠不會超過1). 反之,當z < 0時,z 越小, sigmoid 返回值越接近0(但永遠不會小於0).
支持向量機 ,因其英文名為support vector machine,故一般簡稱SVM,通俗來講,它是一種二類分類模型,其基本模型定義為 特徵空間 上的間隔最大的線性分類器,其學習策略便是間隔最大化,最終可轉化為一個凸二次規劃問題的求解。
線性分類器
給定一些數據點,它們分別屬於兩個不同的類,現在要找到一個線性分類器把這些數據分成兩類。如果用x表示數據點,用y表示類別(y可以取1或者-1,分別代表兩個不同的類),一個線性分類器的學習目標便是要在n維的數據空間中找到一個超平面(hyper plane),這個超平面的方程可以表示為( wT中的T代表轉置):
logistic回歸目的是從特徵學習出一個0/1分類模型,而這個模型是將特性的線性組合作為自變數,由於自變數的取值范圍是負無窮到正無窮。因此,使用logistic函數(或稱作sigmoid函數)將自變數映射到(0,1)上,映射後的值被認為是屬於y=1的概率。
假設函數:
其中x是n維特徵向量,函數g就是logistic函數。
圖像為:
在超平面w x+b=0確定的情況下,|w x+b|能夠表示點x到距離超平面的遠近,而通過觀察w x+b的符號與類標記y的符號是否一致可判斷分類是否正確,所以,可以用(y (w*x+b))的正負性來判定或表示分類的正確性。於此,我們便引出了函數間隔(functional margin)的概念。
定義函數間隔 (用表示)為
而超平面(w,b)關於T中所有樣本點(xi,yi)的函數間隔最小值(其中,x是特徵,y是結果標簽,i表示第i個樣本),便為超平面(w, b)關於訓練數據集T的函數間隔:
但這樣定義的函數間隔有問題,即如果成比例的改變w和b(如將它們改成2w和2b),則函數間隔的值f(x)卻變成了原來的2倍(雖然此時超平面沒有改變),所以只有函數間隔還遠遠不夠。
事實上,我們可以對法向量w加些約束條件,從而引出真正定義點到超平面的距離--幾何間隔(geometrical margin)的概念。
假定對於一個點 x ,令其垂直投影到超平面上的對應點為 x0 ,w 是垂直於超平面的一個向量, 為樣本x到超平面的距離,如下圖所示:
根據平面幾何知識,有
其中||w||為w的二階范數(范數是一個類似於模的表示長度的概念), 是單位向量(一個向量除以它的模稱之為單位向量)。
又由於x0 是超平面上的點,滿足 f(x0)=0,代入超平面的方程 ,可得 ,即
隨即讓此式 的兩邊同時乘以 ,再根據 和 ,即可算出 :
為了得到 的絕對值,令 乘上對應的類別 y,即可得出幾何間隔(用 表示)的定義:
從上述函數間隔和幾何間隔的定義可以看出:幾何間隔就是函數間隔除以||w||,而且函數間隔y (wx+b) = y f(x)實際上就是|f(x)|,只是人為定義的一個間隔度量,而幾何間隔|f(x)|/||w||才是直觀上的點到超平面的距離。
對一個數據點進行分類,當超平面離數據點的「間隔」越大,分類的確信度(confidence)也越大。所以,為了使得分類的確信度盡量高,需要讓所選擇的超平面能夠最大化這個「間隔」值。這個間隔就是下圖中的Gap的一半。
通過由前面的分析可知:函數間隔不適合用來最大化間隔值,因為在超平面固定以後,可以等比例地縮放w的長度和b的值,這樣可以使得 的值任意大,亦即函數間隔 可以在超平面保持不變的情況下被取得任意大。但幾何間隔因為除上了 ,使得在縮放w和b的時候幾何間隔的值 是不會改變的,它只隨著超平面的變動而變動,因此,這是更加合適的一個間隔。換言之,這里要找的最大間隔分類超平面中的「間隔」指的是幾何間隔。
於是最大間隔分類器(maximum margin classifier)的目標函數可以定義為
同時需滿足一些條件,根據間隔的定義,有
回顧下幾何間隔的定義 ,可知:如果令函數間隔 等於1(之所以令等於1,是為了方便推導和優化,且這樣做對目標函數的優化沒有影響),則有 = 1 / ||w||且 ,從而上述目標函數轉化成了:
相當於在相應的約束條件 下,最大化這個1/||w||值,而1/||w||便是幾何間隔。
據了解,
由於這個問題的特殊結構,還可以通過拉格朗日對偶性(Lagrange Duality)變換到對偶變數 (al variable) 的優化問題,即通過求解與原問題等價的對偶問題(al problem)得到原始問題的最優解,這就是線性可分條件下支持向量機的對偶演算法,這樣做的優點在於:一者對偶問題往往更容易求解;二者可以自然的引入核函數,進而推廣到非線性分類問題。
那什麼是拉格朗日對偶性呢?簡單來講,通過給每一個約束條件加上一個拉格朗日乘子 ,(Lagrange multiplier),定義拉格朗日函數(通過拉格朗日函數將約束條件融合到目標函數里去,從而只用一個函數表達式便能清楚的表達出我們的問題)
然後令:
容易驗證,當某個約束條件不滿足時,例如 ,那麼顯然有 (只要令 即可)。而當所有約束條件都滿足時,則最優值為 ,亦即最初要最小化的量。
因此,在要求約束條件得到滿足的情況下最小化 ,實際上等價於直接最小化 (當然,這里也有約束條件,就是 ≥0,i=1,…,n) ,因為如果約束條件沒有得到滿足, 會等於無窮大,自然不會是我們所要求的最小值。
具體寫出來,目標函數變成了:
這里用 表示這個問題的最優值,且和最初的問題是等價的。如果直接求解,那麼一上來便得面對w和b兩個參數,而 又是不等式約束,這個求解過程不好做。不妨把最小和最大的位置交換一下,變成:
交換以後的新問題是原始問題的對偶問題,這個新問題的最優值用 來表示。而且有 ≤ ,在滿足某些條件的情況下,這兩者相等,這個時候就可以通過求解對偶問題來間接地求解原始問題。
換言之,之所以從minmax 的原始問題,轉化為maxmin 的對偶問題,一者因為 是 的近似解,二者,轉化為對偶問題後,更容易求解。
下面可以先求L 對w、b的極小,再求L對 的極大。
KKT條件
≤ 在滿足某些條件的情況下,兩者等價,這所謂的「滿足某些條件」就是要滿足KKT條件。
要讓兩者等價需滿足strong ality (強對偶),而後有學者在強對偶下提出了KKT條件,且KKT條件的成立要滿足constraint qualifications,而constraint qualifications之一就是Slater條件。所謂Slater 條件,即指:凸優化問題,如果存在一個點x,使得所有等式約束都成立,並且所有不等式約束都嚴格成立(即取嚴格不等號,而非等號),則滿足Slater 條件。對於此處,Slater 條件成立,所以 ≤ 可以取等號。
一般地,一個最優化數學模型能夠表示成下列標准形式:
其中,f(x)是需要最小化的函數,h(x)是等式約束,g(x)是不等式約束,p和q分別為等式約束和不等式約束的數量。
KKT條件的意義:它是一個非線性規劃(Nonlinear Programming)問題能有最優化解法的必要和充分條件。
而KKT條件就是指上面最優化數學模型的標准形式中的最小點 x* 必須滿足下面的條件:
我們這里的問題是滿足 KKT 條件的(首先已經滿足Slater條件,再者f和gi也都是可微的,即L對w和b都可導),因此現在我們便轉化為求解第二個問題。
也就是說,原始問題通過滿足KKT條件,已經轉化成了對偶問題。而求解這個對偶學習問題,分為3個步驟:首先要讓L(w,b,a) 關於 w 和 b 最小化,然後求對 的極大,最後利用SMO演算法求解對偶問題中的拉格朗日乘子。
對偶問題求解的3個步驟
將以上結果代入之前的L:
得到:
具體推導過程是比較復雜的,如下所示:
最後,得到:
「倒數第4步」推導到「倒數第3步」使用了線性代數的轉置運算,由於ai和yi都是實數,因此轉置後與自身一樣。「倒數第3步」推導到「倒數第2步」使用了(a+b+c+…)(a+b+c+…)=aa+ab+ac+ba+bb+bc+…的乘法運演算法則。最後一步是上一步的順序調整。
從上面的最後一個式子,我們可以看出,此時的拉格朗日函數只包含了一個變數,那就是 (求出了 便能求出w,和b,由此可見,則核心問題:分類函數 也就可以輕而易舉的求出來了)。
上述式子要解決的是在參數上 求最大值W的問題,至於 和 都是已知數。要了解這個SMO演算法是如何推導的,請跳到下文第3.5節、SMO演算法。
總結
讓我們再來看看上述推導過程中得到的一些有趣的形式。首先就是關於我們的 hyper plane ,對於一個數據點 x 進行分類,實際上是通過把 x 帶入到 算出結果然後根據其正負號來進行類別劃分的。而前面的推導中我們得到:
因此分類函數為:
這里的形式的有趣之處在於,對於新點 x的預測,只需要計算它與訓練數據點的內積即可(表示向量內積),這一點至關重要,是之後使用 Kernel 進行非線性推廣的基本前提。此外,所謂 Supporting Vector 也在這里顯示出來——事實上,所有非Supporting Vector 所對應的系數 都是等於零的,因此對於新點的內積計算實際上只要針對少量的「支持向量」而不是所有的訓練數據即可。
為什麼非支持向量對應的 等於零呢?直觀上來理解的話,就是這些「後方」的點——正如我們之前分析過的一樣,對超平面是沒有影響的,由於分類完全有超平面決定,所以這些無關的點並不會參與分類問題的計算,因而也就不會產生任何影響了。
回憶一下我們通過 Lagrange multiplier得到的目標函數:
注意到如果 xi 是支持向量的話,上式中紅顏色的部分是等於 0 的(因為支持向量的 functional margin 等於 1 ),而對於非支持向量來說,functional margin 會大於 1 ,因此紅顏色部分是大於零的,而 又是非負的,為了滿足最大化, 必須等於 0 。這也就是這些非Supporting Vector 的點的局限性。
至此,我們便得到了一個maximum margin hyper plane classifier,這就是所謂的支持向量機(Support Vector Machine)。當然,到目前為止,我們的 SVM 還比較弱,只能處理線性的情況,不過,在得到了對偶al 形式之後,通過 Kernel 推廣到非線性的情況就變成了一件非常容易的事情了(通過求解對偶問題得到最優解,這就是線性可分條件下支持向量機的對偶演算法,這樣做的優點在於:一者對偶問題往往更容易求解;二者可以自然的引入核函數,進而推廣到非線性分類問題」)。
事實上,大部分時候數據並不是線性可分的,這個時候滿足這樣條件的超平面就根本不存在。在上文中,我們已經了解到了SVM處理線性可分的情況,那對於非線性的數據SVM咋處理呢?對於非線性的情況,SVM 的處理方法是選擇一個核函數 κ(⋅,⋅) ,通過將數據映射到高維空間,來解決在原始空間中線性不可分的問題。
具體來說,在線性不可分的情況下,支持向量機首先在低維空間中完成計算,然後通過核函數將輸入空間映射到高維特徵空間,最終在高維特徵空間中構造出最優分離超平面,從而把平面上本身不好分的非線性數據分開。如圖所示,一堆數據在二維空間無法劃分,從而映射到三維空間里劃分:
而在我們遇到核函數之前,如果用原始的方法,那麼在用線性學習器學習一個非線性關系,需要選擇一個非線性特徵集,並且將數據寫成新的表達形式,這等價於應用一個固定的非線性映射,將數據映射到特徵空間,在特徵空間中使用線性學習器,因此,考慮的假設集是這種類型的函數:
這里ϕ:X->F是從輸入空間到某個特徵空間的映射,這意味著建立非線性學習器分為兩步:
首先使用一個非線性映射將數據變換到一個特徵空間F,
然後在特徵空間使用線性學習器分類。
而由於對偶形式就是線性學習器的一個重要性質,這意味著假設可以表達為訓練點的線性組合,因此決策規則可以用測試點和訓練點的內積來表示:
如果有一種方式可以在特徵空間中直接計算內積〈φ(xi · φ(x)〉,就像在原始輸入點的函數中一樣,就有可能將兩個步驟融合到一起建立一個非線性的學習器,這樣直接計演算法的方法稱為核函數方法:
核是一個函數K,對所有x,z,滿足 ,這里φ是從X到內積特徵空間F的映射。
來看個核函數的例子。如下圖所示的兩類數據,分別分布為兩個圓圈的形狀,這樣的數據本身就是線性不可分的,此時咱們該如何把這兩類數據分開呢(下文將會有一個相應的三維空間圖)?
事實上,上圖所述的這個數據集,是用兩個半徑不同的圓圈加上了少量的噪音生成得到的,所以,一個理想的分界應該是一個「圓圈」而不是一條線(超平面)。如果用 和 來表示這個二維平面的兩個坐標的話,我們知道一條二次曲線(圓圈是二次曲線的一種特殊情況)的方程可以寫作這樣的形式:
注意上面的形式,如果我們構造另外一個五維的空間,其中五個坐標的值分別為 ,那麼顯然,上面的方程在新的坐標系下可以寫作:
關於新的坐標 ,這正是一個 hyper plane 的方程!也就是說,如果我們做一個映射 ,將 按照上面的規則映射為 ,那麼在新的空間中原來的數據將變成線性可分的,從而使用之前我們推導的線性分類演算法就可以進行處理了。這正是 Kernel 方法處理非線性問題的基本思想。
再進一步描述 Kernel 的細節之前,不妨再來看看上述例子在映射過後的直觀形態。當然,你我可能無法把 5 維空間畫出來,不過由於我這里生成數據的時候用了特殊的情形,所以這里的超平面實際的方程是這個樣子的(圓心在 軸上的一個正圓)
因此我只需要把它映射到 ,這樣一個三維空間中即可,下圖即是映射之後的結果,將坐標軸經過適當的旋轉,就可以很明顯地看出,數據是可以通過一個平面來分開的
核函數相當於把原來的分類函數:
映射成:
而其中的 可以通過求解如下 al 問題而得到的:
這樣一來問題就解決了嗎?似乎是的:拿到非線性數據,就找一個映射
『伍』 有沒有用c或c++實現svm演算法
林智仁 的libsvm 就是C實現的SVM演算法代碼,回答不能帶鏈接,你去搜一下libsvm就能找到了.你可以找到他的主頁,上面還會有演算法的具體介紹,和libsvm的使用. 這個估計是使用最廣泛的求解svm的工具包. 裡面的代碼都是可以看的.
理論的話,july寫的一篇文章很經典, 搜索 支持向量機通俗導論(理解SVM的三層境界) 就能找到.
另外看樓主是想學習人工智慧演算法的, 附加一個學習神經網路的網路, <神經網路之家> nnetinfo ,專講神經網路的,還有相關視頻.
都是本人學習過程了解到的干貨, 望採納.