11SVM-SMO-序列最小優化演算法
05 SVM – 支援向量機 – 概念、線性可分
06 SVM – 線性可分模型演算法和案例
07 SVM – 軟間隔模型
08 SVM – 軟間隔模型演算法流程
十三、SMO初識
序列最小優化演算法 (Sequential minimal optimization, SMO) 是一種用於解決SVM訓練過程中所產生的優化問題的演算法。 於1998年由John Platt發明,論文詳見:《Sequencial Minimal Optimization-a Fast Alg for Training SVM.pdf》
回顧線性可分SVM求解步驟:
假定存在一個β*=(β1,β2,…,βm)是我們最終的最優解,那麼根據KKT條件我們可以計算出w和b的最優解,如下:
進而我們可以得到最終的分離超平面為:
拉格朗日乘子法和KKT的對偶互補條件為:
β、μ和C之間的關係為:C – βi – μi = 0
根據這個對偶互補條件,我們有如下關係式:
也就是說我們找出的最優的分割超平面必須滿足下列的目標條件(g(x)):
拉格朗日對偶化要求的兩個限制的初始條件為:
從而可以得到解決問題的思路如下:
1、初始化後一個β值,讓它滿足對偶問題的兩個__初始限制條件__;
2、不斷優化這個β值,使得由它確定的分割超平面滿足__g(x)目標條件__;而且在優化過程中,始終保證β值滿足__初始限制條件__。
__PS:__這個求解過程中,和傳統的思路不太一樣,不是對目標函式求最小值,而是讓__g(x)目標條件__儘可能的滿足。
在這樣一個過程中,到底如何優化這個β值呢???
整理可以發現β值的優化須遵循以下兩個基本原則:
1、每次優化的時候,必須同時優化β的兩個分量;因為如果只優化一個分量的話,新的β值就沒法滿足__初始限制條件中__的__等式約束條件__了。
2、每次優化的兩個分量應該是違反__g(x)目標條件__比較多的。也就是說,本來應當是大於等於1的,越是小於1違反__g(x)目標條件__就越多;
或者換一種思路來理解,因為目標函式中存在m個變數,直接優化比較難,利用啟發式的方法/EM演算法的思想,每次優化的時候,只優化兩個變數,將其它的變數看成常數項,這樣SMO演算法就將一個複雜的優化演算法轉換為一個比較簡單的兩變數優化問題了。
十四、SMO演算法推導
1、構建β1、β2的函式
認為β1、β2是變數,其它β值是常量,從而將__目標函式轉換__如下:
由於β1y1 + β2y2 = k,並且y2 = 1,使用β2來表示β1的值:
將上式帶入目標優化函式,就可以消去β1,從而只留下僅僅包含β2的式子。
深入分析__最終求得的公式__:
2、求解β2的值
深入分析步驟1:
求解完最優的β值後,我們接下來要考慮限制條件。
3、考慮β1和β2的取值限定範圍
考慮β1和β2的取值限定範圍,假定新求出來的β值是滿足我們的邊界限制的,即如下所示:
當y1=y2的時候,β1+β2=k; 由於β的限制條件,我們可以得到:
當y1≠y2的時候,β1-β2=k;由於β的限制條件,我們可以得到:
結合β的取值限制範圍以及函式W的β最優解,我們可以得帶迭代過程中的最優解為:
然後根據β1和β2的關係,從而可以得到迭代後的β1的值:
求解β的過程中,相關公式如下:
求解最優β討論到這裡,不明白的可以私信。
下章討論如何選擇最初的β變數。
相關文章
- MySQL優化--IO排程演算法優化MySql優化演算法
- 【Dijkstra演算法】未優化版+優先佇列優化版演算法優化佇列
- 優化演算法總結優化演算法
- iOS冒泡演算法優化iOS演算法優化
- 用C++優雅的實現物件到檔案的序列化/反序列化C++物件
- 物件序列化(序列化)物件
- 演算法 最小高度樹演算法
- Java序列化、反序列化、反序列化漏洞Java
- 序列化與反序列化
- 梯度下降優化演算法概述梯度優化演算法
- 優化演算法庫DEAP的粒子群優化演算法(PSO)示例程式碼分析優化演算法
- 圖論之帶權圖「最小生成樹prim的優化」圖論優化
- 序列化與反序列化(GO)Go
- 去除重複字母(不同字元的最小序列)問題字元
- 運籌優化(十四)--離散優化的啟發式演算法優化演算法
- 深度學習 - 常用優化演算法深度學習優化演算法
- 無約束凸優化演算法優化演算法
- 選擇排序-演算法及優化排序演算法優化
- Hive的序列化/反序列化(SerDe)Hive
- python的序列化和反序列化Python
- ctf serialize 序列化和反序列化
- Java的序列化和反序列化Java
- Java的序列化與反序列化Java
- xml序列化和反序列化(一)XML
- C++ 序列化和反序列化C++
- 最小生成樹的演算法演算法
- 最小生成樹__Kurskal演算法演算法
- 最小生成樹__Prim演算法演算法
- 序列化
- 序列比對演算法演算法
- Leetcode 最小調整數+滑動視窗遞增子序列LeetCode
- Python中物件序列化和反序列化Python物件
- [Java基礎]序列化和反序列化Java
- Java中的序列化與反序列化Java
- JSR310-LocalDateTime序列化 & 反序列化JSLDA
- IO流(3) - 序列化和反序列化
- Flutter中JSON序列化與反序列化FlutterJSON
- C#序列化和反序列化(json)C#JSON