一、核函數概述:算法
核函數通俗的來講是經過一個函數將向量的低維空間映射到一個高維空間,從而將低維空間的非線性問題轉換爲高維空間的線性問題來求解,從而再利用以前說的一系列線性支持向量機,經常使用的核函數以下:函數
多項式核函數:優化
高斯核函數:spa
好比硬間隔種的目標函數爲:3d
而核函數替換後的目標函數爲:blog
從這個兩個目標函數找共同點,其實會發現核函數是做用在特徵向量上,開始的目標函數一次計算是利用了兩個特徵向量,而接下來的核函數是對兩個特徵向量作函數運算,假如將核函數利用在一次運算利用三個特徵向量的計算,這時核函數就會對這三個特徵向量作核函數,其實就是一個替換的問題,將兩個特徵向量點積運算換成一個核函數的值,僅此而已。變量
二、SMO算法概述:循環
所以接下來的處理仍是求解拉格朗日乘子、w、b,所以引入SMO(序列最小最優化算法)遍歷
首先SMO算法要解決的對偶問題以下:方法
SMO算法是一種啓發式算法,基本思路:若是全部變量的解都知足此最優化問題的KKT條件,那麼這個最優化的問題的解就獲得了,SMO算法其實就是在求解拉格朗日算子。SMO算法子問題:先選擇兩個變量,而後固定其餘變量,針對此兩個變量構建二次規劃問題,子問題由兩個變量,一個是違反KKT條件最嚴重的變量,另外一個由約束條件自動肯定,而後對此子問題求解,當此兩個變量都知足KKT條件,則子問題求解完成。SMO算法就是將問題不斷的分解爲此子問題,直到全部的變量的解都知足此問題的KKT條件,從而結束算法
經過以上的對偶問題能夠將子問題寫成(此處假定選擇兩個變量alpha一、alpha2):
注意:此子問題的目標函數是從上面的對偶問題得來,在推導的過程當中會發現有一些項沒有,是由於這個時候只有alpha1和alpha2是變量,其餘的都看做固定的值,就相似求min(f(x))和min(f(x)+C)的解x是同樣的(C爲常數)
三、alpha計算公式:
接下來幾個公式用於每次計算:
注:Ei是g(x)對xi的預測值對yi的值之差
此計算的是alpha2未通過處理的值,由於各個alpha都由一個範圍的,具體以下分段函數:
經過alpha2能夠求得alpha1的新值以下:
四、變量選擇:
(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,公式以下: