對《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與機器學習實戰》