日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SMO算法精解

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SMO算法精解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  本文參考自:https://www.zhihu.com/question/40546280/answer/88539689  

解決svm首先將原始問題轉化到對偶問題,而對偶問題則是一個凸二次規劃問題,理論上你用任何一個解決凸二次規劃的軟件包都可以解決,但是這樣通常來說很慢,大數據情況下尤其不實際, smo是微軟研究院的大神發明的解決svm對偶問題的優化算法,可以更快找到好的解。通常而言分簡化版和優化版smo算法。
  簡化版:每次迭代隨機選取alpha_i和alpha_j,當然其中要有一個違反kkt條件,通常先選一個違反kkt條件的alpha_i,然后隨機選擇一個alpha_j,然后用類似坐標上升(下降)的算法來優化目標函數,具體細節題主可以看相關代碼,推薦《machine learning in action》的svm部分,但是這樣的優化方式并不是最快的;
  優化版:用啟發式的算法選擇alpha_j,即選擇alpha_j,使得|Ei-Ej|最大,至于為什么,因為變量的更新步長正比于|Ei-Ej|,也就是說我們希望變量更新速度更快,其余的和簡化版其實區別不大;
  應該還有其他版本的smo,沒看過不做評論,希望對題主有用。

  SMO(Sequential Minimal Optimization)是針對求解SVM問題的Lagrange對偶問題,一個二次規劃式,開發的高效算法。

  傳統的二次規劃算法的計算開銷正比于訓練集的規模,而SMO基于問題本身的特性(KKT條件約束)對這個特殊的二次規劃問題的求解過程進行優化。

  對偶問題中我們最后求解的變量只有Lagrange乘子向量,這個算法的基本思想就是每次都只選取一對,固定向量其他維度的元素的值,然后進行優化,直至收斂。

  SMO干了什么?
  首先,整個對偶問題的二次規劃表達如下:
                              
  SMO在整個二次規劃的過程中也沒干別的,總共干了兩件事:
  • 選取一對參數
  • 固定向量的其他參數,將代入上述表達式進行求最優解獲得更新后的

  SMO不斷執行這兩個步驟直至收斂。

  因為有約束存在,實際上和的關系也可以確定。這兩個參數的和或者差是一個常數。
<img src="https://pic1.zhimg.com/071f3351b3eee2db40fea3ba944f9d7c_b.png" data-rawwidth="633" data-rawheight="274" class="origin_image zh-lightbox-thumb" width="633" data-original="https://pic1.zhimg.com/071f3351b3eee2db40fea3ba944f9d7c_r.png">所以雖然宣傳上說是選擇了一對

  所以雖然宣傳上說是選擇了一對,但還是選擇了其中一個,將另一個寫作關于它的表達式代入目標函數求解。

  為什么SMO跑的那么快,比提出之前的算法不知道高到哪里去了?
  正如上面提到的,在固定其他參數以后,這就是一個單變量二次規劃問題,僅有的約束也是這個變量,顯然有閉式解。不必再調用數值優化算法。

  KKT條件是對偶問題最優解的必要條件
                            

  除了第一個非負約束以外,其他約束都是根據目標函數推導得到的最優解必須滿足的條件,如果違背了這些條件,那得到的解必然不是最優的,目標函數的值會減小。

  所以在SMO迭代的兩個步驟中,只要中有一個違背了KKT條件,這一輪迭代完成后,目標函數的值必然會增大。Generally speaking,KKT條件違背的程度越大,迭代后的優化效果越明顯,增幅越大。

  怎樣跑的更快?
  和梯度下降類似,我們要找到使之優化程度最大的方向(變量)進行優化。所以SMO先選取違背KKT條件程度最大的變量,那么第二個變量應該選擇使目標函數值增大最快的變量,但是這個變量怎么找呢?比較各變量優化后對應的目標函數值的變化幅度?這個樣子是不行的,復雜度太高了。

  SMO使用了一個啟發式的方法,當確定了第一個變量后,選擇使兩個變量對應樣本之間最大的變量作為第二個變量。直觀來說,更新兩個差別很大的變量,比起相似的變量,會帶給目標函數更大的變化。間隔的定義也可以借用偏差函數
                                        
  我們要找的也就是使對于來說使最大的

  很慚愧,只做了一點微小的工作。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

SVM算法優點:

(1)非線性映射是SVM方法的理論基礎,SVM利用內積核函數代替向高維空間的非線性映射;

(2)對特征空間劃分的最優超平面是SVM的目標,最大化分類邊際的思想是SVM方法的核心;

