1. 程式人生 > 其它 >尋找最佳c/g引數——交叉驗證方法

尋找最佳c/g引數——交叉驗證方法

一、交叉驗證的意義

交叉驗證將原始資料集分為兩組,分別作為訓練集和驗證集。訓練集用於訓練模型,驗證集用於評價訓練模型的效能指標。
引數尋優的意義:引數的數值決定著模型的效能。
採用交叉驗證方法保障驗證資料集沒有參與過模型的訓練,可以給出較為準確的引數尋優結果。

二、常用的交叉驗證方法

幾種常用交叉驗證(cross validation)方式的比較【python】

優化演算法有很多,如網格搜尋演算法、遺傳演算法、粒子群演算法、蟻群演算法等。

交叉驗證來說,我們採取的是網格搜尋演算法,即在引數的一定的範圍內,按照指定的步長對不同的引數進行排列組合,將每一組引數組合進行測試,取效能指標最優的那一組引數作為最終引數的值。如本例中(C,gamma)組成了一個二維網格,再與效能指標識別率組成三維模型,實現引數的最優選擇。

1、Double cross-validation

Double cross-validation也稱2-fold cross-validation(2-CV)

將資料集分成兩個相等大小的子集,進行兩回合的分類器訓練。在第一回合,一個子集作為訓練集,另一個作為測試集;在第二回合,則將訓練集與測試集對換後,再次訓練分類器,而其中我們比較關心的是兩次測試集的識別率。

優點:容易實現,處理簡單。
缺點:沒有用到交叉的方法,驗證資料集對於模型的訓練沒有任何貢獻。

2、K-flod CV(k折交叉驗證)
樣本資料被分為k組,每次將一組作為驗證資料集,其餘的k−1組作為訓練資料集。這樣就會有k 個訓練模型,這k個模型的驗證準確率的平均值作為模型的效能指標。
優點:所有的樣本都會被用於模型訓練,評價結果可信。
缺點:相較於Hold one method,處理較為複雜。

3、Leave-One-Out CV(LOO-CV留一驗證法)
設原始資料集中有K個樣本,每次選擇一個樣本作為驗證資料集,其餘的K−1個樣本作為訓練資料集,這樣就會有K個訓練模型,這K個訓練模型的驗證準確率平均值為模型的效能指標。
優點:每次模型訓練,幾乎所有的樣本都會應用到,結果最可信。
缺點:需要訓練的模型較多,且訓練資料集樣本大,計算成本高。

三、(C,gamma)

C被稱為懲罰因子,C越大說明對錯誤的容忍度越小,會導致過擬合(overfitting);C太小可能會導致容錯率過高,會導致欠擬合。

一般是通過交叉驗證的方法來確定C和gamma。

思路:將C和gamma引數在一定取值範圍內按照一定的步長(預設為1)進行取值組合;在不同(C,gamma)的組合下,將訓練集樣本均分成k組,一組作為驗證的資料樣本,其餘k-1組則用來作為訓練的資料,每一組資料都輪流著作為驗證資料樣本,這樣在一組(C,gamma)組合下,就需要進行K次計算,把這K次計算的模型測試準確率score的均值作為這組(C,gamma)下模型的得分。這樣的話就能夠得到不同(C,gamma)組合下模型的得分,取得分最高的那組(C,gamma)即可,如果碰到有相同分的,一般考慮引數C,取C小的,因為在保證模型的準確率的情況下,C越小模型容錯率大,可以避免過擬合,若C也相同,則取先出現的那一組gamma