1. 程式人生 > >機器學習學習筆記 第十七章 支援向量機

機器學習學習筆記 第十七章 支援向量機

支援向量機(Support Vector Machine)

以前非常厲害的一個演算法,不過後來遇到了對手——神經網路

這個也是面試的時候經常會問到的非常重要的一個演算法

  • SVM要解決的問題:什麼樣的決策邊界才是最好的,如下圖中兩堆點怎麼區分
    • 不過這裡不是要區分這兩堆點,而是舉個例子,後面會進行支援向量機的推導
  • 那麼我們來討論一下決策邊界

  • 這兩個圖分別用不同的決策邊界
  • 可見,第二個圖的決策邊界更好,與兩邊的距離更寬,區分度越明顯

為了更好理解邊界的劃分過程,我們先推導一下點到平面的距離公式

引用百度百科的一張圖
3

  • 我們簡化一下:這裡我們設w\overrightarrow{w}
    是平面的法向量,則平面可以表示為wX+b=0\overrightarrow{w}X+b=0,我們假設空間中一點座標為e=(x,y,z)e=(x,y,z)我們推匯出來
    d=1wwe+bd=\frac{1}{|\overrightarrow{w}|}|\overrightarrow{w}e+b|

下面再來說說資料標籤的定義,因為後面我們要利用支援向量機對資料進行分析,我們先來熟悉一下資料

  • 先假設資料集(X1,Y1)(X2,Y2)(X3,Y3)...(Xn,Yn)(X_1,Y_1)(X_2,Y_2)(X_3,Y_3)...(X_n,Y_n)
  • 其中YY是資料的類別,定義如下:
    Y={+1,X為正例的時候1,X為負例的時候 Y= \begin{cases} +1, & \text {$X$為正例的時候} \\ -1, & \text{$X$為負例的時候} \end{cases}
    • 注意設定的是+1+11-1,而不是1100
  • 那麼,我們利用上面定義好的資料後,就可以定義決策方程
  • 決策方程的定義:

    • 基於上面的距離公式,並且將xx轉換為函式Φ(x)\Phi(x)
      ,有如下公式:
      y(x)=wΦ(x)+by(x)=\overrightarrow{w}\cdot \Phi(x)+b
      \Downarrow
      y(xi)>0yi=+1y(x_i)>0\Leftrightarrow y_i=+1
      y(xi)<0yi=1y(x_i)<0\Leftrightarrow y_i=-1
      \Downarrow
      yiy(xi)>0y_i\cdot y(x_i)>0

有了以上的公式之後,我們就可以確立我們的優化目標了

  • 我們看回去第二個圖,我們就是要找一條直線,離兩邊的點都足夠遠,越遠越好,這樣能最好地區分出兩邊的點
  • 我們先將點到直線的距離都化簡一下:
    Y=yi(wΦ(xi)+b)wY=\frac{y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)}{|\overrightarrow{w}|}
  • 因為yiy(xi)>0y_i\cdot y(x_i)>0,因此這裡將分子的絕對值去掉了,其實這個yiy_i純粹是因為加上去讓後面好處理的

通過這個公式,我們可以得出我們的優化目標

argmaxw,b{1wmini{yi(wΦ(xi)+b)}argmax_{w,b}\{\frac{1}{|\overrightarrow{w}|}min_i\{y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)\}

  • 上式的意思是首先尋找最小距離,也即mini{yi(wΦ(xi)+b)}min_i\{y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)\}即兩邊的點到你要求的那條分割線的最小距離,然後再給這個最小距離求最大值,也即外面的argmaxw,bargmax_{w,b}
  • 但其實我們還是不方便求解這個函式,那麼我們換一個思路,先進行放縮變換試試:
    • 對於方程Y=yi(wΦ(xi)+b)Y=y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b),我們可以嘗試通過放縮使Y>=1|Y|>=1,也即yi(wΦ(xi)+b)>=1y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)>=1(注意,沒通過放縮之前是Y>=0|Y|>=0的)
    • 通過放縮之後,我們是不是就可以通過yi(wΦ(xi)+b)>=1y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)>=1而認為mini{yi(wΦ(xi)+b)}=1min_i\{y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)\}=1了,因為我們放縮的目的就是想讓最小值變成1,這樣後面直接把mini{yi(wΦ(xi)+b)}min_i\{y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)\}當做是1而忽略掉
    • 至此,原優化目標argmaxw,b{1wmini{yi(wΦ(xi)+b)}argmax_{w,b}\{\frac{1}{|\overrightarrow{w}|}min_i\{y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)\}簡化為argmaxw,b1wargmax_{w,b}\frac{1}{|\overrightarrow{w}|}

如何求解極大值呢

  • 線上性迴歸的時候我們試過求極小值,卻沒試過求極大值,那我們是不是可以取一個倒數變成求最小值的問題呢
    argminw,bwargmin_{w,b}|\overrightarrow{w}|
  • 上式還帶有絕對值,用著很不爽,那我們轉換成求
    argminw,b12w2argmin_{w,b}\frac{1}{2}\overrightarrow{w}^2
  • 之所以前面帶一個12\frac{1}{2}是因為後面求導的時候正好能把12\frac{1}{2}