(3)支持向量是SVM的訓練結果,在SVM分類決策中起決定性作用。因此,模型需要存儲空間小,算法魯棒性( Robust )強。

SVM算法缺點:

(1) SVM算法對大規模訓練樣本難以實施

由于SVM是借助二次規劃來求解支持向量,而求解二次規劃將涉及m階矩陣的計算(m為樣本的個數),當m數目很大時該矩陣的存儲和計算將耗費大量的機器內存和運算時間。

(2) 用SVM解決多分類問題存在困難

經典的支持向量機算法只給出了二類分類的算法,而在數據挖掘的實際應用中,一般要解決多類的分類問題。?

基于以上問題,我們現在討論SOM(?Sequential Minimal Optimization algorithm?)算法。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1、SMO算法的原理

  這一被稱為“順次最小優化”的算法和以往的一些SVM改進算法一樣,是把整個二次規劃問題分解為很多易于處理的小問題,所不同的是,只有SMO算法把問題分解到可能達到的最小規模:每次優化只處理兩個樣本的優化問題,并且用解析的方法進行處理。我們將會看到,這種與眾不同的方法帶來了一系列不可比擬的優勢。

  對SVM來說,一次至少要同時對兩個樣本進行優化(就是優化它們對應的Lagrange乘子),這是因為等式約束的存在使得我們不可能單獨優化一個變量。

  所謂“最小優化”的最大好處就是使得我們可以用解析的方法求解每一個最小規模的優化問題,從而完全避免了迭代算法。

  當然,這樣一次“最小優化”不可能保證其結果就是所優化的Lagrange乘子的最終結果,但會使目標函數向極小值邁進一步。我們再對其它Lagrange乘子做最小優化,直到所有乘子都符合KKT條件時,目標函數達到最小,算法結束。

  這樣,SMO算法要解決兩個問題:一是怎樣解決兩個變量的優化問題,二是怎樣決定先對哪些Lagrange乘子進行優化。

2、SMO算法的特點和優勢?
  SMO算法和以往流行的SVM優化算法如塊算法、固定工作樣本集法相比,既有共同點,又有自己的獨特之處。

  共同點在于它們都是把一個大的優化問題分解為很多小問題來處理。塊算法在每一步中將新加入樣本中違反KKT條件的樣本與原有的支持向量一起組成小問題的樣本集進行優化,優化完畢后只保留其中的支持向量,再加進來新的樣本進入下一步。固定工作樣本集法是每一步只收集新加入樣本中“最壞”的樣本,并將原來保留的支持向量集中“較好”的替換出去,以保持樣本集大小不變。SMO則是把每一步的優化問題縮減到了最小,它可以看作是固定工作樣本集法的一種特殊情況:把工作樣本集的大小固定為2,并且每一步用兩個新的Lagrange乘子替換原有的全部乘子。


  SMO的最大特色在于它可以采用解析的方法而完全避免了二次規劃數值解法的復雜迭代過程。這不但大大節省了計算時間,而且不會牽涉到迭代法造成的誤差積累(其它一些算法中這種誤差積累帶來了很大的麻煩)。理論上SMO的每一步最小優化都不會造成任何誤差積累,而如果用雙精度數計算,舍入誤差幾乎可以忽略,于是所有的誤差只在于最后一遍檢驗時以多大的公差要求所有Lagrange乘子滿足KKT條件。可以說SMO算法在速度和精度兩方面都得到了保證。


  SMO在內存的節省上也頗具特色。我們看到,由于SMO不涉及二次規劃數值解法,就不必將核函數矩陣整個存在內存里,而數值解法每步迭代都要拿這個矩陣作運算。(4000個樣本的核函數矩陣需要128M內存!)于是SMO使用的內存是與樣本集大小成線性增長的,而不象以往的算法那樣成平方增長。在我們的程序中SMO算法最多占用十幾兆內存。SMO使得存儲空間問題不再是SVM應用中的另一個瓶頸。


  SMO算法對線性支持向量機最為有效,對非線性則不能發揮出全部優勢,這是因為線性情況下每次最小優化后的重置工作都是很簡單的運算,而非線性時有一步加權求和,占用了主要的時間。其他算法對線性和非線性區別不大,因為凡是涉及二次規劃數值解的算法都把大量時間花在求數值解的運算中了。

  當大多數Lagrange乘子都在邊界上時,SMO算法的效果會更好。?
  盡管SMO的計算時間仍比訓練集大小增長快得多,但比起其它方法來還是增長得慢一個等級。因此SMO較適合大數量的樣本。

?

轉載于:https://www.cnblogs.com/hellochennan/p/6636460.html

總結

以上是生活随笔為你收集整理的SMO算法精解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。