做機器學習的一定對支持向量機(support vector machine-SVM)頗為熟悉,因為在深度學習出現之前,SVM一直霸占著機器學習老大哥的位子。他的理論很優美,各種變種改進版本也很多,比如latent-SVM, structural-SVM等。這節先來看看SVM的理論吧,在(圖一)中A圖表示有兩類的數據集,圖B,C,D都提供了一個線性分類器來對數據進行分類?但是哪個效果好一些?
(圖一)
可能對這個數據集來說,三個的分類器都一樣足夠好了吧,但是其實不然,這個只是訓練集,現實測試的樣本分布可能會比較散一些,各種可能都有,為了應對這種情況,我們要做的就是盡可能的使得線性分類器離兩個數據集都盡可能的遠,因為這樣就會減少現實測試樣本越過分類器的風險,提高檢測精度。這種使得數據集到分類器之間的間距(margin)最大化的思想就是支持向量機的核心思想,而離分類器距離最近的樣本成為支持向量。既然知道了我們的目標就是為了尋找最大邊距,怎么尋找支持向量?如何實現?下面以(圖二)來說明如何完成這些工作。
(圖二)
假設(圖二)中的直線表示一個超面,為了方面觀看顯示成一維直線,特征都是超面維度加一維度的,圖中也可以看出,特征是二維,而分類器是一維的。如果特征是三維的,分類器就是一個平面。假設超面的解析式為,那么點A到超面的距離為
,下面給出這個距離證明:
(圖三)
在(圖三)中,青色菱形表示超面,Xn為數據集中一點,W是超面權重,而且W是垂直于超面的。證明垂直很簡單,假設X'和X''都是超面上的一點,
因此W垂直于超面。知道了W垂直于超面,那么Xn到超面的距離其實就是Xn和超面上任意一點x的連線在W上的投影,如(圖四)所示:
套進拉格朗日乘子法公式得到如(公式五)所示的樣子:
(公式五)
在(公式五)中通過拉格朗日乘子法函數分別對W和b求導,為了得到極值點,令導數為0,得到
,然后把他們代入拉格朗日乘子法公式里得到(公式六)的形式:
(公式六)
(公式六)后兩行是目前我們要求解的優化函數,現在只需要做個二次規劃即可求出alpha,二次規劃優化求解如(公式七)所示:
(公式七)
通過(公式七)求出alpha后,就可以用(公式六)中的第一行求出W。到此為止,SVM的公式推導基本完成了,可以看出數學理論很嚴密,很優美,盡管有些同行們認為看起枯燥,但是最好沉下心來從頭看完,也不難,難的是優化。二次規劃求解計算量很大,在實際應用中常用SMO(Sequential minimal optimization)算法,SMO算法打算放在下節結合代碼來說。
參考文獻:
[1]machine learning in action. Peter Harrington
[2] Learning From Data. Yaser S.Abu-Mostafa
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://blog.csdn.net/marvin521/article/details/9286099