1. 程式人生 > >SVM原理與調參

SVM原理與調參

一、SVM基本原理:
支援向量機(support vector machines)是一個二分類的分類模型(或者叫做分類器)。如圖:

它分類的思想是,給定給一個包含正例和反例的樣本集合,svm的目的是尋找一個超平面來對樣本根據正例和反例進行分割。

在樣本空間中,劃分超平面可通過如下線性方程來描述:


SVM的核心思想是盡最大努力使分開的兩個類有最大間隔,這樣才能使得分割有更高的可信度。

如圖所示:
在這兩個超平面上的樣本點也就是理論上離分隔超平面最近的點,是它們的存在決定了H1和H2的位置,支撐起了分界線,它們就是所謂的支援向量,這就是支援向量機的由來有了這兩個超平面就可以順理成章的定義上面提到的間隔(margin)了
二維情況下 ax+by=c1和ax+by=c兩條平行線的距離公式為:
可以推出H1和H2兩個超平面的間隔為2/||w||,即現在的目的是要最大化這個間隔。所以support vector machine又叫Maximum margin hyper plane classifier等價於最小化||w||為了之後的求導和計算方便,進一步等價於最小化

兩個式子綜合一下有:


這就是目標函式的約束條件。現在這個問題就變成了一個最優化問題:

對偶優化問題

對於上述的最優化問題先需要構造拉格朗日函式:
分別對w和b求導得到:
然後再代入拉格朗日函式後得到原問題的對偶問題


現在已經完成了對這個問題的建模過程。當要對一個數據點分類是,只需要把待分類的資料點帶入g(x)中,把結果和正負號對比。又由上面計算得到的w,帶入g(x)得到:


但是上述公式只能算線性可分的點,對於線性不可分的情況需要把相應的點投影到核函式:

設對映函式為Φ(•),則對映後的空間分類函式變成
但是,如果拿到低維資料直接對映到高維的話,維度的數目會呈現爆炸性增長。於噪音的存在,有可能有偏離正常位置很遠的資料點存在,甚至類別1出現雜了類別2的區域中這樣的異常值叫outliers.為處理這種情況,SVM允許資料點在一定程度上偏離超平面,約束就變成了:
其中,稱為鬆弛變數(slack variable)還需要一個懲罰因子C(cost),它代表了對離群點帶來的損失的重視程度,它的值越大,對目標函式的損失越大,意味著你非常不願意放棄這些點。它是由使用者指定的一個值(libsvm中的引數C),是引數調優
的重點所在。
原來的優化問題就變成了下面這樣:
同樣用Lagrange方法得到對偶問題:
這才是一個可以處理線性和非線性情況並能容忍噪音和outlier的SVM!

二、演算法設計過程:

用PMO演算法來得到alpha和b這兩個引數,輸入為特徵資料,標籤以及懲戒因子C、鬆弛因子toler。

先給alpha 和 b初始值,

當迭代次數小於最大的迭代次數,

計算誤差,若誤差找過容忍範圍:

      隨機選擇另一個alpha資料

      同時優化這兩個資料

      並計算相應b值,需要b在0和C之間

      如果兩個向量不能被優化則退出內迴圈,

   如果所有向量都沒法優化,增加迭代次數,繼續下一個迴圈

三、調參

主要是cost和gamma以及對對映核函式的選擇,用網格搜尋法gridsearchCV調參。

最後呼叫best_estimoter來得到結果