1. 程式人生 > >機器學習筆記(五):支援向量機(SVM)

機器學習筆記(五):支援向量機(SVM)

支援向量機是目前機器學習的眾多演算法中使用得最為廣泛的演算法之一,本文主要介紹支援向量機的概念與原理。

目錄

  • 什麼是支援向量機
  • 硬間隔線性支援向量機
  • 軟間隔線性支援向量機
  • 非線性支援向量機

 

 

一、什麼是支援向量機

  支援向量機(Support Vector Machine,簡稱SVM)是一種用來解決二分類問題的機器學習演算法,它通過在樣本空間中找到一個劃分超平面,將不同類別的樣本分開,同時使得兩個點集到此平面的最小距離最大,兩個點集中的邊緣點到此平面的距離最大。如下圖所示,圖中有方形和圓形兩類樣本,支援向量機的目標就是找到一條直線,將圓形和方形分開,同時所有圓形和方形到這條直線的距離加起來的值最大。

上圖中直線H和直線H3都可以將兩類樣本分開,但所有點到H的距離之和更大,所以H更適合我們的分類任務,距離H最近的幾個樣本點叫做支援向量。之所以選擇距離最大的超平面是因為距離最大的超平面具有最好的泛化效能。

上面討論的情況是一種理想中的情況,兩個類別的樣本之間存在著清晰的劃分超平面,但我們在實際工作中處理的任務上並不一定都是這種清晰線性可分的,對於這種清晰線性可分的任務,我們學習一個線性分類器,也稱為硬間隔支援向量機;當訓練資料資料近似線性可分時,也學習一個線性的分類器,即軟間隔支援向量機;當訓練資料線性不可分時,我們可以通過使用核技巧及軟間隔最大化,學習非線性支援向量機

下面我們本著由簡到繁的原則,對這三種支援向量機分別進行介紹。

 

二、硬間隔支援向量機

   現有一個清晰線性可分的訓練樣本集D={(x1,y1),(x2,y2),…,(xm,ym)} yi∈{+1,−1}(i表示第i個樣本,m表示樣本容量),則劃分超平面可通過如下線性方程來描述:

https://img-blog.csdn.net/20131107201104906

其中W為法向量,決定了超平面的方向;b為位移項,決定了超平面與原點之間的距離。顯然,劃分超平面可被法向量w和位移b確定,下面我們將其記為(w,b)。樣本空間中任意點x到超平面(w,b)的距離可寫為

假設超平面能將訓練樣本正確分類,則令對於(xi,yi)有

如上圖所示,距離超平面最近的幾個訓練樣本點使上式的等號成立,它們被稱為“支援向量”,兩個異類支援向量到超平面的距離之和為

為使r最大,則w需取最小,所以求r的最大值等價於求下式的最小值

這是一個凸函式,故區域性極小值就是全域性最小值

對上式新增約束再利用拉格朗日乘子法求解更高效

令上式對w和b的偏導為零可得

將上面兩式代入L(w,b,a),即可將w和b消去,可得到

解出α後,求出w和b即可得到模型

