| 來源:機器學習算法與自然語言處理 本文圖文結合,建議閱讀7分鐘。 本文為你詳細描述SVM產生的過程。 前言 眾所周知 SVM 是非常強大的一種分類算法,有著媲美神經網絡的分類效果,實現過程卻簡單得多。受限于我的能力,這篇文章不會系統(tǒng)地介紹 SVM(因為我并不是線性代數、凸優(yōu)化等方面的專家),而是以一個學習者的角度描述 SVM 產生的過程,由于內容較長,計劃分成三到四篇 一個好的分類是怎么樣的 圖中的兩組數據,顯然它們是線性可分(linear separable)的,圖里給出的三條分界線都可以準確區(qū)分這兩類數據,它們是不是一樣好?如果不是,哪一條看起來更加合適? 直覺告訴我們是 a。相比之下,b 和 c 離個別點太近了,我們很難拍著胸脯說“這個點在分界線下面,所以絕對是 X',因為分界線稍微挪一挪就可以改變這些點的屬性,我們想要的是一個相對自信的分界線,使靠近分界線的點與分界線的距離足夠大,上圖中的分界線 a 就符合我們的需求。 ps. 這里所說的分界線嚴格來說是 decision boundary,decision boundary 在二維空間是一條線,在三維空間是一個平面,更高維的空間里稱作超平面,為了方便本文都用分界線來代表 decision boundary。 進入向量的世界 你或許已經注意到 SVM 的全稱是 Support Vector Machine(支持向量機),在推導 SVM 公式過程中,我們幾乎都是在和向量打交道。剛接觸 SVM 的時候我對這個名字非常詫異,SVM 很強是沒錯,但是名字也太「隨意」了吧?希望寫完這篇文章以后我能理解為什么這種算法叫做支持向量機。 如果你之前沒有接觸過向量,建議花一個小時左右的時間熟悉一下向量的概念和基本性質。我們先把空間上的點用向量來表示(以原點為起點的向量): 雖然寫成了向量的形式,其實并沒有什么大不了的,我們可以把它和初中時候學過的直線表達式聯(lián)系起來: 對于 SVM 來說僅僅這樣是不夠的,還記得嗎我們要修一條路出來,我們得確保在一條足夠寬的路里面沒有數據點: 
 
 
 
 
 這樣前面的式子就可以寫成更為簡潔的形式: 
 
 
 什么是支持向量 
 
 
 
 
 這是一個基于 KKT 條件的二次規(guī)劃問題,優(yōu)化原理的內容超出了這篇文章的范疇,在這里我們只要知道拉格朗日乘數法可以求得這個最優(yōu)解,引入新的系數αi : 
 
 令以上兩式為0,我們可以得到: 
 
 
 | 
|  |