SVMtrain的參數c和g的優化


SVMtrain的參數c和g的優化

在svm訓練過程中,需要對懲罰參數c和核函數的參數g進行優化,選取最好的參數

知道測試集標簽的情況下
是讓兩個參數c和g在某一范圍內取離散值,然后,取測試集分類准確率最佳的參數

不知道測試集標簽的情況下

(1)利用交叉驗證的方法:(k-fold cross validation)

  1. Start 
  2. bestAccuracy = 0 
  3. bestc = 0 
  4. bestg = 0 
  5.  
  6. //n1 , n2 ,k都是事先給定的值 
  7. for c = 2^(-n1) : 2^(n1) 
  8. for g = 2^(-n2) : 2^(n2) 
  9. 將訓練集平均分為k部分,設為 
  10. train(1),train(2), ... ,train(k). 
  11. 分別讓每一部分作為測試集進行預測(剩下的k-1部分作為訓練集對分類器進行訓練)取得最后得到的所有分類的准確率的平均數,設為cv 
  12. if(cv>bestAccuracy) 
  13. bestAccuracy = cv; bestc = c; bestg = g 
  14. end 
  15. end 
  16. end 
  17. over 

(2)leave-one-out cross validation(loo交叉驗證)

設原始數據有N個樣本,那么LOO-CVj就是N-CV,即每一個樣本作為驗證集,其余的N-1個樣本作為訓練集,所以在LOO-CV下會得到N個模型,用N個模型的最終驗證集的分類准確率的平均數做為在LOO-CV下分類器的性能指標

** 但是LOO-cv計算量太大,每個樣本都要建立一個模型,計算成本太大

當計算出所有的c和g時,這時候這些c和g有可能會出現的是:某些成對出現的c和g驗證准確率一樣高,這時候選擇的是懲罰參數最小的c和g,認為c小的那個對象是最佳的選擇

偽代碼如下
bestAccuracy = 0
bestc = 0
bestg = 0
//將c和g划分為網格進行搜索
for c = 2 (cmin):2(cmax)
for c = 2 (gmin):2(gmax)
%%采用K-CV方法
將train大致分為K組,記為train(1)train(2)…train(k)
相應的標簽也要分離出來記為train_label(1),train_label(2)…train_label(k)
for run = 1:k
讓train(run),作為驗證集,其他的作為訓練集,記錄此時的驗證准確率為acc(run)
end
cv = (acc(1)+acc(2)+…acc(k))/k
if (cv>bestAccuracy)
bestAccury = cv;bestc=c;bestg=g;
end
end
end
over


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM