最初學習、理解支持向量機時,有點費勁,參考了一些不錯的書籍和博客,這裏推薦一下:
1.支持向量機簡介
支持向量機(Support Vector Machine,SVM)是一種二類分器,只支持兩種類別的分類,不過在一些場合下可以將多個SVM串聯起來,達到多分類的目的,下面先從二維情況入手,說明一下SVM如何實現分類。
觀察下面這張平面上的圖
圖 1
藍色的數據點屬於類,綠色的數據點屬於類,中間有一條紅色直線將兩類數據點分隔開,那麼在平面上可以得到這條直線的方程,構建SVM模型的過程就是計算參數、得到這條直線(針對二維的情況而言,多維情況下就是超平面)的過程。分類時,將待分類數據代入到函數中,若結果大於0則爲類,小於0則爲類。
2.構建支持向量機
2.1 支持向量
從圖1中就可以看到,能將類、類包含的數據點完全分開的直線實際上有無數條(如紅色虛線)
圖 2
那麼SVM中需要的、要確定的是哪一條呢?SVM的分類方式是計算,如果結果爲正/負,那麼結果越大/小,我們就越相信爲點屬於類/,這個概念理解起來比較直觀(數學上的證明我也不瞭解),從幾何上看,就是數據點離直線越遠,我們越相信其分類的確定性。在圖2中,如果直線靠近藍色點、遠離綠色點(直線L1),那麼當我們將一個點分類爲類時,會覺得分類結果不那麼靠譜,尤其是最靠近直線的數據點,其分類結果最值得懷疑,分類爲類的情況也是如此,如何處理這種情況?找一條直線,讓其離類、類的點一樣遠,當然,肯定不是離訓練集中所有的數據點一樣遠,而是離直線距離最近的點的距離,如果我們對這樣的點的分類結果也有信心,那麼對所有的點的分類結果就更有信心。在下文中,不加強調的話,所說的距離指的就是離直線距離最近的點的距離,具體到圖3中就是點和點(針對直線L1)。
圖 3
在圖3中,當採用直線L1作爲分類直線時,點和點離L1最近,當採用直線L2作爲分類直線時,點和點離L2最近,由此可以看到,是訓練集中的數據點決定了分類直線的位置,由於訓練集中的數據是有限的,因此一定可以找到這樣一條直線:
- 到類、類距離相等
- 在滿足上面一條條件的直線中,到類、類距離最大
構建SVM時需要的直線就是滿足這樣條件的一條直線,我們確定這樣一條直線並不依靠訓練集中的所有數據,而是離直線距離最近的點,這些點和原點間形成了一個個向量,稱之爲支持向量,建模完成後,需要存儲的信息就是支持向量的信息。
2.2 尋找最優分類邊界
在2.1節中我們已經明白了SVM建模的目標,數據點代入函數 的計算結果可以表示距離,這個距離稱爲函數距離,等倍數縮放參數、時函數距離會改變,但是實際的分類邊界超平面並不會變化,因此 “使函數距離最大化” 作爲優化目標並不合適。我們可以採用幾何距離,也即是數據點到分類超平面的距離,這裏以3維空間中的平面爲例,假設某一平面爲
其中,爲一向量,點、 爲該平面上的兩點,則直線所在向量爲,可得
也即直線上向量與垂直,由於直線是任意一條直線,因此即爲法向量
點爲待分類數據點,點爲點在超平面上的投影點,它們之間的距離爲,則可以得到以下等式
(1)
由於點在超平面上,因此,將上式代入,得到
(2)
我們的目標就是是找到最大的 。 實際上一個平面的法向量有兩個方向,也就是說公式(1)、(2)中存在符號正負的問題,爲了解決這個問題,可以採用如下方式:由於SVM是一個二分類模型,因此可以將滿足的數據點的類別定爲 1,滿足的數據點的類別定爲 -1,類別用 表示,然後計算 的值,這樣就解決了正負的問題,因爲始終爲正
(3)
爲什麼要將類別 定爲1、-1呢? 這還要從SVM建模的目標出發來理解,我們的目的是找到一個使幾何距離最大的分類超平面,優化的目標是距離,類別 對優化結果是沒有任何影響的,這從公式(2)就可以看出來,我們也可以不用類別 、轉而優化,結果是一樣的,類別 取1、-1只是爲了方便,當然也可以使類別 取2、-2,是一樣的道理。
經過以上的過程,尋找最優分類邊界的目標就轉化爲了計算 的最大值,由於公式(3)中分子和分母項均可變,因此需要約束其中一項,由於的原因,分子、分母是彼此制約的,約束爲某個值並不容易做到,而且容易做出錯誤的約束,因此一般約束爲某個固定的值,這裏假設約束,事實上支持向量上的數據點不能保證滿足,不過沒關係,可以採用等倍數縮放參數、的方式,保證,超平面位置也不會變化,此時分母也要乘以相應的係數,公式(3)變爲以下形式
式中 爲參數參數、的縮放倍數,保證支持向量點滿足,這樣分子就約束了,現在只需要優化以保證最優,由於爲固定值,因此也只需要優化.我們一般使 取1,原因也是爲了方便而已,不影響目標優化,這樣一樣最終的優化目標就是
(4)
3.小結
第一篇的內容就先到這裏,公式(4)的計算放到第二篇中說明。從本篇文章中,可以知道SVM建模的目標,以及如何將建模過程轉變爲幾何與數值計算過程。