1、核函式概述:
核函式通俗的來說是通過一個函式將向量的低維空間對映到一個高維空間,從而將低維空間的非線性問題轉換為高維空間的線性問題來求解,從而再利用之前說的一系列線性支援向量機,常用的核函式如下:
多項式核函式:
高斯核函式:
比如硬間隔種的目標函式為:
而核函式替換後的目標函式為:
從這個兩個目標函式找共同點,其實會發現核函式是作用在特徵向量上,開始的目標函式一次計算是利用了兩個特徵向量,而接下來的核函式是對兩個特徵向量做函式運算,假如將核函式利用在一次運算利用三個特徵向量的計算,這時核函式就會對這三個特徵向量做核函式,其實就是一個替換的問題,將兩個特徵向量點積運算換成一個核函式的值,僅此而已。
2、SMO演算法概述:
因此接下來的處理還是求解拉格朗日乘子、w、b,因此引入SMO(序列最小最優化演算法)
首先SMO演算法要解決的對偶問題如下:
SMO演算法是一種啟發式演算法,基本思路:如果所有變數的解都滿足此最優化問題的KKT條件,那麼這個最優化的問題的解就得到了,SMO演算法其實就是在求解拉格朗日運算元。SMO演算法子問題:先選擇兩個變數,然後固定其他變數,針對此兩個變數構建二次規劃問題,子問題由兩個變數,一個是違反KKT條件最嚴重的變數,另一個由約束條件自動確定,然後對此子問題求解,當此兩個變數都滿足KKT條件,則子問題求解完成。SMO演算法就是將問題不斷的分解為此子問題,直到所有的變數的解都滿足此問題的KKT條件,從而結束演算法
通過以上的對偶問題可以將子問題寫成(此處假定選擇兩個變數alpha1、alpha2):
注意:此子問題的目標函式是從上面的對偶問題得來,在推導的過程中會發現有一些項沒有,是因為這個時候只有alpha1和alpha2是變數,其他的都看作固定的值,就類似求min(f(x))和min(f(x)+C)的解x是一樣的(C為常數)
3、alpha計算公式:
接下來幾個公式用於每次計算:
注:Ei是g(x)對xi的預測值對yi的值之差
此計算的是alpha2未經過處理的值,因為各個alpha都由一個範圍的,具體如下分段函式:
通過alpha2可以求得alpha1的新值如下:
4、變數選擇:
(1)首先面臨的是第一個變數的選擇,在SMO演算法的概述中我也介紹過,就是最不滿足此問題的KKT條件,KKT條件為何看如下(KKT是相對於每個樣本點來說的即(xi,yi)):
g(xi)如上述的式子
第一個變數的選擇是SMO的外層迴圈,在檢驗過程中,首先遍歷所有滿足0<alpha<C條件的樣本點,即在間隔邊界上的支援向量點,檢驗其是否滿足KKT條件,如果都滿足,則遍歷整個訓練集是否滿足KKT條件,選擇最不滿足的點為第一個變數。
(2)其次是第二個變數的選擇:第二個變數的選擇是SMO的內層迴圈,首先假定已經選定了第一個變數,第二個變數的選擇是希望能使alpha2有足夠大的變化,一種簡單的做法是其對應的|E1-E2|最大。在特殊的情況下,通過以上方法不能使目標函式有足夠的下降,則採用向下啟發規則繼續選擇alpha2,遍歷所有的間隔邊界上的支援向量點,依次將其作為alpha2試用,直到目標函式有足夠的下降,若找不到則便利整個訓練集;若仍找不到,則放棄alpha1,通過外層迴圈繼續選擇另外的alpha1.
(3)計算b和差值Ei
因為在每次完成兩個變數的優化之後,都需要重新計算b和Ei,主要是Ei的計算需要用的b,公式如下: