交叉驗證

之前的blog討論過經驗風險與結構風險之間相互限制的關係,如下圖:



http://blog.csdn.net/ice110956/article/details/14002791

我們在相同VC維的模型中,選擇經驗風險最小的模型,能夠得到與真實風險誤差有一定上限的結果,即這種策略的結果可控,雖然不是最優的。

那麼,在不同的VC維模型中,比如遇到一個分類問題,是使用SVM,貝葉斯,還是決策樹?這時候如何選擇呢?一個常見的方法就是交叉驗證。

 

交叉驗證就是把訓練樣本的一部分獨立出來作爲測試樣本,用這時候的測試誤差來估計真實數據分佈的結構誤差。如下是幾種常見的交叉驗證方法。

 

簡單交叉驗證

1.      隨機選取一部分樣本爲訓練(通常爲70%),剩下(30%)做測試,然後選擇測試誤差最小的模型。

2.      取整體樣本,用第一步得到的模型做再訓練,得到最終模型。不過,當模型或數據非常不穩定的時候,再訓練的結果有時候也會不好。

 

上述簡單交叉驗證的缺點就是,浪費了部分數據(30%)。如果數據量較大,那沒有很大影響,但是在數據很小時影響較大。

 

k-fold交叉驗證

1.把樣本分爲k個相同大小的子集,用其中一個i測試,剩下k-1個訓練。

2.改變測試集i,重複上述過程

3.把k次測試得到的結果取平均,作爲這個模型的結構誤差估計,然後選取最小結構誤差的模型。

 

通常,k=10會取得較好的結果。

 

leave-one-out 交叉驗證

還有一種情況,數據量特別小,上述取90%訓練還是有很大影響。那麼極端的,我們取k=m,即每個樣本一個子集,做交叉驗證。

 

教研室常用的方法

教研室的大體方法就是10-fold交叉驗證,不過不是把集合劃分爲10份,而是每次隨機選擇90%的樣本做訓練,然後隨機10次,取平均結果。

 

發佈了89 篇原創文章 · 獲贊 51 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章