matlab 交叉验证 代码,交叉验证(Cross Validation)方法思想简介
本帖最后由 azure_sky 于 2014-1-17 00:30 編輯
2).K-fold Cross Validation(記為K-CV)
將原始數據分成K組(一般是均分),將每個子集數據分別做一次驗證集,其余的K-1組子集數據作為訓練集,這樣會得到K個模型,用這K個模型最終的驗證集的分類準確率的平均數作為此K-CV下分類器的性能指標.K一般大于等于2,實際操作時一般從3開始取,只有在原始數據集合數據量小的時候才會嘗試取2.K-CV可以有效的避免過學習以及欠學習狀態的發生,最后得到的結果也比較具有說服性.
--------------------------------------------我是分界線------------------------------------------------------------------------------------
關于交叉驗證K-FOLD我有幾個問題:
1) 假設是4-fold的交叉驗證,需要跑四次SVM,有四個model。我想問,他們的SVM 的參數,比如c和g設置相同么?
2) k-fold CV經常被用作參數選取。這個最佳參數是怎么得到的。
每個model會得到一個c和g的參數
然后對這k個參數加權平均么?
還是說,在進行k-fold cv時,所有模型使用相同的c和g參數。
3)關于k-fold的用法。 我常見的一種情況是,有訓練數據traindata和測試數據testdata
在traindata上跑交叉驗證,選取最佳參數,然后在testdata上進行預測。
現在的情況是,我只有traindata,我想要用k-fold交叉驗證在traindata。我關心的不是準確率,而是具體的預測值。
我知道libsvm中有一個 '-v'選項進行交叉驗證。
例如代碼? ???svr_model = svmtrain( data_label, data_scale, '-v','10' );
但是這樣獲得了一個model。能不能得到fold是怎么分的呢。
每個chunk是對應著哪些訓練數據的index?
每一個fold跑完,在那個 對應的1/k * length(traindata) 上預測的label是什么?
4)k-fold在訓練數據上進行預測,怎么操作。
比如我現在只有數據traindata。
我想得到k-fold cv在traindata上的預測值。
我可以進行如下操作么:
1) 用k-fold進行參數尋優。得到最好的c和g。使用命令
[bestmse,bestc,bestg]=SVMcgForRegress(train_label ,traindata);
2) 用c和g,用traindata進行k-fold的訓練得到模型
cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),'-v 10 -s 3 -p 0.01'];
svr_model = svmtrain( train_label, traindata_scale, cmd );
3)用得到的model在整個traindata得到預測值
[pred_label] = svmpredict(train_label, traindata, svr_model);
這樣做感覺很奇怪。我可以在第二步得到對應的 k-fold數據劃分,以及在那個1/k chunk上的預測值么?
總結
以上是生活随笔為你收集整理的matlab 交叉验证 代码,交叉验证(Cross Validation)方法思想简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql handlers,2 Han
- 下一篇: matlab cep,【CEP】重构和改