因為上述過程滿足KKT條件(詳細可參考這篇部落格:https://blog.csdn.net/qq_38517310/article/details/79494934),故可得

由於凸函式區域性極值就是全域性最值,當我們取到最小值時還有

這表明,對於任意訓練樣本(xi,yi),總有αi=0或

若αi=0,則該樣本不會在

的求和中出現,也就不會對f(x)有任何影響;若αi>0,則必有,所對應的樣本點位於最大間隔邊界上,是一個支援向量,這顯示出支援向量機的一個重要性質:訓練完成後,大部分的訓練樣本都不需要保留,最終模型僅與支援向量有關。

 

接下來,我們來求解α,即最小化下式

不難發現,這是一個二次規劃問題,可以使用通用的二次規劃演算法來求解,然而,該問題的規模正比於訓練樣本數(因為向量α的維數等於訓練樣本數),這會在實際問題中造成很大的開銷。為了避開這個障礙,人們利用問題本身的特性,提出了許多高效的演算法,序列最小最優化(sequential minimal optimization,SMO)是其中一個著名的代表。

  SMO演算法是一種啟發式演算法,其基本思路是:如果所有變數的解都滿足此最優化問題的KKT條件,那麼這個最優化問題的解就得到了。因為KKT條件是該最優化問題的充分必要條件。否則,選擇兩個變數,固定其他變數,針對這兩個變數構建一個二次規劃問題。這個二次規劃問題關於這兩個變數的解應該更接近原始二次規劃問題的解,因為你這會使得原始二次規劃問題的目標函式值變得更小。重要的是,這時子問題因為只有兩個變數,且其中一個變數還能根據約束條件由另一個變量表出,所以可以通過解析方法求解,這樣就可以大大提高整個演算法的計算速度。如此,SMO演算法將原問題不斷分解為子問題並對子問題求解,進而達到求解原問題的目的。

    因此,整個SMO演算法包括兩個部分:求解兩個變數二次規劃的解析方法和選擇變數的啟發式方法。

注意到只需選取的αi和αj有一個不滿足KKT條件,目標函式就會在迭代後增大。直觀上來看,KKT條件違背的程度越大,則變數更新後可能導致的目標函式值增幅越大。於是SMO先選取違背KKT條件程度最大的變數。第二個變數應選擇一個使目標函式值增長最快的變數,但由於比較各變數所對應的目標函式值增幅的複雜度過高,因此SMO採用了一個啟發式:使選取的兩變數所對應樣本之間的間隔最大。一種直觀的解釋是,這樣的兩個變數有很大的差別,與對兩個相似的變數進行更新相比,對它們進行更新會帶給目標函式值更大的變化。

  關於SMO演算法的更加詳細介紹以後有需要的話我再寫一篇文章進行梳理,這裡我們只需要知道根據SMO演算法最終可以解出α,然後將α代入下式

可以解出w,然後根據任意支援向量(xi,yi)都有

(其中S為支援向量的下標集)可以解出b

至此,劃分超平面https://img-blog.csdn.net/20131107201104906已被我們解出。

 

三、軟間隔支援向量機

  上一章討論的硬間隔線性支援向量機是用來解決訓練資料完全線性可分情況的演算法,但由於我們實際獲取的真實樣本往往會存在噪聲,使得訓練資料不是清晰線性可分的,又或者即使我們找到了一個可以使不同類樣本完全分開的超平面,也很難確定這個線性可分的結果是不是由於過擬合導致的,比如下圖的情況,為此引入了“軟間隔”(soft margin)的概念。

具體來說,硬間隔支援向量機要求所有的樣本均被最佳超平面正確劃分,而軟間隔支援向量機允許某些樣本點不滿足間隔大於等於1的條件,當然在最大化間隔的時候也要限制不滿足間隔大於等於1的樣本的個數使之儘可能的少。於是我們引入一個懲罰係數C>0,並對每個樣本點(xi,yi)引入一個鬆弛變數(slack variables)ξ≥0,此時可將上一章中的求解

改寫為

上式中約束條件改為

表示間隔加上鬆弛變數大於等於1. 優化目標改為

表示對每個鬆弛變數都要有一個代價損失Cξi,C越大對誤分類的

懲罰越大,C越小對誤分類的懲罰越小。

上式是軟間隔支援向量機的原始問題。可以證明w的解是唯一的,b的解不是唯一的,b的解是在一個區間內。假設求解軟間隔支援向量機間隔最大化問題得到的最佳超平面是https://img-blog.csdn.net/20131107201104906,對應的分類決策函式為

f(x)稱為軟間隔支援向量機

接下來我們用和求解硬間隔支援向量機同樣的方法來對軟間隔支援向量機求解,由於在上一章詳細介紹過思路,這裡只列出數學式子。

令L分別對w、b、ξ求偏導,並令偏導數等於0,得

將上式代入得到

對比軟間隔支援向量機的對偶問題和硬間隔支援向量機的對偶問題可發現二者的唯一差別就在於對偶變數的約束不同,軟間隔支援向量機對對偶變數的約束是0≤αi≤C,硬間隔支援向量機對對偶變數的約束是0≤αi,於是可採用和硬間隔支援向量機相同的解法求解。

對於軟間隔支援向量機,KKT條件要求:

同硬間隔支援向量機類似,對任意訓練樣本(xi→,yi),總有αi=0或yi(wx+b)−1+ξi=0,若αi=0,則該樣本不會對最佳決策面有任何影響;若αi>0則必有yi(wx+b)=1−ξi,也就是說該樣本是支援向量。若αi<C則μi>0進而有ξi=0,即該樣本處在最大間隔邊界上;若αi=C則μi=0此時如果ξi≤1則該樣本處於最大間隔內部,如果ξi>1則該樣本處於最大間隔外部即被分錯了。由此也可看出,軟間隔支援向量機的最終模型僅與支援向量有關。

 

四、非線性支援向量機

在討論了訓練樣本近似線性可分的情況後,我們再來看看原始樣本空間中不存在一個能正確劃分兩類樣本的超平面的情況,如下圖左邊的情況所示。

https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543475110002&di=ba42e64c80e27dbc3108617d860084fa&imgtype=jpg&src=http%3A%2F%2Fimg0.imgtn.bdimg.com%2Fit%2Fu%3D1772634595%2C4004826352%26fm%3D214%26gp%3D0.jpg

對於這樣的問題可以通過將樣本從原始空間對映到特徵空間使得樣本在對映後的特徵空間裡線性可分。例如對上圖中左邊的樣本做特徵對映可得到上圖右邊所示的樣本分佈,這樣就很好進行線性劃分了。

  上面的例子說明,用線性分類的方法求解非線性分類問題分為兩步:

首先使用一個變換將原空間的資料對映到新空間;

然後在新空間裡用線性分類學習方法從訓練資料中學習分類模型。

令x表示原空間的資料,ф(x)表示將x對映後的特徵向量,於是在特徵空間中劃分超平面所對應的模型可表示為

我們同樣可以用第二章中的方法對其求解,可將其化為

求解上式涉及到計算,這是樣本xi和xj對映到特徵空間之後的內積。由於特徵空間維數可能很高,因此直接計算通常是非常困難的。為了避開這個障礙,可以設想這樣一個函式:

即xi與xj在特徵空間的內積等於它們在原始樣本空間中通過函式k(.,.)計算的結果。這樣我們在求解時的計算就會變得簡單些,這裡的函式K(.,.)就是“核函式”(kernel function)。

  顯然,若已知合適對映ф(.)的具體形式,則可寫出核函式k(.,.)。但是在現實任務中我們通常不知道ф(.)是什麼形式,所以很難找出精確的k(.,.),但我們有一些常用的核函式,當無法找出ф(.)時,我們會選用這些常用的核函式來進行支援向量機的構造。需要注意的是,核函式選擇的不同,代表將樣本對映到了不同的特徵空間,因此選擇不合適的核函式與選擇合適的函式相比可能會導致效能上的巨大差異。

 

參考文獻

  1. 李航,《統計學習方法》
  2. 周志華,《機器學習》
  3. GarryLau,https://blog.csdn.net/liugan528/article/details/79448379