1. 程式人生 > 其它 >感知機和支援向量機學習筆記(一)

感知機和支援向量機學習筆記(一)

對《Python與機器學習實戰》一書閱讀的記錄,對於一些難以理解的地方查閱了資料輔以理解並補充和記錄,重新梳理一下感知機和SVM的演算法原理,加深記憶。


1.感知機

感知機的基本概念

  感知機是運用梯度下降學習過程的最簡單的機器學習演算法之一,是神經網路和支援向量機的基礎。具體提出是由Rosenblatt這個人提出的,具體背景略。這裡僅對感知機演算法進行介紹:

  對於二分類問題,假設一個數據集D={(x1,y1),...,(xN,yN)},存在一個平面(超平面)wx+b=0將資料分成兩類,使得:

則稱資料為線性可分的,否則為線性不可分。那麼,感知機的算是函式可以表示為:

其中E表示誤分類的集合,即:

那麼利用梯度下降法,對引數進行更新,更新過程如下:

  值得一提的是,考慮到計算速度問題,可採用隨機梯度下降(SGD)或批量梯度下降(BGD)進行引數更新,若為隨機梯度下降,隨機選取一個被誤分類的樣本進行引數的更新,則偏導數為:

 
  上述即為感知機的學習演算法過程,最終學習的模型為:

感知機的對偶形式

  對偶形式通常是為了解決原始問題較為複雜,經轉換為對偶形式後能夠方便求解,對於特定問題原始演算法的對偶形式存在一些共性。雖然感知機的原始形式比較簡單,但為了便於後面SVM演算法的對偶形式的理解,這裡對感知機的對偶形式的轉化過程進行講述。

  上述引數更新過程每一次選取一個分錯的樣本點對引數進行更新,假設在最終訓練結束後,樣本點(xi,yi)共被選取到了ni次,那麼最終引數更新為:

  設αi=ηni,則上式改寫為:

  那麼誤分類集合E可表示為:

  當存在有誤分類的點時,隨機選取xi對應下標的αi進行更新(隨機梯度下降),從而對α進行更新:

  這裡需要說明的是:

  即實際上引數的更新就是對選取到樣本點xi的次數ni進行更新。

2.從感知機到支援向量機

  在二分類情況下,感知機所關注的主要是將樣本分成兩類即可,理論上講,只要是線性可分的資料集,只要迭代次數足夠大,就一定能夠將樣本分開。但這對於最終模型的泛化能力沒有保證,換句話說就是“雖然分開了,但是哪種分開的情況下才是最好呢?”,如圖所示:


  圖中藍線和紅線都將樣本分成兩類(假設紅色為class1,藍色為class2),但對於一個新的樣本(綠色),採用藍線時,新樣本屬於class1,而採用紅線劃分時,新樣本屬於class2。

  因此,SVM就是為了解決這樣的問題的一種改進的方法。顯然對於上圖中直覺上紅線的劃分效果最好,保證了兩邊的資料點被劃分時有較大的“間隔”,這也是SVM演算法的主旨思想,即:在進行劃分的過程中使距離分離超平面最近的點的距離最大。具體數學描述如下:

  假設分離超平面為wx+b=0,那麼樣本點(xi,yi)距離平面的距離(這裡距離指的是幾個間隔,區別於函式間隔,該距離還有一個推導過程,某度可查)可以表示為:

(因在正側為正,在負一側為負,因此乘以yi即可)

   那麼,使得距離分離超平面距離最小的樣本點的距離最大的數學描述為:

  這裡不妨令函式間隔為1(具體為什麼設為1,一方面是便於推導,另一方面對於目標函式的優化沒有影響,詳細證明過程暫不考究),即:

  那麼問題轉化為:

上述即為SVM演算法的基本概述,至於如何求解,後文再說。

  對於線性可分的資料採用上述約束條件能夠將資料完美分開,這就是硬間隔SVM基於該假設進行的,而通常資料中存在一定的噪音,並不能完全是線性可分的,此時將採用軟間隔的方法對資料進行訓練。所謂軟間隔,就是在劃分資料時給予一定的容忍,同時為了限制這個容忍度,在目標函式中加上一定的懲罰,來制衡這種容忍程度,這裡容忍度稱之為鬆弛變數,記為ξ,具體描述如下:

  將約束條件加上一個鬆弛變數,即為:

  同時在目標函式中加入懲罰項,來約束鬆弛變數:

  那麼,根據約束條件,引入Hinge損失,記為l,則l可以表示為:

  那麼最終的目標函式變為:

  接下來就是如何求解SVM的問題,一種是採用梯度下降的直接進行引數迭代求解,另一種是轉換為求解問題的對偶形式,在進行求解。

利用梯度下降演算法求解SVM

  將上式作為損失函式進行求解,記為:

  那麼分別對w,b進行求導,則有:

  根據每一次迭代的誤差項e,誤差項計算公式為:

  選擇誤差項最大的一項對應的樣本點進行引數更新,即:

  然後選取(xi,yi)對引數進行更新,更新過程為:

  最終輸出模型:


SVM初步的介紹就先寫到這裡,後續將對SVM的對偶形式及其求解,以及核方法在SVM的運用進一步進行梳理。

參號文獻:

何宇健 《Python與機器學習實戰》