注:關於支持向量機系列文章是借鑑大神的神做,加以本身的理解寫成的;若對原做者有損請告知,我會及時處理。轉載請標明來源。html
我在支持向量機系列中主要講支持向量機的公式推導,第一部分講到推出拉格朗日對偶函數的對偶因子α;第二部分是SMO算法對於對偶因子的求解;第三部分是核函數的原理與應用,講核函數的推理及經常使用的核函數有哪些;第四部分是支持向量機的應用,按照機器學習實戰的代碼詳細解讀。算法
機器學習之支持向量機(三):核函數和KKT條件的理解post
機器學習之支持向量機(四):支持向量機的Python語言實現學習
這裏補充一點,後面的K () 函數是核函數,是把低維度的數據投射到高維度中,即把非線性轉換成線性分類。知道k 是核函數就能夠了,後面會再詳細講解k 函數。咱們在上篇中獲得關於對偶因子的式子,對其求 α 極大,如今添加符號轉化成求極小,二者等價。優化
轉化後的目標函數:atom
其中 約束條件中 C 是懲罰係數,由對非線性加上鬆弛因子獲得的。url
1998年,由Platt提出的序列最小最優化算法(SMO)能夠高效的求解上述SVM問題,它把原始求解N個參數二次規劃問題分解成不少個子二次規劃問題分別求解,每一個子問題只須要求解2個參數,方法相似於座標上升,節省時間成本和下降了內存需求。每次啓發式選擇兩個變量進行優化,不斷循環,直到達到函數最優值。spa
咱們的目標:求解對偶因子 α (α1, α2, ... , αN)
SMO算法是經過必定的規定選擇兩個參數進行優化,並固定其他 N - 2 個參數,假如選取優化的參數是 α1, α2 ,固定α3, α4 , .., αN ,對目標函數進行化簡成二元函數得:
這裏強調一下,式子中的 Kij 是核函數,知道意思就能夠,不瞭解不太影響SMO算法的推導。
約束條件:
獲得 ,其中 ζ 是一個定值。
讓兩邊同時乘以y1 ,化簡獲得:
將(2)式帶入到(1)中可得:
對(3)式求導並等於0,得:
假設求解獲得的值,記爲α1new 、α2new 優化前的解記爲α1old 、α2old ,由約束條件知:
獲得:
再設支持向量機超平面模型爲:f (x) = ωTx + b , ω = Σ αi yi xi 即 f (xi) 爲樣本xi 的預測值,yi 表示 xi 的真實值,則令Ei 表示偏差值。
因爲 可得:
將上面的式子(4)(6)(7)帶入求導公式中,此時解出的 α2new 沒有考慮到約束條件,先記爲 α2new unclipped ,得:
帶入(5)式子,得:
以上求得的 α2new unclipped 沒考慮約束條件:
當和異號時,也就是一個爲1,一個爲-1時,他們能夠表示成一條直線,斜率爲1。
橫軸是,縱軸是,和既要在矩形方框內,也要在直線上,所以 L <= α2new <= H
最終獲得的值:
再根據 獲得 α1new :
對於大部分狀況 η = K11 + K22 - 2K12 > 0 ,求解方式如上;但 η <= 0 , α2new 取臨界點L或H。
當η<0時,目標函數爲凸函數,沒有極小值,極值在定義域邊界處取得。
當η=0時,目標函數爲單調函數,一樣在邊界處取極值。
計算方法:
第一個變量的選擇稱爲外循環,首先遍歷整個樣本集,選擇違反KKT條件的αi做爲第一個變量,接着依據相關規則選擇第二個變量(見下面分析),對這兩個變量採用上述方法進行優化。當遍歷完整個樣本集後,遍歷非邊界樣本集(0<αi<C)中違反KKT的αi做爲第一個變量,一樣依據相關規則選擇第二個變量,對此兩個變量進行優化。當遍歷完非邊界樣本集後,再次回到遍歷整個樣本集中尋找,即在整個樣本集與非邊界樣本集上來回切換,尋找違反KKT條件的αi做爲第一個變量。直到遍歷整個樣本集後,沒有違反KKT條件αi,而後退出。
SMO稱第二個變量的選擇過程爲內循環,假設在外循環中找個第一個變量記爲α1,第二個變量的選擇但願能使α2有較大的變化,因爲α2是依賴於|E1−E2|,當E1爲正時,那麼選擇最小的Ei做爲E2,若是E1爲負,選擇最大Ei做爲E2,一般爲每一個樣本的Ei保存在一個列表中,選擇最大的|E1−E2|來近似最大化步長。
每完成兩個變量的優化後,都要對閾值 b 進行更新,由於關係到 f(x) 的計算,即關係到下次優化時計算。
這部分結束了,經過SMO算法解出的對偶因子的值,能夠獲得最優的超平面方程 f (x) = ωTx + b ,即對樣本可以劃分。以上大多借鑑了勿在浮沙築高臺的blog 文章,他寫的已經很清晰,我只是在他的基礎上
增長或刪去很差理解的內容。下篇是對核函數和KKT條件的解釋。
機器學習之支持向量機(四):支持向量機的Python語言實現
參考: