支援向量機

2021-10-01 04:16:29 字數 3152 閱讀 1948

platt的 smo演算法 2023年,john platt發布了乙個稱為smo①的強大演算法,用於訓練svm。smo表示序列最小優 化(sequential minimal optimization)。platt的smo演算法是將大優化問題分解為多個小優化問題來 求解的。這些小優化問題往往很容易求解,並且對它們進行順序求解的結果與將它們作為整體來 求解的結果是完全一致的。在結果完全相同的同時,smo演算法的求解時間短很多。 smo演算法的目標是求出一系列alpha和b,一旦求出了這些alpha,就很容易計算出權重向量w 並得到分隔超平面。 smo演算法的工作原理是:每次迴圈中選擇兩個alpha進行優化處理。一旦找到一對合適的 alpha,那麼就增大其中乙個同時減小另乙個。這裡所謂的「合適」就是指兩個alpha必須要符合 一定的條件,條件之一就是這兩個alpha必須要在間隔邊界之外,而其第二個條件則是這兩個alpha 還沒有進行過區間化處理或者不在邊界上。

6.3.2 應用簡化版 smo演算法處理小規模資料集 platt smo演算法的完整實現需要大量**。在接下來的第乙個例子中,我們將會對演算法進行 簡化處理,以便了解演算法的基本工作思路,之後再基於簡化版給出完整版。簡化版**雖然量少 但執行速度慢。platt smo演算法中的外迴圈確定要優化的佳alpha對。而簡化版卻會跳過這一部 分,首先在資料集上遍歷每乙個alpha,然後在剩下的alpha集合中隨機選擇另乙個alpha,從而構 建alpha對。這裡有一點相當重要,就是我們要同時改變兩個alpha。之所以這樣做是因為我們有 乙個約束條件:

利用完整 platt smo演算法加速優化

在幾百個點組成的小規模資料集上,簡化版smo演算法的執行是沒有什麼問題的,但是在更大 的資料集上的執行速度就會變慢。剛才已經討論了簡化版smo演算法,下面我們就討論完整版的 platt smo演算法。在這兩個版本中,實現alpha的更改和代數運算的優化環節一模一樣。在優化過 程中,唯一的不同就是選擇alpha的方式。完整版的platt smo演算法應用了一些能夠提速的啟發方 法。或許讀者已經意識到,上一節的例子在執行時存在一定的時間提公升空間。 platt smo演算法是通過乙個外迴圈來選擇第乙個alpha值的,並且其選擇過程會在兩種方式之 間進行交替:一種方式是在所有資料集上進行單遍掃瞄,另一種方式則是在非邊界alpha中實現單遍掃瞄。而所謂非邊界alpha指的就是那些不等於邊界0或c的alpha值。對整個資料集的掃瞄相當 容易,而實現非邊界alpha值的掃瞄時,首先需要建立這些alpha值的列表,然後再對這個表進行 遍歷。同時,該步驟會跳過那些已知的不會改變的alpha值。 在選擇第乙個alpha值後,演算法會通過乙個內迴圈來選擇第二個alpha值。在優化過程中,會 通過最大化步長的方式來獲得第二個alpha值。在簡化版smo演算法中,我們會在選擇j之後計算錯 誤率ej。但在這裡,我們會建立乙個全域性的快取用於儲存誤差值,並從中選擇使得步長或者說 ei-ej大的alpha值

首要的事情就是建立乙個資料結構來儲存所有的重要值,而這個過程可以通過乙個物件來完 成。這裡使用物件的目的並不是為了物件導向的程式設計,而只是作為乙個資料結構來使用物件。在 將值傳給函式時,我們可以通過將所有資料移到乙個結構中來實現,這樣就可以省掉手工輸入的 麻煩了。而此時,資料就可以通過乙個物件來進行傳遞。實際上,當完成其實現時,可以很容易 通過python的字典來完成。但是在訪問物件成員變數時,這樣做會有更多的手工輸入操作,對比 一下myobject.x和myobject[『x』]就可以知道這一點。為達到這個目的,需要構建乙個僅包含 init方法的optstruct類。該方法可以實現其成員變數的填充。除了增加了乙個m×2的矩陣成 員變數ecache之外 ,這些做法和簡化版smo一模一樣。ecache的第一列給出的是ecache是 否有效的標誌位,而第二列給出的是實際的e值。 對於給定的alpha值,第乙個輔助函式calcek()能夠計算e值並返回。以前,該過程是採用內嵌 的方式來完成的,但是由於該過程在這個版本的smo演算法**現頻繁,這裡必須要將其單獨拎出來。 下乙個函式selectj()用於選擇第二個alpha或者說內迴圈的alpha值 。回想一下,這裡的 目標是選擇合適的第二個alpha值以保證在每次優化中採用大步長。該函式的誤差值與第乙個 alpha值ei和下標i有關。首先將輸入值ei在快取中設定成為有效的。這裡的有效(valid)意味著 它已經計算好了。在ecache中,**nonzero(os.ecache[:,0].a)[0]構建出了乙個非零表。 numpy函式nonzero()返回了乙個列表,而這個列表中包含以輸入列表為目錄的列表值,當然 讀者可以猜得到,這裡的值並非零。nonzero()語句返回的是非零e值所對應的alpha值,而不是 e值本身。程式會在所有的值上進行迴圈並選擇其中使得改變大的那個值 。如果這是第一次 迴圈的話,那麼就隨機選擇乙個alpha值。當然,也存在有許多更複雜的方式來處理第一次迴圈的 情況,而上述做法就能夠滿足我們的目的。 程式清單6-3的後乙個輔助函式是updateek(),它會計算誤差值並存入快取當中。在對 alpha值進行優化之後會用到這個值。 程式清單6-3中的**本身的作用並不大,但是當和優化過程及外迴圈組合在一起時,就能 組成強大的smo演算法。 接下來將簡單介紹一下用於尋找決策邊界的優化例程。開啟文字編輯器,新增下列清單中的 **。在前面,讀者已經看到過下列**的另外一種形式。

6.7 本章小結

支援向量機是一種分類器。之所以稱為「機」是因為它會產生乙個二值決策結果,即它是一種 決策「機」。支援向量機的泛化錯誤率較低,也就是說它具有良好的學習能力,且學到的結果具有 很好的推廣性。這些優點使得支援向量機十分流行,有些人認為它是監督學習中好的定式演算法。

支援向量機試圖通過求解乙個二次優化問題來大化分類間隔。在過去,訓練支援向量機常 採用非常複雜並且低效的二次規劃求解方法。john platt引入了smo演算法,此演算法可以通過每次只 優化2個alpha值來加快svm的訓練速度。本章首先討論了乙個簡化版本所實現的smo優化過程,接著給出了完整的platt smo演算法。相對於簡化版而言,完整版演算法不僅大大地提高了優化的速 度,還使其存在一些進一步提高執行速度的空間。有關這方面的工作,乙個經常被引用的參考文 獻就是「improvements to platt』s smo algorithm for svm classifier design」①。 核方法或者說核技巧會將資料(有時是非線性資料)從乙個低維空間對映到乙個高維空間, 可以將乙個在低維空間中的非線性問題轉換成高維空間下的線性問題來求解。核方法不止在svm 中適用,還可以用於其他演算法中。而其中的徑向基函式是乙個常用的度量兩個向量距離的核函式。 支援向量機是乙個二類分類器。當用其解決多類問題時,則需要額外的方法對其進行擴充套件。 svm的效果也對優化引數和所用核函式中的引數敏感。 下一章將通過介紹乙個稱為boosting的方法來結束我們有關分類的介紹。讀者不久就會看到, 在boosting和svm之間存在著許多相似之處。

支援向量機專題 線性支援向量機

原文 當資料線性不可分時,使用硬間隔支援向量機很難得到理想的結果。但是如果資料近似線性可分,可以採用軟間隔支援向量機 線性支援向量機 進行分類。這通常適用於有少量異常樣本的分類,如果使用線性支援向量機,它會盡量使得所有訓練樣本都正確,如下圖所示。顯然這並不是最好的結果,軟間隔支援向量機可以權衡 間隔...

支援向量機

支援向量機 svm 一種專門研究有限樣本 的學習方法。是在統計學習理論基礎之上發展而來的。沒有以傳統的經驗風險最小化原則作為基礎,而是建立在結構風險最小化原理的基礎之上,發展成為一種新型的結構化學習方法。結構風險最小歸納原理 解決了有限樣本或小樣本的情況下獲得具有優異泛化能力的學習機器。包含了學習的...

支援向量機

支援向量 與分離超平面距離最近的樣本點的例項 優點 泛化錯誤率低,計算開銷不大,結果易解釋 缺點 對引數調節和核函式選擇敏感,原始分類器不加修改僅適用於處理二分類問題 適合資料型別 數值型和標稱型資料 每次迴圈中選擇兩個alpha進行優化處理。一旦找到一對合適的alpha,那麼久增大其中乙個同時減小...