SVM(Support Vector Machines)
建議可以先讀PLA(感知器)
我們在一個分類問題中,我們需要找到一個超平面(Hyperplane)來分隔不同的類別,就如同圖中的線,但能分隔不同的類別的超平面有無限多個(圖中就有3個),我們希望得到的是最右圖那一條線,他的margin(邊界)(灰色區域)越大越好,意思就是這條線離所有的點越遠越好,這樣的好處是能容忍的測量誤差大,不容易overfitting。
這邊與PLA不同的是,我們不將bias轉成以及加上。
表示空間中的某個座標,x'表示在平面上的某個座標,我們假設有一個平面是,假設兩個剛好在平面上的兩個點x',x'',表示而且,那麼。
而(x''-x')是一個向量,那表示是(x''-x')的法向量,則x到平面的距離distance(x,h)就是(x-x')向量到w方向的投影,得到的距離會再加上絕對值避免負值。
我們希望最後找到的這個預測的值是與y同(正負)號的,,然而margin(邊界)代表的最小值,我們要找到能讓邊界最大的w跟b為解。
假設我們找到一個解為,但同時也為解,括號內可以任意縮放,這邊的w、b為常數(不是未知數),這樣我們還是有無限多組解,我們希望只要找到唯一的一組。
現在我們限制條件 進行放縮只能是讓它跟 相乘會是 1,也就是 ,這樣原本的 margin(b,w) 就是可以轉換成 的長度。
變成求滿足(1) max 及 (2) min 這兩個條件的w、b。
我們放鬆條件使讓我們方便求解。
變成求滿足(1) max 及 (2) min 這兩個條件的w、b,但放鬆條件會不會讓我們得到不同的解(w,b)。
使min 成立的w中能使最大的那個會不會與使min 成立的w中能使最大的那個相同? 答案是兩個最佳解相同。
如果現在找到的解(w,b)是最佳解,,因爲是最優解,所以當前的(w,b)一定是讓的值最大的解,此時我們可以縮放w跟b同除1.126,會得到,而此時的w應該能比原本的1.126w得到更大的,那麼原先假設不成立。同理可證,在不等於1時的(w,b)均不是最優解。
然後我們將求最大值改成求最小值,,然後把根號拿掉,加上1/2。
,如上圖一個簡單的例子,我們解出來最佳解是x1 - x2 - 1 = 0這個超平面,而這個超平面也稱為 Support Vector Machine(SVM),剛好在最佳解邊界上的點我們稱為支持向量(Support Vector)。
前面使用的是簡單的例子,但如果難一點的呢?我們應該怎麼解?這邊有條件限制我們沒辦法用Gradient Descent解。
觀察所有的限制式就會發現 SVM 可以用二次規劃(quadratic programming)來找出最佳解。
上圖將原本式子轉成二次規劃的形式,然後我們就可以解w,b了。
kernel
kernel可以參考這篇
柔化邊界(Softening Margins)
Softening Margins可以參考這篇
實作
sklearn.svm.LinearSVC
In-Depth: Support Vector Machines
吴恩达机器学习课python代码
參考PPT來自林軒田機器學習技法有興趣可以上youtube或coursera上課